[Решено] Разное содержимое для разных групп пользователей зависимое от CCK

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

Аватар пользователя divined divined 7 февраля 2011 в 13:04

Здравствуйте,
помогите советом, никак не могу реализовать одну функцию.

Имеется нода, во время создания которой администратором предусмотрена галочка "скрывать информацию".
Требуется запретить вывод части информации для анонимных и зарегистрированных пользователей тех материалов, у которых стоит эта галочка, а вместо закрытой информации показывать другую, например вместо "body" вывести в этом-же поле данные из определенного cck поля.

Есть "View", который показывает список нод, например тут http://rkreal.biz/ru/business/car_servises_and_car_washes.
Требуется вместо изображения из ноды, у которой стоит галочка "скрывать информацию", показывать определенное изображение.

Никак не могу построить логику.
Во "View", пробовал вместо вывода конкретного изображения использовать "PHP Customfield", но там не понятно как работать с ролями.
Пробовал реврайтить вывод поля "изображение", но там можно использовать только HTML, PHP там не предусмотрен.
Если использовать роли, то там нет возможности учитывать галочку, закрытый ли это объект.

В ноде тоже не все просто, если закрыть весь $content и сделать вывод своих полей, то это очень много переписывать.

Есть какие-нибудь модули отображения закрытой информации на основе ролей?

Комментарии

Аватар пользователя xxandeadxx xxandeadxx 7 февраля 2011 в 13:36

"divined" wrote:
но там не понятно как работать с ролями.

<?php
if (isset($GLOBALS['user']->roles[2])) {
  
// authenticated user
}
?>

"divined" wrote:
В ноде тоже не все просто, если закрыть весь $content и сделать вывод своих полей, то это очень много переписывать.

темизируйте конкретные поля

Аватар пользователя agent-000 agent-000 7 февраля 2011 в 13:39

модуль content_permissions позволяет сделать для разных ролей в одной ноде разные возможности для редактирования/просмотра полей.

есть еще другой модуль но уже для всего материала http://drupal.org/project/content_access

Аватар пользователя divined divined 7 февраля 2011 в 13:41

content_permissions как и content_access позволяют только скрывать определенную информацию, но никак не менять по заданным условиям для конкретного материала.

Аватар пользователя boneg boneg 7 февраля 2011 в 13:45

Создайте CCK-поле (назовем его скажем test) Select с двумя вариантами (0 - показывать инфо(по умолчанию), 1- не показывать)
возьмите шаблон вашего типа материала и в него добавьте чтото в таком духе:

<?php
if ($node->field_test[0]['value'] == 1){

if (isset(

$GLOBALS['user']->roles[роль])) {
выводим информацию}
else {
выводим что-то другое}

} else {

выводим информацию}
?>
Аватар пользователя divined divined 7 февраля 2011 в 13:47

"boneg" wrote:
Создайте CCK-поле (назовем его скажем test) Select с двумя вариантами (0 - показывать инфо(по умолчанию), 1- не показывать)
возьмите шаблон вашего типа материала и в него добавьте чтото в таком духе:

if ($node->field_test[0]['value'] == 1){

if (isset($GLOBALS['user']->roles[роль])) {
выводим информацию}
else {
выводим что-то другое}

} else {
выводим информацию}

Да так и планировалось, field_test[0]['value'] такое поле есть.

Но как это привязать к определенному полю. Ведь в шаблоне выводится
print ($content).
Если его отключить, то придется описывать еще очень много полей.

Аватар пользователя divined divined 7 февраля 2011 в 13:52

Например:
if ($node->field_test[0]['value'] == 1){

if (isset($GLOBALS['user']->roles[роль])) {
//отключить поля field_1 и field_2 ???
print ($content);
print ($node->field_3);
print ($node->field_4);
}
else {}

} else {
print ($content);
}

Это так грубо. Так вот как отключить вывод некоторых полей, при печать контента.

Аватар пользователя boneg boneg 7 февраля 2011 в 13:58

"divined" wrote:
Ведь в шаблоне выводится print ($content).

Ну даже если там 20 полей - это 20 строк кода - которые решат задачу.

Откройте через krumo содержимое $content и всё разглядите. К примеру поле "содержимое" по умолчанию - $node->content['body']['#value']

Аватар пользователя divined divined 7 февраля 2011 в 14:15

Спасибо, скорее всего так и сделаю.

Еще вопросик сюда задам, написание ссылок

<?php
print ("<a href='/" .$node->path"'>path</a>");
?>

Выводит ссылку на ноду, но только для языка "по умолчанию", как вывести ссылку для текущего языка?

Аватар пользователя Enemy Enemy 9 октября 2011 в 20:51

"xxandeadxx" wrote:
<?php
if (isset($GLOBALS['user']->roles[2])) {
// authenticated user
}
?>

эта проверка идёт на пользователя который просматривает профиль, т.е. если у нас роль: исполнитель, а хотим мы посмотреть пользователя, то профиль пользователя будет виден нам как исполнитель.
Как сделать проверку на просматриваемый профиль:?