it-swarm-id.com

Bagaimana saya bisa mendapatkan istilah induk dalam taksonomi dengan hierarki?

Saya memiliki simpul yang ditandai dengan istilah taksonomi yang merupakan bagian dari hierarki istilah seperti "state >> county."

Karena pengguna telah memilih salah satu tag "county", bagaimana saya bisa mendapatkan nama istilah induk?

5
Arosboro

Anda dapat menanyakan sendiri databasenya, atau Anda dapat menggunakan fungsi API: taxonomy_get_parents

Karena Anda mungkin memiliki beberapa orang tua, mungkin lebih mudah untuk menanyakan sendiri databasenya:

$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);

Perbarui - Mengapa saya pikir pertanyaan di atas cerdas dalam Drupal 6

Beberapa (kiamlaluno) berpendapat bahwa salah menggunakan argumen di atas untuk db_query Di Drupal 6

In Drupal 6 Anda dapat menggunakan db_query dalam tiga cara:

$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));

Semua hal di atas akan mengembalikan hal yang sama, jadi tidak ada perbedaan fungsional menggunakan satu di atas. Lalu mengapa Anda mungkin bertanya, apakah saya pikir itu pintar untuk menggunakan yang terakhir?

Jika Anda melihat bagaimana Drupal 7 melakukannya, Anda akan melihat:

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

Drupal 7 membutuhkan argumen kueri yang diformat dengan cara khusus. Apa yang tidak dapat Anda lihat dalam contoh ini adalah bahwa SQL perlu diubah juga. Alih-alih menggunakan placeholder seperti %d Anda perlu menggunakan placeholder seperti :arg1. Jadi, sementara yang terakhir dari 3 Drupal 6 cara menggunakan db_query adalah yang paling bertele-tele, itu akan menghemat banyak pekerjaan, jika Anda perlu meningkatkan modul Drupal 6 Anda ke Drupal 7. Yang mungkin terjadi dalam setahun, di mana Anda tidak ingat apa yang Anda lakukan dan mengapa.

Tetapi pada akhirnya, itu hanya preferensi pribadi, karena cara apa pun akan bekerja dengan baik.

2
googletorp

taxonomy_get_parents () mengembalikan semua istilah induk untuk istilah taksonomi dengan ID diteruskan sebagai argumen.
Nilai yang dikembalikan dari fungsi adalah array yang memiliki struktur berikut:

 array (
 'term id' => [objek istilah taksonomi] 
) 

Objek istilah taksonomi berisi properti untuk setiap bidang yang terdapat dalam tabel "term_data".

Kode yang digunakan dari fungsi pada dasarnya adalah kode berikut.

$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;
}

Seperti yang Anda lihat, itu tidak mengembalikan syarat induk dari syarat induk dari yang disahkan sebagai argumen. Untuk itu Anda perlu taxonomy_get_parents_all () , yang mengeksekusi kode berikut.

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

Fungsi mengembalikan semua istilah induk dalam hierarki.

5
kiamlaluno