Вывод различных частей ноды в зависимости от роли пользователя.

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

Аватар пользователя lalex lalex 1 мая 2007 в 18:43

Очень часто возникает необходимость выводить ноду в зависимости от текущего пути или от прав пользователя в различных вариантах.
Я рассмотрю вопрос вывода тизера ноды и ее полной версии в разном виде с учетом роли пользователя.
Отмечу, что в большинстве случаев создавать свой модуль, править готовый модуль нет необходимости. Достаточно решить вопрос какая роль будет иметь доступ к полной версии и выбрать какое действие (вернее "право" [access right]) будет в нужном месте проверяться.

Правим node.tpl.php :
конструкция будет примерно такой (http://drupal.org/node/53464):
<?php
global $user;
if ($page == 0) {
//тизер показываем всем
} elseif ($page == 1) {
//полная версия. далее идет проверка доступа пользователя к праву публиковать комментарий
if (user_access('post comments')) {
//может - выводим таким юзерам что надо
} else {
//не может - выводим фигу
}
}
?>

В комментариях (см. источник который я указал) справедливо указывается, что это не всегда работает (например при предварительном просмотре). В таких случаях (да и в целом скорее даже так удобнее будет) правильнее будет вместо проверки $page использовать $teaser (т.е. получится $teaser==0 и т.п.). Проверка доступа пользователя от этого не страдает.

user_access('post comments') - подразумевается, что пользователи которые могут публиковать комментарии могут и смотреть полную версию