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.

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

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 () .


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);
?>

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


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

}

-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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.