Рейтинг:1

How to get a rendered views field value programmatically?

флаг us

Yes, I see there are many answers already posted here and elsewhere for this; but sadly they are all wrong. These answers include any of the following:

$view->style_plugin->getFieldValue($rid, 'field_myfield');

foreach ($view->result as $rid => $row) {
 foreach ($view->field as $fid => $field ) {
   $values[$rid][$fid . '-value'] = $field->getValue($row);
   $values[$rid][$fid . '-render'] = $field->render($row);
 }
}

$views->_entity->...

or a few others. These are all returning the field of the base entity returned by the view. These are entity field values. These are not the "fields of the view".

I know how to access these in a twig template (views-view-fields--[viewname]--[displayname].html.twig) but haven't been able to find out how to do this in a custom module.

Answer:

From @4k4's tip below:

This works:

foreach ($view->result as $rid => $row) {
  $type[$row->nid] = $view->field['my_views_field']->advancedRender($row)->__toString();
}
4uk4 avatar
флаг cn
*Это не "поля представления"* - `$view->field` содержит поля, которые вы настроили в разделе ПОЛЯ представления. Каждое поле является подключаемым модулем обработчика полей, и если вы хотите отображать поле точно так же, как оно настроено в представлении, используйте метод подключаемого модуля advancedRender($row).
liquidcms avatar
флаг us
Я попробовал advancedRender() (хотя и не включил его в свой список выше); но, должно быть, применялся к неправильной вещи. Это работает. Спасибо. Я добавил полный ответ на пост.
флаг cn
+1 голос за ваш вопрос, @liquidcms, спасибо. Вы должны ввести свой ответ выше как ответ ниже, в поле ввода текста под «Ваш ответ» в этом ответе, а затем отметить его, чтобы отметить его как принятый ответ. Я нашел ваш ответ полезным. Одна вещь, которую я хотел бы легко найти, — это имя машины поля в строке представлений — на экране редактирования представлений на страницах веб-администрирования отображается имя «например, Content: ID», но не имя машины («nid» ). Еще раз спасибо.
liquidcms avatar
флаг us
Если вы наведете курсор на поле в пользовательском интерфейсе просмотра, оно покажет вам имя машины.
Рейтинг:0
флаг us

Из ответа @ 4k4 выше:

foreach ($view->результат как $rid => $row) {
  $type[$row->nid] = $view->field['my_views_field']->advancedRender($row)->__toString();
}

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

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