Отримання значення поля від сутності


11

Що я встановив на своєму сайті, це модулі API і Entityform модулі. Модуль Entityform дозволяє мені створювати форми, які може подавати будь-який користувач, і поля форм, які я можу використовувати для перегляду, подібно до того, як би працював тип вмісту.

Зазвичай, щоб вивести значення поля з вузла в мій шаблон із php, я зробив би наступне:

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

Однак це не працює з формами / сутностями.

Хтось знає про спосіб зробити це для поля у формі форми? Деякі люди запропонували використовувати devel і функцію dpm (), але я не знаю, як їх використовувати.

Деякі конкретні приклади того, як я можу отримати значення цього поля, справді мені дуже допоможуть.

Відповіді:


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 Entity; Drupal core вже має функції доступу до поля сутності.
kiamlaluno

Так, але з тегом та уточненням OP вони встановили модуль API Entity API, отже, object_metadata_wrapper, крім того, це залежність від модуля форм сутності.
Девід Томас

2
entit-api - це тег для API Entity, реалізованого з Drupal 7, а не для модуля API Entity. Зауважте, щоб уникнути розробників початківців, що модуль API Entity необхідний для обробки об'єктів. Я не сказав, що відповідь була невірною. :)
kiamlaluno

7

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

Наприклад, щоб отримати коментар, ви використовуєте наступний код.

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

Щоб отримати тіло вузла, ви можете використовувати наступний код.

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

Об'єктом сутності є об'єкт, повернутий з object_load () , або специфічна функція навантаження для цього об'єкта, така як node_load () , comment_load () або taxonomy_term_load () . У Drupal 8 ці функції є обгортками entity_load().

Якщо ви хочете показати вміст поля, тоді вам слід скористатися field_view_field () .


0

Зазвичай ви можете отримати властивості $ node, оскільки ви або якийсь код, який ви використовуєте, заздалегідь викликає node_load ().

Вам потрібно повністю завантажити об'єкт, перш ніж ви зможете отримати його властивості.

Використовуйте entit_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


0

Розмістіть це всередині одного з модулів і перейдіть на сторінку форми, і ви знайдете інформацію, яку шукаєте.

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

  dpm($form);

}

-1

Замість використання dpm та встановлення цього модуля я використовую:

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

Сподіваємось, це допоможе вам розібратися до значення.


Гммм, це для мене нічого не виводить :( Можливо, це тому, що я переглядаю подання форми, а не вузол? Або подання форми буде насправді вузлом? Так заплутався.
Дастін

Я тоді не впевнений, я б припустив, що вам потрібна інша змінна, крім $ node.
Брайан

1
Питання полягає у доступі до поля суб’єкта, а не в тому, як надрукувати об'єкт.
kiamlaluno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.