¿Cómo debería obtener el valor contenido en un campo particular de un nodo personalizado de Drupal 7?

StackOverflow https://stackoverflow.com/questions/4709483

Pregunta

¿Cuál es la manera "correcta" para obtener el valor almacenado en un campo particular dentro de un nodo de Drupal personalizada? He creado un módulo personalizado, con un nodo personalizado, con una costumbre URL campo. Las siguientes obras:

$result = db_query("SELECT nid FROM {node} WHERE title = :title AND type = :type", array(
  ':title' => $title,
  ':type' => 'custom',
))->fetchField();
$node = node_load($result);
$url = $node->url['und']['0']['value'];

... pero hay una manera mejor, tal vez usando las nuevas funciones de la API de campo?

¿Fue útil?

Solución

node_load() luego acceder al campo como una propiedad es la forma correcta, a pesar de que lo haría de forma ligeramente diferente para evitar la codificación dura de la configuración regional:

$lang = LANGUAGE_NONE;
$node = node_load($nid);
$url = $node->url[$lang][0]['value'];

El método que está utilizando para obtener el NID es una forma particularmente kludgy derivarlo; Me concentro en la refactorización y el uso que EntityFieldQuery y entity_load () en su lugar:

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->propertyCondition('title', $title)
  ->execute();

// $result['node'] contains a list of nids where the title matches
if (!empty($result['node']) {
  // You could use node_load_multiple() instead of entity_load() for nodes
  $nodes = entity_load('node', $result['node']);
}

Lo que quiere hacer esto sobre todo porque el título no es una propiedad única y si aparece el campo en entidades distintas de los nodos. En ese caso, que le quita el entityCondition().

Otros consejos

No sé por qué EntityFieldQuery se está discutiendo, pero bien. :) En realidad estás va a querer utilizar el field_get_items () función .

if ($nodes = node_load_multiple(array(), array('type' => 'custom', 'title' => $title)) {
  $node = reset($nodes);
  if ($items = field_get_items('node', $node, 'url')) {
    $url = $items[0]['value'];
    // Do whatever
  }
}

PropertyCondition ( 'field_order_no', 'valor', 'clave de búsqueda', '=')

field_order_no es la babosa de campo personalizado y búsqueda clave es el valor que se va emparejado con

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top