Как получить поля страницы просмотра с пользовательским блоком php

У меня есть страница просмотра Drupal 7 с различными полями. Одним из них является термин таксономии. У меня также есть «блок» представления, в котором контекстный фильтр настроен на тот же термин.

(Я пытаюсь отфильтровать результаты блоков по термину в представлении страницы)

Я создал новый блок (в разделе «блоки») и добавил собственный php для возврата и отображения представления.

Если я жестко кодирую идентификатор термина с помощью echo views_embed_view('events','block','1');, он работает нормально.

Мой вопрос; как мне получить значение поля в представлении страницы с помощью php. Я видел много примеров того, как получить его из обычного узла, но не из другого представления.

заранее спасибо


person jeff    schedule 01.12.2013    source источник


Ответы (2)


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

Как видно из предыдущего ответа Как вставить блок в узел или шаблон в Drupal 7?
Единственным исключением является то, что начиная с PHP 5.4 вы можете передавать только переменную в drupal_render()

$block = block_load('views', 'block_name');      
$output = _block_get_renderable_array(_block_render_blocks(array($block)));        
print drupal_render($output);

Если вы не находитесь на странице терминов таксономии или не можете получить представления для получения идентификатора термина, вам следует взглянуть на свою проблему с другой точки зрения, а именно найти способ самостоятельно получить термин tid и передать его :

views_embed_view()

Хорошим инструментом для достижения этого может быть модуль Devel в сочетании с некоторыми функциями предварительной обработки.

person PatrickS    schedule 01.12.2013
comment
Я не на странице терминов как таковой. Просто страница, созданная представлениями, которые используют контекстные фильтры представлений в качестве входных данных. Блок находится на той же странице и использует те же фильтры. Я смог обойти это, прикрепив параметры к URL-адресу страницы, а затем в своем блочном php-коде передав их вручную в [code]views_embed_view()[/code] - person jeff; 02.12.2013
comment
Если страница генерируется Views, блок может не получить доступ к тем же переменным. Как упоминалось выше, вы можете легко проверить это с помощью hook_preprocess(), если вы предпочитаете, вы можете проверить переменные с помощью hook_preprocess_page() и hook_preprocess_block()... Хотя ваш метод будет работать, по многим причинам я предпочитаю решение Drupal :) - person PatrickS; 03.12.2013

print $block = module_invoke('views', 'block_view', 'имя вашего блока');

print render($block['content']['#content']);

вы также можете использовать print_r() / var_dump() для отображения поля вашего желания

person Sandipan Bhattacharjee    schedule 03.12.2013