Вывод блока в материалах определенного пользователя

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

Аватар пользователя imnotnegoro imnotnegoro 10 января 2011 в 19:02

Подскажите, пожалуйста, в коде почти не понимаю... Надо вывести блок только на страницах пользователя "Вася" (к примеру)
Пробую этот код, но не получается... Чуствую что где-то тпулю конкретно, а где понять не могу.

<?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;
}
?>

Комментарии

Аватар пользователя divined divined 12 января 2011 в 10:34

Т.е. поле это PHP Custom field, а этот код вводите как PHP валидацию?

В таких случая я советую делать дебаг.
На каждом этапе кода можно менять значение и проверять результат.

Например проверить правильно ли передаются аргументы:

if (is_numeric(arg(1)) {$match = TRUE};
if ($node != NULL) {$match = TRUE};

найдете свою ошибку Smile
Только код вносите по очереди.

Аватар пользователя ubercoder ubercoder 12 января 2011 в 14:13

Если этот код в поле «Показывать, если данный PHP-код возвращает TRUE», то функцию еще надо вызвать, кроме того все переменные которые участвуют в сравнении уже должны быть инициализированны

Я бы сделал так:

   $username = 'Вася'; // имя автора
   $type = 'blog'; // тип нод, если тип не проверяем то присваиваем false;
                 
    /*
       Получаем текущий объект,
       проверяем является ли он нодой и его тип (если тип не задан, пропускаем),
       после этого сравниваем автора
   */

    return ($object = menu_get_object() && isset($object->type) && (!$type || $object->type == $type) && $object->name == $username);