Как да получите полета на страница с изгледи с персонализиран блок php

Имам „страница“ за изглед на Drupal 7 с различни полета. Един от тях е таксономичен термин. Имам и „блок“ за изглед, който има контекстуален филтър, зададен на същия термин.

(Опитвам се да филтрирам резултатите от блоковете по термина в изгледа на страницата)

Създадох нов блок (под „блокове“) и добавих персонализиран php за връщане и показване на изгледа.

Ако кодирам твърдо идентификатора на термина с echo views_embed_view('events','block','1');, той работи добре.

Въпросът ми е; как да получа стойността на поле в изгледа на страницата с php. Виждал съм много примери за това как да го получа от нормален възел, но не и от друг изглед.

Благодаря предварително


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


Отговори (2)


В Drupal блоковете обработват контекстни филтри вътрешно. Ако използвате следния код, за да отпечатате вашия блок, не трябва да се притеснявате за предаване на аргумента термин, при условие че сте на страницата с термина или че изрично сте задали как да извлечете идентификатора на термина в рамките на параметрите на Views Contextual filters.

Както се вижда в предишен отговор Как да вмъкнете блок във възел или шаблон в 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', 'името на вашия блок');

рендиране на печат ($block['content']['#content']);

можете също да използвате print_r() / var_dump(), за да покажете вашето поле за желание

person Sandipan Bhattacharjee    schedule 03.12.2013