Где ты это называешь? Например, используете ли вы его как часть вашего файла template.php, как часть страницы или как внешний модуль?
Если вы не заключили это в функцию с собственным пространством имен, попробуйте назвать переменную иначе, чем $node
- например, назовите ее $my_node
. В зависимости от контекста, имя «узла», скорее всего, будет доступно и изменено ядром Drupal и другими модулями.
Если это происходит внутри функции, попробуйте следующее и дайте мне знать, что вывод:
$test_node_1 = node_load(344983); // Any hard-coded $nid that actually exists
echo $test_node_1->nid;
$test_node_2 = node_load(arg(1)); // Consider using hook_menu loaders instead of arg() in the future, but that's another discussion
echo $test_node_2->nid;
$test_node_3 = menu_get_object(); // Another method that is better than arg()
echo $test_node_3->nid;
Edit:
Поскольку вы используете hook_block, я думаю, что вижу вашу проблему - кешируется сам блок, а не узел.
Попробуйте установить BLOCK_NO_CACHE
или BLOCK_CACHE_PER_PAGE
в hook_block, согласно документации на http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_block/6
Вам также следует стараться избегать arg () всякий раз, когда это возможно - это немного угрожает безопасности, и есть лучшие способы выполнить почти все, что arg () сделает в модульной среде.
Edit: *
Пример кода, который показывает, что я имею в виду:
function foo_block ($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
$blocks[0] = array(
'info' => 'I am a block!',
'status' => 1,
'cache' => BLOCK_NO_CACHE // Add this line
);
return $block;
case 'view':
.....
}
}