it-swarm.com.de

Wie kann ich den übergeordneten Begriff in einer Taxonomie mit einer Hierarchie erhalten?

Ich habe einen Knoten, der mit einem Taxonomiebegriff versehen ist, der Teil einer Hierarchie von Begriffen wie "Bundesstaat >> Landkreis" ist.

Wie kann ich den Namen des übergeordneten Begriffs abrufen, wenn der Benutzer eines der "County" -Tags ausgewählt hat?

5
Arosboro

Sie können die Datenbank selbst abfragen oder die API-Funktion verwenden: taxonomy_get_parents

Da Sie möglicherweise mehrere Eltern haben, ist es möglicherweise einfacher, die Datenbank selbst abzufragen:

$tid = ? // the tid of the county term
$parent_tid = db_result(db_query("SELECT parent FROM {term_hierarchy} WHERE tid = %d;",
  array(':tid' => $tid)
));
$parent_term = taxonomy_get_term($parent_tid);

pdate - Warum ich denke, dass die obige Abfrage in Drupal 6 klug ist

Einige (kiamlaluno) würden argumentieren, dass es falsch ist, das obige Argument für db_query In Drupal 6 zu verwenden

In Drupal 6 können Sie db_query auf drei Arten verwenden:

$query = db_query($sql, $arg1, $arg2, $arg3);
$query = db_query($sql, array($arg1, $arg2, $arg3));
$query = db_query($sql, array(':arg1' => $arg1, ':arg2' => $arg2, ':arg3' => $arg3));

Alle oben genannten Punkte geben dasselbe zurück, sodass es keinen funktionalen Unterschied gibt, wenn Sie einen Over-Over verwenden. Warum fragst du dich dann vielleicht, ob es klug ist, den letzten zu verwenden?

Wenn Sie sich ansehen, wie Drupal 7 das macht, werden Sie sehen:

$query = db_query($sql, array(':arg1' => $arg1, ':arg2' => $arg2, ':arg3' => $arg3));

Drupal 7 erfordert die speziell formatierten Abfrageargumente. Was Sie in diesem Beispiel nicht sehen können, ist, dass auch SQL geändert werden muss. Anstatt Platzhalter wie %d Zu verwenden, müssen Sie Platzhalter wie :arg1 Verwenden. Während die letztere der 3 Drupal 6 Möglichkeiten zur Verwendung von db_query am ausführlichsten ist, erspart sie Ihnen viel Arbeit, falls Sie Ihr Drupal 6-Modul auf _ aktualisieren müssenDrupal 7. Was in einem Jahr passieren könnte, in dem Sie sich nicht erinnern, was Sie getan haben und warum.

Aber am Ende des Tages ist es nur eine persönliche Präferenz, da beide Wege gut funktionieren.

2
googletorp

taxonomy_get_parents () gibt alle übergeordneten Begriffe für den Taxonomiebegriff mit der als Argument übergebenen ID zurück.
Der von der Funktion zurückgegebene Wert ist ein Array mit der folgenden Struktur:

 Array (
 'term id' => [Taxonomie-Termobjekt] 
) 

Das Taxonomie-Termobjekt enthält eine Eigenschaft für jedes der in der Tabelle "term_data" enthaltenen Felder.

Der von der Funktion verwendete Code ist im Wesentlichen der folgende.

$result = db_query(db_rewrite_sql('SELECT t.tid, t.* FROM {term_data} t INNER JOIN {term_hierarchy} h ON h.parent = t.tid WHERE h.tid = %d ORDER BY weight, name', 't', 'tid'), $tid);
$parents = array();
while ($parent = db_fetch_object($result)) {
  $parents[$parent->$key] = $parent;
}

Wie Sie sehen, werden die übergeordneten Begriffe der übergeordneten Begriffe des als Argument übergebenen nicht zurückgegeben. Dafür benötigen Sie taxonomy_get_parents_all () , das den folgenden Code ausführt.

  if ($tid) {
    $parents[] = taxonomy_get_term($tid);
    $n = 0;
    while ($parent = taxonomy_get_parents($parents[$n]->tid)) {
      $parents = array_merge($parents, $parent);
      $n++;
    }
  }

Die Funktion gibt alle übergeordneten Begriffe in der Hierarchie zurück.

5
kiamlaluno