My Basi c Тип содержимого страницы имеет поле с именем field_site_body_custom типа Entity Reference Revisions, которое ссылается на элементы типа Paragraph. В настройках поля я выбрал подмножество абзацев, которые хочу использовать на Basi c Pages; один из которых - герой.
В зависимости от поставленной мне темы мне нужно изменить способ отображения заголовка страницы на странице, если в field_site_body_custom существует абзац типа Hero. Я наткнулся на файл темы, чтобы настроить mytheme_preprocess_field для моего поля заголовка - также проверяя, чтобы убедиться, что я нахожусь в типе контента "страница" - но я не могу понять, как копать в поле field_site_body_custom этого препроцессора, чтобы определить, есть ли там герой.
Может кто-нибудь помочь мне с этим? Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию.
Обновление: я смог получить то, что мне нужно, используя код ниже. Это не красиво. Есть ли способ оптимизировать этот код? Go легко ... Я новичок в теме.
function themename_preprocess_field(&$variables) {
//if title and on basic page, check for hero paragraph for modified title display
if ($variables['field_name'] == 'title') {
$node = \Drupal::routeMatch()->getParameter('node');
if ($node != null && !is_object($node)) {
$node = \Drupal\node\Entity\Node::load($node);
}
if (isset($node) && $node->bundle() == 'page') {
if (!empty($node->field_site_body_custom->getValue())) {
foreach ($node->field_site_body_custom->getValue() as $value) {
if (!empty($value['target_id'])) {
$paragraph = Paragraph::load($value['target_id']);
if ($paragraph->bundle() == "hero") {
$variables['has_hero'] = TRUE;
}
}
}
}
}
}
}