2013-07-24 3 views
4

J'ai essayé d'utiliser le code suivant pour obtenir un Termid d'un terme:Drupal - Comment obtenir terme Id de nom avec taxonomy_get_term_by_name

$term = taxonomy_get_term_by_name($address_string); 
    $termId = $term[0]->tid; 

Il y a 1 résultat, mais il apparaît comme terme [30 ] - donc le code ci-dessus ne fonctionne pas.

Je pensais pouvoir accéder au terme tableau en regardant le premier élément - p. $ term [0]

Qu'est-ce que je fais mal?

Voici le résultat de var_dump ($ term):


array (size=1) 
    30 => 
    object(stdClass)[270] 
     public 'tid' => string '30' (length=2) 
     public 'vid' => string '4' (length=1) 
     public 'name' => string 'Thonglor' (length=8) 
     public 'description' => string '' (length=0) 
     public 'format' => string 'filtered_html' (length=13) 
     public 'weight' => string '0' (length=1) 
     public 'vocabulary_machine_name' => string 'areas' (length=5) 

Un grand merci,

PW

+0

Cela fonctionne correctement. Votre terme a id = 30 dans la base de données. – user4035

+1

'array_shift()' est votre ami ici – Clive

Répondre

6

Probablement la meilleure option serait

$termid = key($term); 

Il produira

http://php.net/manual/en/function.key.php

La fonction de la touche() retourne simplement sur la touche de l'élément de réseau qui est actuellement pointé par le pointeur interne. Il ne déplace pas le pointeur de quelque façon que ce soit. Si le pointeur interne pointe au-delà de la fin de la liste des éléments ou si le tableau est vide, key() renvoie NULL.

Peut mieux appeler

reset($term); 

avant d'appeler la fonction clé

Réinitialiser réinitialiser le pointeur interne de tableau au premier élément

Autre option est comme manuel d'API Drupal se dit, https://api.drupal.org/comment/18909#comment-18909

/** 
* Helper function to dynamically get the tid from the term_name 
* 
* @param $term_name Term name 
* @param $vocabulary_name Name of the vocabulary to search the term in 
* 
* @return Term id of the found term or else FALSE 
*/ 
function _get_term_from_name($term_name, $vocabulary_name) { 
    if ($vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_name)) { 
    $tree = taxonomy_get_tree($vocabulary->vid); 
    foreach ($tree as $term) { 
     if ($term->name == $term_name) { 
     return $term->tid; 
     } 
    } 
    } 
    return FALSE; 
} 
+0

Merci, j'ai utilisé: $ inner = reset ($ term); $ termId = $ inner-> tid; – wanwu

Questions connexes