Obtendo o valor de um campo de uma entidade

11

O que eu instalei no meu site são os módulos Entity API e Entityform. O módulo Entityform permite criar formulários que qualquer usuário pode enviar e os campos dos formulários estão disponíveis para eu usar nas visualizações, semelhante à forma como um tipo de conteúdo funcionaria.

Normalmente, para puxar o valor de um campo de um nó para o meu modelo com php, eu faria o seguinte:

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

No entanto, isso não funciona com entidades / entidades.

Alguém sabe uma maneira de fazer isso para um campo dentro de um formulário da entidade? Algumas pessoas sugeriram o uso do devel e da função dpm (), mas também não faço ideia de como usá-los.

Alguns exemplos específicos de como obter o valor desse campo realmente me ajudariam bastante.

Dustin
fonte

Respostas:

13

Você já tentou acessar os valores com 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
David Thomas
fonte
4
Nota para futuros leitores: Isso está correto, mas para acessar um campo de entidade não é necessário instalar o módulo da API da entidade; O núcleo do Drupal já possui as funções para acessar um campo de entidade.
kiamlaluno
Sim, mas o OP marcou e especificou que eles tinham o módulo API da entidade instalado, portanto, entity_metadata_wrapper, além disso, é uma dependência do módulo entityforms.
David Thomas
2
entity-api é a tag da API de entidade implementada no Drupal 7, não do módulo da API de entidade. A observação é para evitar que desenvolvedores iniciantes pensem que o módulo da API de entidade é necessário para manipular entidades. Eu não disse que a resposta não estava correta. :)
kiamlaluno
7

Sem usar o módulo API da entidade, para obter o valor de um campo associado a uma entidade, use field_get_items () ; você apenas passa o tipo de entidade, o objeto da entidade e o nome do campo.

Por exemplo, para obter o corpo de um comentário, use o código a seguir.

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

Para obter o corpo de um nó, você pode usar o seguinte código.

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

O objeto de entidade é o objeto retornado de entity_load () ou uma função de carregamento específica para essa entidade, como node_load () , comment_load () ou taxonomy_term_load () . No Drupal 8, essas funções são para wrappers entity_load().

Se você quiser mostrar o conteúdo do campo, use field_view_field () .

kiamlaluno
fonte
0

Você normalmente pode obter as propriedades $ node porque você ou algum código que está usando está chamando node_load () de antemão.

Você precisa carregar completamente uma entidade antes de poder obter suas propriedades.

Use entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

Na verdade, você terá um objeto de entidade carregado que poderá obter nos campos de.

Usar o dpm () é o mesmo que qualquer outra função, você só precisa instalar o módulo devel.

Então, faça algo assim:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>
David Meister
fonte
0

Experimentar:

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

Isso deve imprimir o valor do campo.

Se for uma matriz, tente o seguinte:

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

Lembre-se de que essa é a saída bruta e, dependendo da origem do valor, talvez seja necessário higienizar o valor manualmente aqui.

Consulte: função field_get_items

gkom
fonte
0

Coloque isso dentro de um de seus módulos e vá para a página do formulário e você encontrará as informações que está procurando.

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

  dpm($form);

}
user39561
fonte
-1

Em vez de usar o dpm e instalar esse módulo, eu uso:

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

Espero que isso ajude você a descobrir o valor.

Brian
fonte
Hmmm, que qualquer coisa que não é a saída para mim :( Poderia ser porque eu estou vendo uma submissão entityform, e não um nó Ou seria uma submissão entityform realmente ser um nó tão confuso?.
Dustin
Não tenho certeza, então, assumiria que você precisaria de uma variável diferente de $ node.
27712 Brian As
1
A questão é acessar o campo de uma entidade, não como imprimir a entidade.
kiamlaluno