Фильтрация вьюхи по условиям в профиле пользователя

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

Аватар пользователя iNFerNo iNFerNo 20 ноября 2013 в 14:47

Если не считать решения - дополнительная роль для юзеров можно ли сделать следующее.

Дано:
Роль - зарегистрированный пользователь
Страница вьюхи с выводом списка нод

Необходимо в зависимости от значения поля в аккаунте юзера фильтровать просматриваемую юзером вьюху на разное количество нод в списке нод вьюхи.

Комментарии

Аватар пользователя serega111 serega111 20 ноября 2013 в 16:20

"iNFerNo" wrote:
фильтровать просматриваемую юзером вьюху на разное количество нод

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

Аватар пользователя iNFerNo iNFerNo 21 ноября 2013 в 9:17

Пока что хочу количество...

я хочу на одной и то же странице вьюшной для обычных пользователей показывать 10 нод , а для пользователей с какой-то ролью показывать весь архив нод...

Аватар пользователя iNFerNo iNFerNo 21 ноября 2013 в 9:26

как-то так?

<?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;
}
  }
}
?>

а как значение поля из аккаунта юзера добавить в условие?

надо наверное юзера грузить ???

Аватар пользователя iNFerNo iNFerNo 21 ноября 2013 в 9:59

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

<?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;
      }
  }?>
Аватар пользователя serega111 serega111 21 ноября 2013 в 10:40

Так менять количество нод в зависимости от юзера или в зависимости от роли?
Для ролей все проще. Создаете два дисплея типа "блок". Они оба одинаковы, отличаются только настройками пейджера. Оба блока помещаете в один и тот же регион на одну и ту же страницу. В настройках блока меняете видимость для каждого блока для соответствующих ролей.
То же самое можно делать и с дисплеями типа "страница", только настройки видимости в самой вьюхе меняются.

Аватар пользователя iNFerNo iNFerNo 22 ноября 2013 в 9:56

Меня интересуют страницы вьюшные.

С разными дисплеями тут то же не все так просто. Кто первый удовлетворяет условию роли юзера тот и подцепица т.е. если первый будет для юзеров зарегенных то он и цепанеца для любых ролей.

Мне нужно для юзеров не важно какая роль (пример с ролями я привел как самый простой случай).

Количество нод на странице вьюшной в зависимости от значения поля в аккаунте юзера.

Для начала пытался просто менять количество страниц для типа метериала. Не вышло.

Аватар пользователя penexe penexe 22 ноября 2013 в 10:14
<?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;
        }
      }
    }
  }
}
?>
Аватар пользователя serega111 serega111 22 ноября 2013 в 10:14

Наверно, я ошибся с хуком. Я так думаю, что перед вызовом hook_views_query_alter вьюс уже сделал все приготовления к запросу. Попробуйте через dpm() (модуль devel) вывести объект $query в хуке. Посмотрите, какие методы доступны.
Может нужно юзать какой-то другой хук, который будет вызван в тот момент, когда объект $view еще только создается, и там менять параметры пагинации. Почитайте views.api.php.