it-swarm.asia

كيف يمكنني الحصول على المصطلح الأصلي في تصنيف له تسلسل هرمي؟

لدي عقدة تم تمييزها بمصطلح تصنيف وهو جزء من تسلسل مصطلحات مثل "دولة >> مقاطعة".

بما أن المستخدم اختار إحدى علامات "المقاطعة" ، كيف يمكنني الحصول على اسم المصطلح الأصلي؟

5
Arosboro

يمكنك الاستعلام عن قاعدة البيانات بنفسك ، أو يمكنك استخدام وظيفة 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. ما قد يحدث في السنة ، حيث لا تتذكر ما كنت تفعله ولماذا.

ولكن في نهاية اليوم ، إنه مجرد تفضيل شخصي ، لأن كلتا الحالتين ستعمل بشكل جيد.

2
googletorp

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

تعرض الدالة جميع المصطلحات الرئيسية في التسلسل الهرمي.

5
kiamlaluno