엔터티에서 필드 값 가져 오기


11

내 사이트에 설치 한 것은 Entity 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 모듈을 설치할 필요는 없습니다. Drupal 코어에는 이미 엔티티 필드에 액세스하는 기능이 있습니다.
kiamlaluno

예, 그러나 OP는 태그를 지정하고 Entity API 모듈을 설치 했으므로 entity_metadata_wrapper를 지정했습니다. 또한 entityforms 모듈의 종속성입니다.
David Thomas

2
entity-api 는 Entity API 모듈이 아닌 Drupal 7에서 구현 된 Entity API의 태그입니다. 초보자 개발자가 엔티티 처리에 엔티티 API 모듈이 필요하다고 생각하지 않도록주의하십시오. 나는 대답이 정확하지 않다고 말하지 않았다. :)
kiamlaluno

7

엔티티 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 () 와 같이 엔티티에 대한 특정로드 함수 또는 entity_load () 에서 리턴 된 오브젝트 입니다. Drupal 8에서 이러한 함수는의 래퍼입니다 entity_load().

필드의 내용을 표시하려면 field_view_field () 를 사용해야합니다 .


0

귀하 또는 사용중인 일부 코드가 미리 node_load ()를 호출하기 때문에 $ node 속성을 얻을 수 있습니다.

속성을 얻으려면 엔티티를 완전히로드해야합니다.

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>';

이것은 원시 출력이며 값의 위치에 따라 여기서 수동으로 값을 삭제해야 할 수도 있습니다.

참조 : function 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>');

바라건대 이것이 가치를 파헤치는 데 도움이 될 것입니다.


? 음, 나에게 그의 출력하지 아무것도 :( 그것은 내가 entityform 제출을보고, 그리고 노드 또는 entityform 제출 실제로 노드가 될 것이다 그래서 혼동하고 있습니다 때문에 될 수 있습니다.
더스틴

확실하지 않다면 $ node 이외의 다른 변수가 필요하다고 가정합니다.
Brian

1
문제는 엔터티를 인쇄하는 방법이 아니라 엔터티 필드에 액세스하는 것입니다.
kiamlaluno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.