Друзья, вместо модуля Blog я просто создаю материал (Story) и вывожу определенный Views (не требуются мне блоггерские навороты).
Встала задача скрывать некоторые статьи из этого Views, но оставлять их доступными по прямой ссылке, рассылаемой подписчикам на рассылку. Такая минимальная секретность.
Создал словарь Spec, cделал фильтр для Spec "Is non of Hidden". Все хорошо, статей, промаркированных как Hidden не видно.
Но как сделать, чтобы админу (точнее для себя я добавил роль adm) было видно все?
Конечно можно сделать отдельный View, но может можно сделать комбинированный фильтр типа "Показывать если adm ИЛИ если Is none of Hidden"?
Намекните, как создавать такие сложносоставные фильтры!
Спасибо!!!
Антон
Комментарии
А вы сделайте в этом же View почти полный дубликат, и воспользуйтесь настройкой access.
Таким образом, если вы админ, то покажется один Вью, если нет - другой. В принципе, получится достаточно просто )
В смысле для этого View сделать две разные Page почти одинаковые? И прописать один и тот же пункт меню Блог, ссылающийся на тот же самый URL /blog? И Drupal сам поймет, который из них подставить?
Неужто он не заругается на дубликаты? Вдруг из-за моей ошибки в permissions для какой-то роли оба варианта окажутся разрешенными?
В любом случае за идею спасибо, буду думать.
Можно сделать пустой 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()
);
}
}
}
?>
Спасибо!
Попробую и так.