Если не считать решения - дополнительная роль для юзеров можно ли сделать следующее.
Дано:
Роль - зарегистрированный пользователь
Страница вьюхи с выводом списка нод
Необходимо в зависимости от значения поля в аккаунте юзера фильтровать просматриваемую юзером вьюху на разное количество нод в списке нод вьюхи.
Комментарии
вы хотите фильтровать ноды в зависимости от значение поля в аккаунте или хотите менять количество отображаемых нод на странице в зависимости от значения поля в аккаунте?
Для первого можно создать контекстный фильтр с php кодом.
Для первого и второго можно использовать hook_views_query_alter
Пока что хочу количество...
я хочу на одной и то же странице вьюшной для обычных пользователей показывать 10 нод , а для пользователей с какой-то ролью показывать весь архив нод...
как-то так?
<?php
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == 'my_view_name') {
if (arg(0) == 'node') {
$view->items_per_page = 10;
}
else
$view->items_per_page = ALL;{
}
}
}
?>
а как значение поля из аккаунта юзера добавить в условие?
надо наверное юзера грузить ???
не работает что то код. для моего дисплее во вьюхе News - не работает
и такое модифицированное не работает
<?phpfunction mymodule_views_query_alter(&$view, &$query) {
$args = arg();
switch ($view->name) {
case 'news':
switch ($view->current_display) {
case 'page_3':
$view->items_per_page = 10;
break;
}
break;
}
}?>
Так менять количество нод в зависимости от юзера или в зависимости от роли?
Для ролей все проще. Создаете два дисплея типа "блок". Они оба одинаковы, отличаются только настройками пейджера. Оба блока помещаете в один и тот же регион на одну и ту же страницу. В настройках блока меняете видимость для каждого блока для соответствующих ролей.
То же самое можно делать и с дисплеями типа "страница", только настройки видимости в самой вьюхе меняются.
Меня интересуют страницы вьюшные.
С разными дисплеями тут то же не все так просто. Кто первый удовлетворяет условию роли юзера тот и подцепица т.е. если первый будет для юзеров зарегенных то он и цепанеца для любых ролей.
Мне нужно для юзеров не важно какая роль (пример с ролями я привел как самый простой случай).
Количество нод на странице вьюшной в зависимости от значения поля в аккаунте юзера.
Для начала пытался просто менять количество страниц для типа метериала. Не вышло.
<?php
function mymodule_views_pre_build(&$view) {
global $user;
if ($view->name == 'view_name' && $view->current_display == 'display_id') {
if ($user->uid) { // залогиненый юзер
if ($user = user_load($user->uid)) {
if (!empty($user->field_name)) { // если поле заполнено
// $user->field_name['und'][0]['value']; // значение поля
$view->items_per_page = 10;
}
}
}
}
}
?>
Наверно, я ошибся с хуком. Я так думаю, что перед вызовом hook_views_query_alter вьюс уже сделал все приготовления к запросу. Попробуйте через dpm() (модуль devel) вывести объект $query в хуке. Посмотрите, какие методы доступны.
Может нужно юзать какой-то другой хук, который будет вызван в тот момент, когда объект $view еще только создается, и там менять параметры пагинации. Почитайте views.api.php.
penexe спасибо, но что делать с пейджером вьюхи? он просто по 1 ноде на каждой странице рисует
я так понимаю темизировать нужно пейджер в темплете своем??