Drupal 7 Views фильтрация по категории Пользователя

Аватар пользователя Semmen Semmen 20 ноября в 21:24

Drupal 7
Уже 2 дня копаюсь не могу решить. У пользователя есть категория, нужно через views сделать так, что бы показывались только те материалы у которых есть такая же категория.
Проще говоря так будет открываться доступ к урокам у каждого отдельного пользователя. На друпал 8 есть модуль https://www.drupal.org/project/user_field_value , но на 7 не нашел. Надо как то допилить или может кто знает как сделать?

Плюс в самом материале выводится тоже контент через модуль EVA, там тоже надо сделать что бы показывался материал если есть таже категория у пользователя.

Лучший ответ

Аватар пользователя Semmen Semmen 22 ноября в 19:47

Может кому пригодится, эта проблема решелась так:

Комментарии

Аватар пользователя VasyOK VasyOK 20 ноября в 21:42

А может отталкиваться не от категории пользователя а от его роли? Тогда точно можно ему разрешить что угодно просматривать или нет.

Аватар пользователя Semmen Semmen 20 ноября в 21:59

Да ролями можно сделать, но в данном случаи не очень удобно да и по нагрузке на сайт могут быть потом проблемы. Представим что на одной странице добалено 500 пользователей, во первых это визуально не очень будет, во вторых на сколько я правильно понимаю при каждой загрузки страници будет проверться доступ среди этих 500 пользователей. Плюс эти страницы будут выводиться в категориях и в одной категории будет до 15 страниц. На практике конечно не знаю как это будет сказываться на производительность. По мне сделать по категории лучший вариант. Плюс у меня доступ предоставляется к категории после оплаты, но эту тему я настроил Rules, просто после оплаты берется категория с товара и перадется пользователю.

Аватар пользователя Andruxa Andruxa 20 ноября в 22:17

Вам нужно в аргумент вьюса "категория материала" передать значение поля юзера "категория юзера". По-моему, у вьюса нет такого плагина из коробки.
Либо накодить его, либо сделать через панели - создать вьюсу дисплей Panel pane, вставить его в панель, и там в настройках передать в аргумент токен [current-user:field-category], current-user надо добавить в настройках контекста панели.

Аватар пользователя Semmen Semmen 21 ноября в 9:46

Спасибо за ответ, с панелью пока не имел дела, надо разбираться, такое решение пока оставлю как план Б.

В данный момент почти решил вопрос кодом php.
Просто в "Контекстные фильтры" добавил поле материала категории, и там "Передать значение по умолчанию" и PHP код:

<?php global $user;
return 
user_load($user->uid)->field_kurs_kat_user['und'][0]['tid']; ?>

Только я не совсем понимаю как это работает так как он берет только первый термин таксономии у пользовате и по идеи должен проверять его, но по факту все работает, буду еще тестить.

Аватар пользователя Semmen Semmen 21 ноября в 17:28

Нифига я не сделал, код выше вообще не подходит. Я понял что надо в PHP поле "Передать значение по умолчанию" нужо передавать или return 1; или return 0;
Нужно как то кодом перебрать поле пользователя, а потом сравнить его с полем материала и вернуть значение 0 или 1. Как это сделать я хз, уже целый день сижу и нифига не получается, друпал плохо знаю, постоянно выбивает ошибки.

Кто может помочь? Можно не бесплатно, пишите в личку цены и сроки.