我有以下函数作为概念证明从节点字段插入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');
}
是否有更好的方法来访问节点字段变量,可能在以后的钩子中?
答案 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']
中传递。