Drupal 7: Manipulando entidades con Entity metadata wrappers
Si hay algo que a cualquier drupalero, que haya tenido que trabajar algo de código en drupal 7, le haga volverse loco, es sin duda manipular valores de diferentes entidades, sobre todo de los nodos.
 
Y seguro que mucho de vosotros os habéis vuelto locos, tanto recuperando como seteando información, sobre todo si tenéis una web multidioma, entonces es seguro cuando empiezan los verdaderos dolores de cabeza.
 
Pues bien, veremos como poder trabajar y manejar entidades de una forma un tanto mas sencilla y porque no, mas segura.
 
Pongamos el típico ejemplo, cuando queremos acceder al valor de un campo de un nodo. Lo que hariamos normalmente es algo como esto:
 
$node->field_campo_custom[LANGUAGE_NONE][0]['value']; 
 
Este sistema que, sin duda, es el mas común en el mundo drupal corriente, dista mucho de ser seguro y tiende a dar problemas a la larga y eso sin contar que nuestra web sea miltiidioma, que por lo general todos nosotros solemos hace este tipo de webs.
 
Para solucionar esto, el modulo Entity API nos proporciona otra alternativa, usando los “metadata wrappers” podremos acceder a los valores de estos campos e incluso poder darles valor.
 
$node_wrapper->field_campo_custom->value(); 
 
Como podéis ver en el ejemplo anterior, aquí no hace falta decirle el idioma, ni poner ningún array ni nada por el estilo. Esto aunque no os parezca muy importante creedme cuando os digo que es media vida.
 
También podemos encontrar otros ejemplos típicos como obtener la información de los diferentes parámetros de la entidad (Y no me refiero a los campos).
 
// Forma unificada de obtener $node->title, $user->name, ...
$wrapper->label();
 
// Forma unificada de obtener $node->nid, $user->uid, ...
$wrapper->getIdentifier();
 
// Forma unificada de obtener $node->type, ...
$wrapper->getBundle();
 
Haz click en "SIGUIENTE" para ver como acceder a las entidades

Páginas

Total de votos: 135

Comentarios (1)

  • Imagen de Rolando

    Rolando (no verificado)

    Aclarar que esto se puede hacer con el módulo Entity (https://www.drupal.org/project/entity) para drupal 7 y esto y mucho más se encuentra ya en el core de Drupal 8 (https://www.drupal.org/developing/api/entity)

  • Páginas

Deja un comentario