xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Preprocess функции для представлений Views

Опубликовано в

Основные preprocess функции Views:

  • hook_preprocess_views_view — вызывается перед темизацией всего представления.
  • hook_preprocess_views_view_fields — вызывается перед темизацией строки с полями.
  • hook_preprocess_views_view_field — вызывается перед темизацией поля в строке.
  • hook_preprocess_views_view_unformatted — вызывается перед темизацией списка Unformatted list.
  • hook_preprocess_views_view_list — вызывается перед темизацией списка HTML list.
  • hook_preprocess_views_view_grid — вызывается перед темизацией Grid-а.
  • hook_preprocess_views_view_table — вызывается перед темизацией таблицы.
  • hook_preprocess_views_view_summary — вызывается перед темизацией упорядоченного summary списка.
  • hook_preprocess_views_view_summary_unformatted — вызывается перед темизацией неупорядоченного summary списка.
  • hook_preprocess_views_view_rss — вызывается перед темизацией rss ленты.
  • hook_preprocess_views_view_row_rss — вызывается перед темизацией строки в rss ленте.
  • hook_preprocess_views_exposed_form — вызывается перед темизацией формы с раскрытыми фильтрами.

И несколько других редких функций. Полный список зарегистрированных хуков темизации можно посмотреть с помощью Devel по адресу devel/theme/registry.

Написанное актуально для Views 3.x
Похожие записи

Комментарии RSS

не могу заставить работать
hook_preprocess_views_view_unformatted

не работает :(

function hook_preprocess_views_view_unformatted(&$vars){
 
$vars['newvar'] = 'testvar';
}

можно написать пример изменения существ переменной этим хуком добавление новой

а еще в шаблоне вьюса
views-view-fields-VIEWS_NAME.tpl.php
есть массив значений полей fields
Как изменить в хуке эти переменные?

вместо hook надо писать имя модуля или темы

ну это просто я опечатался

function mymodule_preprocess_views_view_unformatted(&$vars){
$vars['newvar'] = 'testvar';
}

вот этот вариант тоже не пашет

function garland_preprocess_views_view(&$vars) {
 
    $vars['a1aaaaa']='55555555555';
 
}

кэш сбрасывали?

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

Скажите пожалуйста, а переключатель отображения контента для представления Views типа grid<->list<->table, как, например, здесь делается именно с помощью preprocess?

Станислав, видел модуль, название не вспомню, но можно и в одном из хуков

Спс, обидно и ужасно неохота, но видимо придется решать эту задачу так, как все у нас и решается, а именно через жо...у с помощью скальпеляв в виде hooks...
Неудивительно, что Drupal отнюдь не для ламеров с таким подходом к решению казалось бы тривиальных задач.

будет интресно узнать с помощью какого хука можно это сделать
тк на моем опыте я так и не смог этого сделать
пришлось чуть править модуль views хотя я понимаю что это плоха
получилось вот так buysd(dot)ru

Да пока с хуками решил повременить ибо сложно все это для начала, накопал модуль Views Modes, походу он именно для решения моей задачи. По идее он создает новый блок, который можно поместить над въюхой. Так вот блок то создается, а нифига не отображается в режиме просмотра... Вот, пока бъюсь над этим...

В общем задача с переключателем видов Views как grid<->list<->table решилась без хуков, препроцессов и костылей для самого модуля Views банальной установкой и настройкой модуля Views Modes.
Есть ньюансы, что сам переключатель выведен в отдельный блок, появляющийся среди доступных после установки модуля Views Modes, а выбор видов отображения вы делаете сами путем добавлением новых представлений в виде режимов, т.е. там где было добавить новую страницу к представлению или блок теперь появится еще и режим при редактировании текущего представления.

в итоге у вас получилось 3 вьюса или 1 вьюса и 3 дисплея к нему?

1 вьювс и 3 дисплея к нему в виде режимов, где можно переопределить все кроме фильтров .

Короче получилось то, что вы написали. 1 представление с 3 дисплеями в виде режимов. Пререопределять в них можно режимы вывода- таблица-сетка, HTML-список и т.д, количество выводимых элементов и настравать их по своему вкусу.
Собственно по конструкции Views Modes - это и есть набор хуков для Views, просто цель у него одна - именно создание альтернативных режимов отображения одного и того же представления.

Подскажите пожалуйста, как критерии сортировки views отделить от критериев фильтрации?
Я, конечно, понимаю, что критерии сортировки views автоматически объединяются с критериями фильтрации при вынесении фильтров в отдельный блок...
Но мне нужны по сути 2 отдельных блока: блок фильтров и блок сортировки для одного и того же представления...

P.S. Может вопрос не совсем по теме views preprocess, но я так и не нашел более подходящей темы.

форму фильтров можно изменить через хук
hook_form_views_exposed_form_alter(&$form, $form_state)

Мне не форму фильтров надо поменять, а отделить сортировку от фильтров

Чтобы стало понятнее, как на commercebox вынести критерии фильтрации. Загвоздка в том, что сам блок раскрытых фильтров занят именно фильтрами, и сортировке там не место. Для сортировки нужен другой блок, который будет непосредственно над содержимым представления.

если вьюха не аяксовая то можно сделать самому блок для сортировки тк для сортировки просто нужно будет в урл добавлять параметры типа
sort=price&order=asc
это примерно я написал
я таким образом делал здесь
http://hiend.hifikazan.ru/akusticheskie-sistemy/aktivnaya-akustika/bw
еще как вариант можно просто вывести в 2х местах две exposed формы (программно или 1 пргораммно др стандартно) и в 1 сделать фильтра а в др сортировку

вот кстати пример как вывести программно exposed форму
http://pro-cosmos.blogspot.com/2011/08/exposed.html

для сортировки просто нужно будет в урл добавлять параметры типа
sort=price&order=asc

К сожалению простое добавление в шапку views формы сортировки проблемы не решает. Проще говоря фокус не работает.

вот кстати пример...

Простите за банальный вопрос, но это для Drupal 7 или более ранней версии, и куда этот нужно код вставить чтобы он заработал?

Как вывести CCK поле в views-view-fields.tpl.php ?

У меня drupal 7.15, не переопределяется hook_preprocess_views_view_fields в теме, а вот другие хуки - работают. В апш написано, что должен работать http://api.drupalize.me/api/drupal/function/template_preprocess_views_vi... . Есть идеи, из-за чего это происходит? На опечатки все очень тщательно проверил.

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

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании