Чтение значений полей узла в коде модуля с использованием Drupal 6
Я создал пользовательский модуль и использую hook_block для программного создания некоторых блоков.
Мой вопрос, как я могу получить доступ к значениям полей, включая поля CCK для текущего узла в моем модуле?
Я в основном хочу получить значение из поля CCK и использовать это значение при создании моего блока для этой страницы.
2 ответа
Попасть в текущий узел - неловкая боль в задней части. Стандартная практика - сделать что-то вроде этого:
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
$node = node_load(arg(1));
// Collect output.
}
arg()
вытаскивает элементы из пути Drupal. Так как все узлы (независимо от того, какой псевдоним пути может показать вам) появляются в узле /#, проверяя наличие "узла" и то, что второй элемент является числом, вы вполне можете быть уверены, что у вас есть руки на узле. Проверка третьего элемента пути позволяет избежать обработки в форме редактирования узла и других страницах, которые зависают от определенного узла.
Значения CCK загружаются в узел и обычно выглядят примерно так:
// Text field. Structure also works for number fields.
$text = $node->field_my_text_field[0]['value']
// Node Reference field.
$nref = $node->field_my_nref_field[0]['nid']
// User Reference field.
$uref = $node->field_my_uref_field[0]['uid']
Элемент массива "0" определяет дельту поля. Любое данное поле может фактически обрабатывать несколько значений, и структура массива в CCK предполагает такую возможность, даже если вы ограничиваете поле одним значением.
В Drupal 6 есть встроенная функция Drupal для получения объекта узла.
if ($node = menu_get_object()) {
…
}
Подробнее читайте здесь http://api.drupal.org/api/function/menu_get_item/6.