Nano Hash - криптовалюты, майнинг, программирование

Drupal 7, доступ к значению поля флажка в _preprocess_html

Я пытаюсь получить доступ к пользовательскому полю узла с помощью _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');

Во всех этих случаях значение выбирается, когда присутствует атрибут языка (без входа в систему), и не выбирается, когда я вхожу в систему как администратор (когда объект узла не имеет языкового атрибута), поэтому мне приходится прибегать к проверке двумя способами. Что я делаю не так?

19.11.2015

Ответы:


1

Лучший способ получить значение поля всегда:

$node->field_public[LANGUAGE_NONE][0]['value']

Language_None равен 'und', когда вы не используете многоязычные поля, это всегда будет хорошим способом получить значение. [0] - это индекс, когда поле имеет только одно значение, оно будет по этому индексу - всегда.

Нет необходимости проверять это так:

$public = ($node->field_public[LANGUAGE_NONE][0]['value'] || $node->field_public[0]['value'])

Поля всегда имеют языковой ключ первым.

Итак, используя это так:

$public = $node->field_public[LANGUAGE_NONE][0]['value'];

Или, чтобы быть в безопасности, если поле не всегда используется, и вы отображаете другой тип контента:

$public = isset($node->field_public[LANGUAGE_NONE][0]['value']) ? $node->field_public[LANGUAGE_NONE][0]['value'] : null;

Совершенно нормально получить простое значение. Вы можете попытаться отобразить поля или использовать другую функцию, если хотите получить другой результат, например тематическое поле.

Ваш код:

$node = node_load($node->nid);

здесь вы просто делаете запрос дважды, не знаю почему, узел уже выбран внутри переменной $node. Так что просто используйте ценность, не усложняйте

19.11.2015
  • За исключением того, что, как я уже сказал, в preprocess_html() при входе в систему с правами администратора нет кода языка. Выход узла имеет только $node->field_public[0]['value'], без кода языка. Вот почему я смущен, так как вся документация, которую я видел, согласна с вами и показывает код. 20.11.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..