[РЕШЕНО] Перехват вывода Views

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

Аватар пользователя xakudu xakudu 29 октября 2012 в 20:01

Во Views можно переопределить любое поле, используя пункт "Rewrite the output of this field", все это знают. Там проблема с PHP, но она вроде решается сторонним модулем(не напомните кстати каким?).
Но возникла задача перехватить и изменить данное поле из стороннего модуля, и я как-то подрастерялся, ибо вывод Views не перехватывал никогда.
Кто-нибудь может подсказать, в каком хуке можно на лету изменить готовый views с уже сформированными полями, который вот-вот выведется? Или какие тут могут быть решения?
Или как вариант - можно натравить Views на файлы, расположенные не в папке темы, а в папке модуля. Только как указать это Views?

Комментарии

Аватар пользователя cosmos cosmos 29 октября 2012 в 21:14

можно добавиь свою preprocess функцию в которой изменить значения строк
можно в шаблоне строки изменить переопределив хук views_view_fields

Аватар пользователя xakudu xakudu 29 октября 2012 в 21:13

"cosmos" wrote:
можно добавиь свою preprocess функцию в которой изменить значения строк

Где добавить то? Если в модуле, то как называть?

Аватар пользователя cosmos cosmos 29 октября 2012 в 21:22

я вообще то имел другое но в этом хуке может тоже получится перехватить
хотя по моему там перехватывать не очень кошн=ерно - как говрится

Аватар пользователя xakudu xakudu 29 октября 2012 в 21:32

"cosmos" wrote:
хотя по моему там перехватывать не очень кошн=ерно - как говрится

А почему? Как раз поля сформировались, мне там нужно просто автозамену некоторую сделать. Самое то. То же самое делается через темизацию, но мне нужно в модуле.

Аватар пользователя CSoft CSoft 29 октября 2012 в 21:34

"xakudu" wrote:
А почему? как раз поля сформировались

Всё правильно делаете, для этого хук и существует. Как он может быть не кошерным - ума не приложу...

Аватар пользователя cosmos cosmos 29 октября 2012 в 21:41

ну это как бы общий хук общая точка входа для всех вьюсов
Можно было прописать конкретно для этой вьюхи.
Конечно легче все запихать в 1 общий хук и потом разгребать кучу кода примерно такого вида

function hook_views_pre_render($view){

if($view->name=='view_!'){
изменяем что то...
}
if($view->name=='view_!'){
изменяем что то...
}
if($view->name=='view_!'){
изменяем что то...
}

}

Аватар пользователя xakudu xakudu 29 октября 2012 в 21:45

"cosmos" wrote:
Можно было прописать конкретно для этой вьюхи.

Ну у меня одна вьюха - я и проверяю. А вы уверены, что в Друпал 6 для каждой можно свой хук сбацать? Как называться будет для "taxonomy_term" например?

Аватар пользователя cosmos cosmos 29 октября 2012 в 22:58

для таксономии насколько я помню нельзя там какая то страшная замута об этом все плачут и негодуют а для любой другой можно

Аватар пользователя xakudu xakudu 29 октября 2012 в 23:55

"cosmos" wrote:
для таксономии насколько я помню нельзя там какая то страшная замута об этом все плачут и негодуют а для любой другой можно

Обычный вид, ничего необычного. Видимо просто ваш метод не работает в реале.

Аватар пользователя cosmos cosmos 30 октября 2012 в 8:59

в реале как это делается описано здесь http://pro-cosmos.blogspot.ru/2012/10/views-viewsviewfields.html
еще плюс такого метода заключается в том что шаблон вьюса можно положить в модуль а не в тему
еще можно прописать свою пррепроцесс функцию , чтобы не пихать код в шаблон

PS
Спасибо Dmytro Danylevskyi
за статью

Аватар пользователя xakudu xakudu 30 октября 2012 в 13:47

"cosmos" wrote:
еще плюс такого метода заключается в том что шаблон вьюса можно положить в модуль а не в тему

Ну да, плюс как раз в том, что можно темизацию в модуле оставить - и только. Я вначале сделал через темизацию, но второй метод оказался более простой. Ибо в темизации же нужно само значение вытаскивать ещё из HTML и в итоге формировать самому внешний вид поля.
В итоге независимо от того, что там изменится в виде с этим полем - у него это поле останется жестко сконфигурированным мною в файле, что нехорошо. При перехвате же через hook_views_pre_render мы имеем дело с чистыми данными.

Аватар пользователя cosmos cosmos 31 октября 2012 в 7:50

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

/**
* препроцес функция для строки шаблона вьюса
* @param array $variables
*/
function hook_preprocess_views_view_fields__[viewsname]__[display](&$vars) {
$vars['fieldname'] = round($vars['row']->node_data_field_product_price_field_product_id_value);
}