Рейтинг:0

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

флаг in

Отладка Twig предлагает узел -- 4.html.twig в качестве файла шаблона для узла с идентификатором 4. Поскольку идентификатор узла изменяется при изменении среды, мне нужно будет использовать файл шаблона, имя которого основано на заголовке узла.

Есть ли простой способ добиться этого?

Я использую Друпал 9.

MrD avatar
флаг cn
MrD
Вы можете использовать hook_theme_suggestions_node_alter, чтобы добавить больше шаблонов предложений.
флаг in
@LesLim Я обновил вопрос, чтобы отразить тот факт, что я использую Drupal 9, спасибо!
флаг in
@MrD Я также использую Twig Template Suggester, и в этом отношении он тоже не дает ничего полезного.
MrD avatar
флаг cn
MrD
@johnny_n Вы можете включить псевдоним для узла и добавить предложение по URL-адресу так же, как и предложение страницы.
sonfd avatar
флаг in
Возможно, вы не захотите использовать для этого поле заголовка. Возможно, создайте специальное поле для определения этого предложения шаблона. Если вам действительно нужно это только для одной страницы, вы можете установить значение поля, а затем удалить поле из отображения формы типа контента, чтобы его нельзя было изменить позже. Было бы очень тяжело, если бы простое изменение заголовка нарушило макет вашей страницы!
флаг in
@sonfd - Хороший звонок. И спасибо MrD за дополнительный совет. Это было невероятно полезно, спасибо!
Рейтинг:1
флаг de

После комментария MrD ключевым является hook_theme_suggestions_hook_alter (см. документация об этом хуке) или hook_theme_suggestions_alter(), если вы хотите добавить предложения к нескольким типам сущностей.

Это позволит вам добавить предложения шаблона, которых вам не хватает.

функция yourTheme_theme_suggestions_node_alter (массив & $ предложения, массив $ переменных) {
  // Используйте переменную $variables, чтобы получить данные, относящиеся к вашему узлу
  // например $node = $variables["elements"]["#node"] чтобы получить объект Node

  // Используйте переменную массива $suggestions, чтобы добавить свои собственные предложения в список
  // например $предложения[] = "узел__" . "мое прекрасное предложение";
}

Затем добавьте свой файл шаблона node--myawesomesuggestion.html.twig в свою тему, и все готово.

флаг in
Спасибо @misterdidi - вы абсолютно правы. Спасибо за разъяснение, я неправильно понял природу крючка.
Рейтинг:0
флаг us

Модуль Node не добавляет предложения шаблонов, которые включают заголовок узла, в node_theme_suggestions_node(). Модули и темы могут изменить существующие предложения, реализующие hook_theme_suggestions_HOOK_alter().
Следует помнить, что предлагаемое имя шаблона должно содержать только символы, разрешенные в имени функции PHP.

Для заголовка узла я бы использовал следующий код.

function mymodule_theme_suggestions_node_alter (массив & $ предложения, массив $ переменных) {
  $node_title = \Drupal::transliteration()->transliterate($variables['elements']['#node']->getTitle());
  $suggestions[] = 'узел__' . preg_replace('/[^a-z0-9_]+/', '_', mb_strtolower($node_title));
}

Код для замены символов, которых не должно быть в имени функции PHP, такой же, как и в media_theme_suggestions_media() за $provider_id.

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

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