我想使用_preprocess_html訪問自定義節點字段,但是我在StackOverflow上看到的許多方法似乎都不正確,我不太明白爲什麼。Drupal 7,訪問_preprocess_html中的複選框字段值
我有一個名爲'public'的複選框字段,它可以在節點上作爲'field_public'使用。我想知道它是否在preprocess_html模板函數中被選中或未選中。
如果我沒有登錄到該網站,請執行下列操作:
function MYTHEME_preprocess_html() {
$node = menu_get_object();
}
然後我的字段值是$node->field_public[LANGUAGE_NONE][0]['value']
爲我所期望的。但是,如果我登錄,它將更改爲$node->field_public[0]['value']
。
現在我只是做
$public = ($node->field_public[LANGUAGE_NONE][0]['value'] || $node->field_public[0]['value'])
但我想它正確,沒有的我曾嘗試選擇似乎給我在這兩種情況下的值。我曾嘗試:
// node_build_content method
$node = node_load($node->nid);
node_build_content($node);
$public = $node->content['field_public'];
// entity api method
$wrapper = entity_metadata_wrapper('node', $node);
$public = $wrapper->field_public->value();
// field_get_item method
$public = field_get_item('node',$node,'field_public');
在所有這些情況下的價值爲取出時langauage屬性存在(未登錄)和當我登錄的管理員是不是獲取(當節點對象沒有語言屬性),所以我必須回頭檢查兩種方式。我究竟做錯了什麼?獲得字段值
除此之外,正如我所說,在preprocess_html()以admin身份登錄時,*不是*語言代碼。節點輸出只有'$ node-> field_public [0] ['value']',沒有語言代碼。這就是爲什麼我很困惑,因爲我看到的所有文檔都與你一致,並顯示了一個代碼。 –