Показ блока только если "РНР-код вернет ИСТИНА"

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

Аватар пользователя ZLOi ZLOi 14 ноября 2007 в 15:59

Хочу прояснить для себя - на примере, что надо писать в поле "Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов)." (в настройках видимости блока), если мне например надо чтоб данный блок показывался не только в форуме (forum/*) но и в темах форума, а у них уже ссылка node/*...

я так понимаю что нужно чтоб код проверял, является-ли тип ноды равным ntype-forum, но в какой переменной хранится это значение? $type или $sticky ? и как это написать на РНР чтоб работало?

ADD:
и еще вопрос: с помощью какого модуля сделан такой блок: блок

Комментарии

Аватар пользователя orbisnull orbisnull 15 ноября 2007 в 0:59

1) - я тут пару месяцев назад спрашивал, там пара вариантов появилась... было это в форуме... смысл что $node нет когда eval выполняется, там надо её или через хак шаблона делать глобальной, или через свой модуль...
2) - bueditor

Аватар пользователя andypost@drupal.org andypost@drupal.org 2 декабря 2007 в 9:38

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = $node = node_load(arg(1));
if ($node->nid) {
//Здесь можно писать остальные проверки
?>
дело в том, что блок не знает, что выводится в основной части - поэтому нужно проверять руками
в предыдущем посте был вопрос про нагрузку node_load - так вот друпал кеширует загруженные ноды, а так как эта нода еще и отображается, то она наверняка уже заружена и вы получите просто копию памяти

Аватар пользователя dm66 dm66 4 марта 2008 в 16:46

<?php
$match = TRUE;
$types = array('forum' => 1, 'book' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = FALSE;
}
}
return $match;
?>

Этот код позволяет скрыть блок на нодах типа forum и blog

Аватар пользователя Rel Rel 24 марта 2008 в 20:15

dm66
спасибо за код.. немного добавил в него -- чтобы и на самих forum и blog исчезал блок, а не только на нодах

<?php
$match = TRUE;
$types = array('forum' => 1, 'blog' => 1, 'image' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = FALSE;
}
}
else
{
if (isset($types[arg(0)])) {
$match = FALSE;
}
}
return $match;
?>