[РЕШЕНО] View, зависящий от роли Автора

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

Аватар пользователя Melnikoff Melnikoff 4 сентября 2011 в 0:29

На сайте есть две похожие роли - обычные юзеры и VIP. Вторые при создании ноды могут использовать дополнительный набор полей.

Задача - сделать такую вьюху, которая будет выводить дополнительные поля только только при условии, что у автора ноды роль VIP. То есть если автор по каким-то причинам стал обычным юзером, дополнительные поля перестают выводится.

PS Характерный пример - каталог фирм, когда бесплатно размещают только название, а за деньги - адрес и ссылку на сайт.

Комментарии

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 4 сентября 2011 в 0:35

С ходу могу предложить темизацию шаблона views — сделать вывод в том виде, как для vip, а потом в шаблоне обернуть те поля, которые могут видеть только випы в if с нужным условием.

Аватар пользователя Melnikoff Melnikoff 4 сентября 2011 в 7:51

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
в if с нужным условием

А как будет выглядеть условие с ролью автора и куда его во Views вписывать? Я просто методом тыка уже пробовал - не получилось. Вероятно, не туда тыкаю.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 4 сентября 2011 в 16:56

"Melnikoff" wrote:
А как будет выглядеть условие с ролью автора и куда его во Views вписывать? Я просто методом тыка уже пробовал - не получилось. Вероятно, не туда тыкаю.

Его нужно не во views методом тыка, а в шаблон для нужного вам вьюса. Почитайте про темизацию Views, там всё достаточно просто.
Что до проверки, то выполнить её можно так:
<?php
// Вытаскиваем на свет $user
global $user;
// Проверяем, входит ли пользователь в группу vip
if (in_array('vip', array_values($user->roles))) {
// Показываем нужные ячейки
print "blah-blah-blah";
}
?>

Аватар пользователя Melnikoff Melnikoff 4 сентября 2011 в 19:39

С темизацией вроде разобрался, но застрял на получении uid автора ноды.

Насколько я понимаю, для начала надо вытащить ID самой ноды, потом по ней посмотреть автора. Сделал скрытое поле Nid и надеялся его использовать как-то так:

$Node_ID=$view->{$field->Nid};

однако получаю "Cannot access empty property"

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 4 сентября 2011 в 20:20

"Melnikoff" wrote:
Насколько я понимаю, для начала надо вытащить ID самой ноды, потом по ней посмотреть автора.

Сделайте проще. Во вьюс можно сразу вытаскивать uid автора ноды:
1. Кликните на знаке «+», чтобы добавить новое поле;
2. В выпадающем списке выберите User (или Пользователь, если у вас локализован Друпал);
3. Выберите из списка UID.

Аватар пользователя Melnikoff Melnikoff 4 сентября 2011 в 20:50

То ли я не там ищу, то ли вы про другую версию Drupal Smile У меня 7.

Нашёл поля Пользователь:Роль, Пользователь:Имя аутентификации и Пользователь: Authmap ID

Но похоже они глючат. Даже при попытке их просто вывести во вьюху, Пользователь:Роль не выдаёт ничего, а две других выдают ошибку MySql типа "Unknown column 'authname' in 'field list'"

Аватар пользователя Melnikoff Melnikoff 4 сентября 2011 в 21:13

Ещё наковырял. Если добавить во вьюху взаимосвязь (relationship) Содержимое-Автор, то появляются новые поля - в частности, uid.
И оно работает, в смысле на экран выводится.

Осталось теперь как-то получить это значение не на экране, а в коде.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 4 сентября 2011 в 21:58

"Melnikoff" wrote:
То ли я не там ищу, то ли вы про другую версию Drupal Smile У меня 7.

Сорри, я действительно про другую версию — Друпал 6.
"Melnikoff" wrote:
Осталось теперь как-то получить это значение не на экране, а в коде.

Так оно уже есть в коде. С помощью модуля devel можно посмотреть, что доступно для вывода, и использовать это в коде.

Аватар пользователя Melnikoff Melnikoff 10 сентября 2011 в 8:51

Что-то у меня Devel на страницах вьюх вообще не присутствует, только на отдельных нодах Sad

В конце концов сделал через Views PHP, как рекомендовал xxandeadxx

Код поля выглядит приблизительно так (цифра 4 в условном операторе соответствует роли VIP)


<?php  
$result 
=db_query("SELECT rid FROM {users_roles} WHERE uid = '$row->uid' ")->fetchField();
if ( 
$result =='4')
{ print 
$row->name; }
?>