Как использовать Views PHP для перезаписи результатов поля?


7

Я использую Views PHP для перезаписи полей в Views. Я могу получить доступ ко всем переменным, НО те, которые имеют режим сборки. В моем случае у меня есть поле Content: Node (которое может быть построено в соответствии с любым отображением), которое должно быть доступно с помощью переменной $row->nodefield. Тем не менее, содержимое этой переменной всегда пусто. Я пробовал с другими переменными, и каждое поле с режимом сборки не будет отображаться в Views PHP .

введите описание изображения здесь

Это проблема дизайна или я что-то упустил?

Я использую Drupal 7 и Views 3

РЕДАКТИРОВАТЬ

Использование dpm () для доступных значений возвращает следующее:

пм ($ строка)

введите описание изображения здесь

пм ($ данные)

введите описание изображения здесь

Ответы:


6

Над разделом «Выходной код» вы должны проверить $dataпеременную в поле «Значение».

Обычно я просто dpm($data)нахожу нужное поле. Затем вы можете сохранить его в $static['myvalue']переменной для использования в поле «Выходной код».

Это сбивает с толку, но по какой-то причине, если вы попробуете только $row->xxxпеременные в разделе «Выходной код», они будут пустыми или установлены на идентификатор узла.


Спасибо. Я новичок в этом, поэтому не могли бы вы помочь мне в дальнейшем: когда я копирую dpm($data)в поле значения, Views возвращает "вызов неопределенной функции dpm ()" error "
znat

ХОРОШО. DPM - это функция devel, поэтому она не будет работать, если у вас не установлен модуль devel . Либо установите его, либо просто используйте print_r ($ data).
Шанс G

Я не нашел подходящего контента. (см. мое редактирование) Все поля в объекте $ row кажутся пустыми. Я пробовал другие переменные, такие как $ view или $ handler, но безуспешно. Токен [nodefield] доступен в Rewrite Results, поэтому он должен быть где-то. Любая другая идея?
Знать

3

$rowЭлементы «Доступные переменные» в представлениях бесполезны для получения значений полей. Но вам не нужно использовать, noad_loadчтобы получить необходимые данные. Сначала, как обычно, скройте вывод поля, которое вы хотите переписать, затем в поле «Код вывода» вашего поля PHP вы можете использовать $dataтак:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

В этом случае я убираю запрещенные теги и атрибуты из контента для использования в экспорте NITF. Если вы не уверены, что внутри $data, вы можете, конечно print_r($data), взглянуть на это.


что именно вы подразумеваете под: «Сначала, как обычно, скрыть вывод поля, которое вы хотите переписать»? Используете ли вы флажок «Исключить из отображения» в поле, которое мы хотим переписать?
Антонио

Да. Вы используете «Исключить из отображения» всякий раз, когда хотите получить значение поля и использовать его в последующем настраиваемом поле.
Скотт Лахтейн

1
Вы можете использовать, $data->field_field_body[0]['raw']['value']чтобы получить необработанное значение.
user2534880

1

Дополнительный совет: массив $ data действительно содержит необработанные данные узла и может быть напечатан. Но чтобы сделать это правильно, нам нужно обработать поля с помощью таких функций, как field_view_field .


1

Вы пытаетесь сделать это изнутри? Почему бы не использовать тему самого шаблона представления вместо использования глобального PHP? Я не уверен, будет ли print_r работать внутри поля просмотра. Если бы это был я, я бы просто щелкнул тему -> информация, вы увидите что-то вроде views-view-field - MyViewName.tpl.php

(редактирование, уточнение) В папке темы модуля views скопируйте «views-view-field.tpl.php», затем переименуйте его в «views-view-field - MyViewName.tpl.php» и поместите в папку / templates на вашем сайте им. В файле вы увидите что-то вроде

<?php print $output; ?> 

Вы можете удалить это и добавить все свои поля вручную, как

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

и т.д. Или оберните вывод $ чем хотите.

Кроме того, у меня никогда не было большой удачи с DEVEL, я всегда просто использую:

<?php print var_dump($row);?> 

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


Это дает повторяющиеся строки!
user219492

1

Вы никогда не должны хранить код PHP в вашей базе данных (и с View PHP вы будете). Вместо этого используйте хук Views, чтобы изменить результаты.


Привет @ssibal, и спасибо за помощь. Можете ли вы объяснить, почему этого следует избегать? Это значительно повысит качество вашего сообщения.
Neograph734

0

Я потратил два дня, чтобы найти решение. Самый простой способ - обновить модуль Views Php до 7.x-2.x-dev. Maintainer исправил эту проблему в версии 2.x.

Вы можете скачать отсюда (убедитесь, что вы скачали 7.x-2.x-dev ): https://www.drupal.org/project/views_php

Надежда может помочь кому-то.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.