Чтение значений полей узла в коде модуля с использованием Drupal 6 - PullRequest
1 голос
/ 01 октября 2010

Я создал собственный модуль и использую hook_block для программного создания некоторых блоков.

Мой вопрос: как мне получить доступ к значениям полей, включая поля CCK для текущего узла в моем модуле?

Я хочу получить значение из поля CCK и использовать его при создании моего блока для этой страницы.

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Получение в текущем узле - неловкая боль в задней части. Стандартная практика - делать что-то вроде этого:

if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
  $node = node_load(arg(1));
  // Collect output.
}

arg() вытаскивает элементы с пути Друпала. Поскольку все узлы (независимо от того, какой псевдоним пути может показать вам) появляются в узле / #, проверяя «узел» и то, что вторым элементом является число, вы довольно хорошо гарантируете, что у вас есть руки на узле. Проверка третьего элемента пути позволяет избежать обработки в форме редактирования узла и других страницах, которые зависают от определенного узла.

Значения 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" указывает delta поля. Любое данное поле может фактически обрабатывать несколько значений, и структура массива в CCK предполагает такую ​​возможность, даже если вы ограничиваете поле одним значением.

0 голосов
/ 02 октября 2010

В Drupal 6 есть встроенная функция Drupal для получения объекта узла.

if ($node = menu_get_object()) {
  …
}

Подробнее здесь http://api.drupal.org/api/function/menu_get_item/6.

...