Я пытаюсь получить доступ к пользовательскому полю узла с помощью _preprocess_html, но многие из подходов, которые я видел в StackOverflow, похоже, не работают правильно, и я не совсем понимаю, почему.
У меня есть поле флажка под названием «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');
Во всех этих случаях значение выбирается, когда присутствует атрибут языка (без входа в систему), и не выбирается, когда я вхожу в систему как администратор (когда объект узла не имеет языкового атрибута), поэтому мне приходится прибегать к проверке двумя способами. Что я делаю не так?
$node->field_public[0]['value']
, без кода языка. Вот почему я смущен, так как вся документация, которую я видел, согласна с вами и показывает код. 20.11.2015