Как получить значения поля "Текст (список)"?

Главные вкладки

Аватар пользователя Artalek Artalek 15 октября 2021 в 8:20

Здравствуйте, получаю список содержимого определенного типа материала, и мне нужно еще как-то получить значения списка поля, чтобы сформировать массив, но не знаю как такое можно сделать.

Вот мой код:

<?php
function gut_preprocess_page(&$variables)
{
    
$node = \Drupal::routeMatch()->getParameter('node');
    if (
$node->getType() === 'page' && (int)$node->id() === 19) {
        
$faqs = [];
        

$query = \Drupal::entityQuery('node')->condition('type''faq');
        
$nids $query->execute();
        
$contents $node->loadMultiple($nids);
        if (!empty(

$contents)) {
            foreach (
$contents as $content) {
                
$type_id $content->get('field_faq_type')->value;
                
$faqs[$type_id][] = [
                    
'title' => $content->get('title')->value,
                    
'field_faq_answer' => $content->get('field_faq_answer')->value,
                    
'field_faq_type' => $type_id,
                ];
            }
        }
        
$variables['faqs'] = $faqs;
    }
}
?>

В переменной $content хранится вот это значение текущего содержимого https://prnt.sc/1w7ija4 , но не пойму как его достать, сам id я получаю тут $type_id = $content->get('field_faq_type')->value;

Если простыми словами, то мне нужно получить вот этот список https://prnt.sc/1w7irff

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 15 октября 2021 в 16:07
1

Artalek wrote: Проблема в том, что мне нужно получить не Наименование содержимого, а наименование Типа из поля `field_faq_type`

Я тут ни пистона не понял, простите. Но на всякий случай:

<?php
...
$node_prototype = \Drupal::service('entity_type.manager')->getStorage('node')->create(['type' => 'faq']);

$faq $node_prototype->getFieldDefinition('field_faq_type')->getFieldStorageDefinition()->getSetting('allowed_values');
...
?>

Комментарии

Аватар пользователя OldWarrior OldWarrior 15 октября 2021 в 12:59
<?php
...
$title$content->getTitle();
//или
$title$content->label();
...
$uid $content->getOwnerId();
...
?>

Значения для элемента формы 'options' формируются из массива пар "ключ => значение". То есть, одномерный ассоциативный массив, а не как у вас в коде ($faqs).

Аватар пользователя Artalek Artalek 15 октября 2021 в 14:26

как мне эти значения получить? $faqs построен правильно, я хочу, чтобы он выглядел так:

<?php
$faqs
[$type_id] = [
    
'title' 'Тип №1'
];
$faqs[$type_id]['list'][] = [
    
'title' => $content->get('title')->value,
    
'field_faq_answer' => $content->get('field_faq_answer')->value,
    
'field_faq_type' => $type_id,
];
?>

Вот я не знаю как мне получить `'Тип №1'`

Аватар пользователя OldWarrior OldWarrior 15 октября 2021 в 15:25

Во-первых:

<?php
$faqs
[$type_id] = [
    
'title' => 'Тип №1' 
    
// Оператор '= ' - это присваивание, а не указатель ('=>').
];
?>

Во-вторых, уже писал выше:

<?php
...
'title' => $content->getTitle(),
// or
'title' => $content->label(),
...
?>

В чём проблема?

Аватар пользователя Artalek Artalek 15 октября 2021 в 15:59

OldWarrior wrote: Во-первых:

Это да, просто пример писал в блокноте, и не обратил на это внимание

OldWarrior wrote: В чём проблема?

Проблема в том, что мне нужно получить не Наименование содержимого, а наименование Типа из поля `field_faq_type` - https://prnt.sc/1w7irff

Аватар пользователя OldWarrior OldWarrior 15 октября 2021 в 16:07
1

Artalek wrote: Проблема в том, что мне нужно получить не Наименование содержимого, а наименование Типа из поля `field_faq_type`

Я тут ни пистона не понял, простите. Но на всякий случай:

<?php
...
$node_prototype = \Drupal::service('entity_type.manager')->getStorage('node')->create(['type' => 'faq']);

$faq $node_prototype->getFieldDefinition('field_faq_type')->getFieldStorageDefinition()->getSetting('allowed_values');
...
?>