Подскажите, пожалуйста, в коде почти не понимаю... Надо вывести блок только на страницах пользователя "Вася" (к примеру)
Пробую этот код, но не получается... Чуствую что где-то тпулю конкретно, а где понять не могу.
<?php
function view_node($type = 'blog',$username) {
$match = FALSE;
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
if ($type == $node->type && $node->name == $username) {
$match = TRUE;
}
}
return $match;
}
?>
Комментарии
Куда вводите этот код?
в Новый блок с типом PHP код, в поле показывать если php код возвращает true
Т.е. поле это PHP Custom field, а этот код вводите как PHP валидацию?
В таких случая я советую делать дебаг.
На каждом этапе кода можно менять значение и проверять результат.
Например проверить правильно ли передаются аргументы:
if (is_numeric(arg(1)) {$match = TRUE};
if ($node != NULL) {$match = TRUE};
найдете свою ошибку
Только код вносите по очереди.
Если этот код в поле «Показывать, если данный PHP-код возвращает TRUE», то функцию еще надо вызвать, кроме того все переменные которые участвуют в сравнении уже должны быть инициализированны
Я бы сделал так:
$type = 'blog'; // тип нод, если тип не проверяем то присваиваем false;
/*
Получаем текущий объект,
проверяем является ли он нодой и его тип (если тип не задан, пропускаем),
после этого сравниваем автора
*/
return ($object = menu_get_object() && isset($object->type) && (!$type || $object->type == $type) && $object->name == $username);