【发布时间】:2010-10-01 15:37:43
【问题描述】:
我创建了一个自定义模块,并正在使用 hook_block 以编程方式创建一些块。
我的问题是如何访问我模块中当前节点的字段值,包括 CCK 字段?
我基本上想从 CCK 字段中获取一个值,并在为该页面构建我的块时使用该值。
【问题讨论】:
标签: php drupal drupal-6 drupal-modules cck
我创建了一个自定义模块,并正在使用 hook_block 以编程方式创建一些块。
我的问题是如何访问我模块中当前节点的字段值,包括 CCK 字段?
我基本上想从 CCK 字段中获取一个值,并在为该页面构建我的块时使用该值。
【问题讨论】:
标签: php drupal drupal-6 drupal-modules cck
到达当前节点是一种尴尬的后部疼痛。标准做法是这样做:
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
$node = node_load(arg(1));
// Collect output.
}
arg() 将元素拉出 Drupal 路径。由于所有节点(无论路径别名可能向您显示什么)都出现在 node/# 上,通过检查“节点”并且第二个元素是一个数字,您可以很好地保证您将手放在一个节点上。检查第三个路径元素可以避免在节点编辑表单和其他页面上挂起特定节点的处理。
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 中的数组结构也会假设这种可能性。
【讨论】:
在 Drupal 6 中有一个内置的 Drupal 函数来获取节点对象。
if ($node = menu_get_object()) {
…
}
在此处阅读更多信息http://api.drupal.org/api/function/menu_get_item/6。
【讨论】: