Проверка существования абзаца из поля заголовка в preprocess_field - PullRequest
0 голосов
/ 30 января 2020

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;
                  }
              }
            }
        }
    }
}

}

...