Рейтинг:6

Как я могу удалить изображение по умолчанию из полей изображения?

флаг ru

Мне нужно создать поле изображения со значением по умолчанию, которое также должно иметь значение NULL для отдельных объектов контента. В отличие от текстовых полей или полей ссылок на объекты, мне не удалось удалить это значение по умолчанию для отдельных объектов контента.

Например. Я могу создать текстовое поле со значением по умолчанию «Lorem ipsum». При создании узла поле предварительно заполняется этим текстом, но я также могу удалить этот текст, и поле останется пустым.

Но в полях изображения вообще нет кнопки/опции для удаления значения по умолчанию. Я могу удалить изображение переопределения, но не изображение по умолчанию. Даже после загрузки изображения, отличного от значения по умолчанию, сохранения и повторного удаления этого изображения значение по умолчанию снова срабатывает.

Как я могу сделать поле изображения «обнуляемым»?

Обратите внимание, что я не могу использовать ссылки на объекты мультимедиа, потому что я должен поддерживать SVG, и эти изображения также не должны попадать в повторно используемый глобальный пул мультимедиа.

Рейтинг:5
флаг cn

На самом деле изображение по умолчанию не вызывает сохранения данных, но влияет на средство форматирования изображения, поэтому, если оно не находит значений для поля изображения, оно отображает изображение по умолчанию, которое установлено в настройках поля.

вы можете проверить в БД или просто создать контент с изображением по умолчанию A.png, а затем перейти к настройкам поля и изменить изображение по умолчанию на B.png, и когда вы отобразите свой узел, вы увидите, что B.png будет отображаться в содержимом.

Поэтому, если вы не хотите видеть изображение по умолчанию, в некоторых случаях вы можете продублировать средство форматирования изображения по умолчанию и делать все, что хотите.

и если вы действительно хотите сохранить данные для поля изображения со значением по умолчанию, вы можете сделать это, изменив форму узла, как показано ниже:

function my_module_form_node_article_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  foreach (array_keys($form['actions']) как $action) {
    if ($action != 'предварительный просмотр' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] == = 'отправить') {
      array_unshift($form['actions'][$action]['#submit'], 'my_module_test_form_submit');
    }
  }
}

функция my_module_test_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $image = $form_state->getValue('field_image');
  если (пусто($image[0]['fids'])) {
    $form_state->setValue('field_image', $form['field_image']['widget'][0]['#default_image']['fid']);
  }
}
флаг ru
Спасибо за подсказку с форматировщиком полей, это объясняет множество проблем, с которыми я столкнулся. Поле изображения — это единственное поле в ядре, которое не хранит значения по умолчанию в БД, а вычисляет их в средстве форматирования поля. Вот почему изображение не может принимать значения NULL, а API хранилища не возвращает правильные значения по умолчанию. Я отправил [отчет об ошибке на d.o](https://www.drupal.org/project/drupal/issues/3250680) об этом
Alireza Tabatabaeian avatar
флаг cn
Я могу себе представить, насколько утомительно осознавать, что вы на самом деле не сохраняли никаких значений в поле в течение длительного времени, хотя думали, что сделали это.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.