Получение значения поля от объекта

11

На моем сайте я установил модули Entity API и Entityform. Модуль Entityform позволяет мне создавать формы, которые может отправить любой пользователь, и поля форм доступны для использования в представлениях, аналогично тому, как будет работать тип содержимого.

Обычно, чтобы вытянуть значение поля из узла в мой шаблон с помощью php, я бы сделал следующее:

<?php echo $node->field_name[$node->language][0]['value']; ?>

Однако это не работает с формами сущностей / сущностями.

Кто-нибудь знает способ сделать это для поля внутри формы объекта? Некоторые люди предлагают использовать devel и функцию dpm (), но я тоже не знаю, как их использовать.

Некоторые конкретные примеры того, как я могу получить значение этого поля, действительно очень мне помогут.

Dustin
источник

Ответы:

13

Вы пытались получить доступ к значениям с entity_metadata_wrapper ?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example
Дэвид Томас
источник
4
Примечание для будущих читателей: это правильно, но для доступа к полю сущности необязательно устанавливать модуль API сущности; Ядро Drupal уже имеет функции для доступа к полю сущностей.
kiamlaluno
Да, но OP пометил и указал, что у них установлен модуль Entity API, следовательно, entity_metadata_wrapper, более того, это зависимость от модуля entityforms.
Дэвид Томас
2
entity-api - это тег для Entity API, реализованный в Drupal 7, а не для модуля Entity API. Обратите внимание, что начинающие разработчики не должны думать, что модуль Entity API необходим для обработки сущностей. Я не сказал, что ответ был неправильным. :)
kiamlaluno
7

Не используя модуль Entity API, чтобы получить значение поля, связанного с сущностью, вы используете field_get_items () ; Вы просто передаете тип сущности, объект сущности и имя поля.

Например, чтобы получить текст комментария, используйте следующий код.

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

Чтобы получить тело узла, вы можете использовать следующий код.

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

Объект-сущность - это объект, возвращаемый из entity_load () или специальной функции загрузки для этой сущности, такой как node_load () , comment_load () или taxonomy_term_load () . В Drupal 8 эти функции являются обертками для entity_load().

Если вы хотите показать содержимое поля, вам следует использовать field_view_field () .

киамлалуно
источник
0

Обычно вы можете получить свойства $ node, потому что вы или какой-то код, который вы используете, предварительно вызывают node_load ().

Вам нужно полностью загрузить объект, прежде чем вы сможете получить его свойства.

Используйте entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

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

Использование dpm () аналогично любой другой функции, вам просто нужно установить модуль devel.

Итак, сделайте что-то вроде этого:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>
Дэвид Майстер
источник
0

Пытаться:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

Это должно напечатать значение поля.

Если это массив, попробуйте это:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

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

Смотрите: функция field_get_items

gkom
источник
0

Поместите это в один из ваших модулей и перейдите на страницу формы, и вы найдете информацию, которую вы ищете.

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}
user39561
источник
-1

Вместо использования dpm и установки этого модуля я использую:

print_r('<pre>');
print_r($node);
print_r('</pre>');

Надеюсь, это поможет вам найти значение.

Брайан
источник
Хммм, это ничего не выводит для меня :( Может ли это быть, потому что я просматриваю отправку сущности, а не узел? Или отправка сущности действительно будет узлом? Так запутано.
Дастин
Тогда я не уверен, я бы предположил, что вам понадобится другая переменная, отличная от $ node.
Брайан
1
Вопрос заключается в доступе к полю объекта, а не в том, как распечатать объект.
kiamlaluno