用于从节点数据插入JavaScript变量的钩子

时间:2011-05-27 11:23:44

标签: javascript drupal drupal-7

我有以下函数作为概念证明从节点字段插入js变量。

它在hook_preprocess_html()中,因为js已经在以后的钩子中呈现。通常情况下,我会从$vars['node']获取变量,但我不认为hook_preprocess_html()中存在变量?

function mymodule_preprocess_html(&$vars) {
  $reference = $vars['page']['content']['system_main']['nodes'][47]['field_reference']['#items'][0]['value'];
  drupal_add_js(array(
    'field_reference' => $reference
  ), 'setting');
}

是否有更好的方法来访问节点字段变量,可能在以后的钩子中?

1 个答案:

答案 0 :(得分:3)

当一个节点对象在传递给预处理函数的变量中不可用时,您可以从menu_get_object()获取一个节点对象,该节点对象默认返回其ID作为第二个元素传递的节点的对象URL(例如“node / 1”)。如果路径不以“node”开头,这意味着显示的页面不是节点页面,则该函数将返回NULL

if ($node = menu_get_object()) {
  // The URL for the page being shown is node/<nid>.
}

如果要使用在$variables数组中传递节点对象的预处理函数,则可以使用hook_preprocess_page()$variables['node']也可以为空,或者hook_preprocess_node(),节点对象始终在$variables['node']中传递。