Скрытые записи в блоге

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

Аватар пользователя treusp treusp 17 декабря 2010 в 9:07

Друзья, вместо модуля Blog я просто создаю материал (Story) и вывожу определенный Views (не требуются мне блоггерские навороты).
Встала задача скрывать некоторые статьи из этого Views, но оставлять их доступными по прямой ссылке, рассылаемой подписчикам на рассылку. Такая минимальная секретность.
Создал словарь Spec, cделал фильтр для Spec "Is non of Hidden". Все хорошо, статей, промаркированных как Hidden не видно.
Но как сделать, чтобы админу (точнее для себя я добавил роль adm) было видно все?
Конечно можно сделать отдельный View, но может можно сделать комбинированный фильтр типа "Показывать если adm ИЛИ если Is none of Hidden"?

Намекните, как создавать такие сложносоставные фильтры!

Спасибо!!!
Антон

Комментарии

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 17 декабря 2010 в 9:33

А вы сделайте в этом же View почти полный дубликат, и воспользуйтесь настройкой access.
Таким образом, если вы админ, то покажется один Вью, если нет - другой. В принципе, получится достаточно просто )

Аватар пользователя treusp treusp 17 декабря 2010 в 9:52

В смысле для этого View сделать две разные Page почти одинаковые? И прописать один и тот же пункт меню Блог, ссылающийся на тот же самый URL /blog? И Drupal сам поймет, который из них подставить?
Неужто он не заругается на дубликаты? Вдруг из-за моей ошибки в permissions для какой-то роли оба варианта окажутся разрешенными?

В любом случае за идею спасибо, буду думать.

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 17 декабря 2010 в 11:01

Можно сделать пустой View типа Page, а к нему добавить два Attachment - тогда проблемы с меню не будет.
"Вдруг" должно быть исправлено на стадии разработки.

Впрочем, есть вариант с хуками, покажу один свой код, правьте под свой случай сами:

<?php
function module_views_query_alter(&$view, &$query){
    if (
$view->name == 'view_name') {
        
$have_access user_access('administer_nodes') || ($GLOBALS['user']->uid == arg(1)); // В arg(1) лежит uid блога юзера, Т.е. можно просматривать админу, либо автору блога.
        
if (!$have_access){
            
$query->where []= array(
                
'type' => 'AND',
                
'clauses' => array ("node.status != 0"),
                
'args' => array()
            );
        }
    }
}
?>