Comment dois-je obtenir la valeur contenue dans un champ particulier d'un noeud personnalisé Drupal 7?

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

Question

Quelle est la façon « correcte » pour obtenir la valeur stockée dans un champ particulier dans un noeud Drupal personnalisé? J'ai créé un module personnalisé, avec un noeud personnalisé, avec une coutume URL champ. Les travaux suivants:

$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'];

... mais est-il une meilleure façon, en utilisant peut-être les nouvelles fonctions de l'API sur le terrain?

Était-ce utile?

La solution

node_load() accéder alors le champ comme une propriété est la bonne façon, bien que je le ferais un peu différemment pour éviter coder en dur l'environnement local:

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

La méthode que vous utilisez pour obtenir le JNV est une manière particulièrement kludgy à dériver; Je me concentrerais sur la refactorisation et l'utilisation que EntityFieldQuery et entity_load () à la place:

$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']);
}

Vous voulez faire cela d'autant plus que le titre est pas une propriété unique et si le champ apparaît sur les entités autres que les noeuds. Dans ce cas, vous souhaitez supprimer le entityCondition().

Autres conseils

Je ne sais pas pourquoi EntityFieldQuery est en cours de discussion, mais ok. :) Vous allez vraiment vouloir utiliser le field_get_items () fonction .

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', 'valeur', 'clé de recherche', '=')

field_order_no est la limace de champ personnalisé et Clé de recherche est la valeur à apparié avec

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top