Скрыть определенные ноды во view для неавторизированного пользователя? [Решено]

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

Аватар пользователя milkovsky milkovsky 28 февраля 2012 в 16:30

На сайте есть 2 роли "неавторизированный" юзер и "покупатель".
На сайте есть товары, которые может видеть только юзер "покупатель".
На странице ноды можно скрывать доступ с помощью хука .
Кто подскажет как скрыть определенные ноды во view для неавторизированного пользователя?

P.S. Drupal 7

Комментарии

Аватар пользователя milkovsky milkovsky 29 февраля 2012 в 12:41

Я сделал в товаре поле "скрывать для неавторизированных".
Но, тут загвоздка:
- если во view выставить фильтр по этому полю, то ноды скроются во view для всех пользователей(для авторизированных тоже). А авторизированные должны видить все ноды.
Возможные решения:
Делать две view в блоке на странице (1 - для неавторизированных со скрытыми нодами, 2 - для авторизированных со всеми нодами). Выставить разрешение на просмотр view по ролям.
Может есть другие варианты?

Аватар пользователя milkovsky milkovsky 2 марта 2012 в 19:32

Решил!
Мне помог модуль http://drupal.org/project/views_php .
С его помощью можно вставлять php в фильтры!

Если фильтр возвращает true, то нода в виде не выводится.

У ноды я создал поле field_data_field_model_hide (bool)
Вот код, который я вставил в фильтр:

<?php
$hide_node 
0;
if(
$data->nid){
  
// Select hide state for current node
  
$hide_node db_select('field_data_field_model_hide''h')
    ->
fields('h', array('field_model_hide_value'))
    ->
condition('h.entity_id'$data->nid)
    ->
execute()
    ->
fetchField();
  
// wholesale role id
  
$admin_role '4';
  global 
$user;
  if (!
array_key_exists('4'$user->roles) && $hide_node == 1) {
    return 
'TRUE';
  }
}
?>

Меня на это вдохновил этот комментарий