لدي عقدة تم تمييزها بمصطلح تصنيف وهو جزء من تسلسل مصطلحات مثل "دولة >> مقاطعة".
بما أن المستخدم اختار إحدى علامات "المقاطعة" ، كيف يمكنني الحصول على اسم المصطلح الأصلي؟
يمكنك الاستعلام عن قاعدة البيانات بنفسك ، أو يمكنك استخدام وظيفة API: taxonomy_get_parents
نظرًا لأنه قد يكون لديك العديد من الآباء ، فقد يكون من الأسهل مجرد الاستعلام عن قاعدة البيانات بنفسك:
$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);
تحديث - لماذا أعتقد أن الاستعلام أعلاه ذكي في Drupal 6
قد يجادل البعض (kiamlaluno) أنه من الخطأ استخدام الوسيطة أعلاه لـ db_query
في Drupal 6
في Drupal 6 يمكنك استخدام db_query بثلاث طرق:
$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));
كل ما سبق سيعيد نفس الشيء ، لذلك لا يوجد فرق وظيفي باستخدام واحد على مدى. فلماذا قد تسأل ، هل أعتقد أنه من الذكي استخدام آخر واحد؟
إذا نظرت إلى كيفية عمل Drupal 7 ، فستشاهد:
$query = db_query($sql, array(':arg1' => $arg1, ':arg2' => $arg2, ':arg3' => $arg3));
يتطلب Drupal 7 وسيطات الاستعلام المنسقة بطريقة خاصة. ما لا يمكنك رؤيته في هذا المثال هو أنه يجب تغيير SQL أيضًا. بدلاً من استخدام العناصر النائبة مثل %d
، يلزمك استخدام العناصر النائبة مثل :arg1
. لذا ، في حين أن الأخيرة من الطرق الثلاث Drupal الست لاستخدام db_query هي الأكثر مطولًا ، فإنها ستوفر لك الكثير من العمل ، إذا كنت بحاجة إلى ترقية الوحدة النمطية Drupal 6 إلى Drupal 7. ما قد يحدث في السنة ، حيث لا تتذكر ما كنت تفعله ولماذا.
ولكن في نهاية اليوم ، إنه مجرد تفضيل شخصي ، لأن كلتا الحالتين ستعمل بشكل جيد.
taxonomy_get_parents () تُرجع جميع المصطلحات الرئيسية للمصطلح المصنف بالمعرف الذي تم تمريره كوسيطة.
القيمة التي تم إرجاعها من الدالة هي صفيف له البنية التالية:
صفيف ( 'term id' => [كائن مصطلح التصنيف] )
يحتوي كائن مصطلح التصنيف على خاصية لكل حقل من الحقول الموجودة في جدول "بيانات_المصطلح".
الرمز المستخدم من الوظيفة هو في الأساس الرمز التالي.
$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;
}
كما ترى ، فإنه لا يُرجع المصطلحات الأصل للمصطلحات الأصلية للمصطلح الذي تم تمريره كوسيطة. لذلك تحتاج taxonomy_get_parents_all () ، الذي ينفذ الكود التالي.
if ($tid) {
$parents[] = taxonomy_get_term($tid);
$n = 0;
while ($parent = taxonomy_get_parents($parents[$n]->tid)) {
$parents = array_merge($parents, $parent);
$n++;
}
}
تعرض الدالة جميع المصطلحات الرئيسية في التسلسل الهرمي.