Здравствуйте,
помогите советом, никак не могу реализовать одну функцию.
Имеется нода, во время создания которой администратором предусмотрена галочка "скрывать информацию".
Требуется запретить вывод части информации для анонимных и зарегистрированных пользователей тех материалов, у которых стоит эта галочка, а вместо закрытой информации показывать другую, например вместо "body" вывести в этом-же поле данные из определенного cck поля.
Есть "View", который показывает список нод, например тут http://rkreal.biz/ru/business/car_servises_and_car_washes.
Требуется вместо изображения из ноды, у которой стоит галочка "скрывать информацию", показывать определенное изображение.
Никак не могу построить логику.
Во "View", пробовал вместо вывода конкретного изображения использовать "PHP Customfield", но там не понятно как работать с ролями.
Пробовал реврайтить вывод поля "изображение", но там можно использовать только HTML, PHP там не предусмотрен.
Если использовать роли, то там нет возможности учитывать галочку, закрытый ли это объект.
В ноде тоже не все просто, если закрыть весь $content и сделать вывод своих полей, то это очень много переписывать.
Есть какие-нибудь модули отображения закрытой информации на основе ролей?
Комментарии
<?php
if (isset($GLOBALS['user']->roles[2])) {
// authenticated user
}
?>
темизируйте конкретные поля
модуль content_permissions позволяет сделать для разных ролей в одной ноде разные возможности для редактирования/просмотра полей.
есть еще другой модуль но уже для всего материала http://drupal.org/project/content_access
content_permissions как и content_access позволяют только скрывать определенную информацию, но никак не менять по заданным условиям для конкретного материала.
Подскажите где почитать про темизацию конкретного поля.
Создайте CCK-поле (назовем его скажем test) Select с двумя вариантами (0 - показывать инфо(по умолчанию), 1- не показывать)
возьмите шаблон вашего типа материала и в него добавьте чтото в таком духе:
<?php
if ($node->field_test[0]['value'] == 1){
if (isset(
$GLOBALS['user']->roles[роль])) {выводим информацию}
else {
выводим что-то другое}
} else {
выводим информацию}?>
Да так и планировалось, field_test[0]['value'] такое поле есть.
Но как это привязать к определенному полю. Ведь в шаблоне выводится
print ($content).
Если его отключить, то придется описывать еще очень много полей.
goooogle
Например:
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);
}
Это так грубо. Так вот как отключить вывод некоторых полей, при печать контента.
Ну даже если там 20 полей - это 20 строк кода - которые решат задачу.
Откройте через krumo содержимое $content и всё разглядите. К примеру поле "содержимое" по умолчанию - $node->content['body']['#value']
Спасибо, скорее всего так и сделаю.
Еще вопросик сюда задам, написание ссылок
<?php
print ("<a href='/" .$node->path. "'>path</a>");
?>
Выводит ссылку на ноду, но только для языка "по умолчанию", как вывести ссылку для текущего языка?
l(t('текст_ссылки_по_умолчанию'), "путь_ссылки")
А если это картинка?
<?php
print ("<a href='/" .$node->path. "'><img src='".$path."'></a>");
?>
<?php
l('<img src="'. $path . '" />', "/" . $node->path, $options=array('html' => TRUE))
?>
Благодарю, вы устранили большой пробел в моих знаниях
эта проверка идёт на пользователя который просматривает профиль, т.е. если у нас роль: исполнитель, а хотим мы посмотреть пользователя, то профиль пользователя будет виден нам как исполнитель.
Как сделать проверку на просматриваемый профиль:?