Obtener el valor de un campo de una entidad

11

Lo que he instalado en mi sitio son los módulos Entity API y Entityform. El módulo Entityform me permite crear formularios que cualquier usuario puede enviar y los campos de formularios están disponibles para que yo los use en las vistas, de forma similar a cómo funcionaría un tipo de contenido.

Normalmente, para extraer el valor de un campo de un nodo en mi plantilla con php, haría lo siguiente:

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

Sin embargo, esto no funciona con entidades / entidades.

¿Alguien sabe de una manera de hacer esto para un campo dentro de una entidad de forma? Algunas personas han sugerido usar devel y la función dpm () pero tampoco tengo idea de cómo usarlas.

Algunos ejemplos específicos sobre cómo puedo obtener el valor de este campo realmente me ayudarían mucho.

Dustin
fuente

Respuestas:

13

¿Has intentado acceder a los valores con 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
fuente
44
Nota para futuros lectores: Esto es correcto, pero para acceder a un campo de entidad no es necesario instalar el módulo Entity API; Drupal core ya tiene las funciones para acceder a un campo de entidad.
kiamlaluno
Sí, pero OP etiquetó y especificó que tenían instalado el módulo Entity API, por lo tanto entity_metadata_wrapper, además es una dependencia del módulo entityforms.
David Thomas
2
entity-api es la etiqueta para la API de entidad implementada desde Drupal 7, no para el módulo de API de entidad. La nota es para evitar que los desarrolladores principiantes piensen que el módulo Entity API es necesario para manejar entidades. No dije que la respuesta no era correcta. :)
kiamlaluno
7

Sin usar el módulo Entity API, para obtener el valor de un campo asociado con una entidad, usa field_get_items () ; simplemente pasa el tipo de entidad, el objeto de entidad y el nombre del campo.

Por ejemplo, para obtener el cuerpo de un comentario, use el siguiente código.

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

Para obtener el cuerpo de un nodo, puede usar el siguiente código.

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

El objeto de entidad es el objeto devuelto por entity_load () , o una función de carga específica para esa entidad, como node_load () , comment_load () o taxonomy_term_load () . En Drupal 8, esas funciones son envoltorios para entity_load().

Si desea mostrar el contenido del campo, debe usar field_view_field () .

kiamlaluno
fuente
0

Normalmente puede obtener propiedades de $ node porque usted o algún código que está utilizando está llamando a node_load () de antemano.

Debe cargar completamente una entidad antes de poder acceder a sus propiedades.

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

Entonces realmente tendrá un objeto de entidad cargado que puede obtener en los campos de.

Usar dpm () es lo mismo que cualquier otra función, solo necesita instalar el módulo de desarrollo.

Entonces, haz algo como esto:

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

Tratar:

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

Esto debería imprimir el valor del campo.

Si es una matriz, intente esto:

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

Recuerde que esta es la salida sin procesar y, dependiendo de dónde provenga el valor, es posible que deba desinfectar el valor manualmente aquí.

Ver: función field_get_items

gkom
fuente
0

Coloque esto dentro de uno de sus módulos y vaya a la página del formulario y encontrará la información que está buscando.

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

  dpm($form);

}
usuario39561
fuente
-1

En lugar de usar dpm e instalar ese módulo, uso:

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

Esperemos que esto te ayude a profundizar en el valor.

Brian
fuente
Hmmm, eso no genera nada para mí :( ¿Podría ser porque estoy viendo un envío de formulario de entidad, y no un nodo? ¿O sería un envío de formulario de entidad realmente un nodo? Tan confundido.
Dustin
No estoy seguro, supongo que necesitaría una variable diferente que no sea $ nodo.
Brian
1
La pregunta es sobre el acceso a un campo de una entidad, no cómo imprimir la entidad.
kiamlaluno