ฉันจะขอรับรหัสคำศัพท์เฉพาะทางภาษีจากชื่อได้อย่างไร


19

ฟังก์ชันเฉพาะในรายการของฟังก์ชัน taxonomy.moduleที่ดูเหมือนว่ามันทำในสิ่งที่ฉันต้องการดูเหมือนจะเป็นฟังก์ชันส่วนตัว ( _taxonomy_get_tid_from_term )

ฉันควรใช้ฟังก์ชันใดถ้าทั้งหมดที่ฉันรู้คือชื่อเทอมอนุกรมวิธานและฉันต้องค้นหา ID ของมัน

คำตอบ:


14

มันเป็นtaxonomy_get_term_by_name ()ที่คุณใช้เหมือนในรหัสต่อไปนี้

$term_array = taxonomy_get_term_by_name('Foo');
$term = reset($term_array); # get the first element of the array which is our term object
print $term->name;

1
ดูเหมือนว่าจะให้ฉันอาร์เรย์มากกว่า TID $foo[0]->tidไม่ได้ทำอะไรเลยเพราะจะส่งคืนอาร์เรย์คีย์ที่มี TID ดังนั้นในการรับ TID ฉันต้องการ TID หรือทำforeach()รายการเดียว มิฉะนั้น:Undefined offset: 0
beth

3
มันจะส่งกลับอาร์เรย์เนื่องจากไม่มีสิ่งใดป้องกันไม่ให้หลายคำมีชื่อเดียวกัน คุณไม่สามารถรู้ได้ว่าเป็นเพียงรายการเดียว
Letharion

2
@ เบ ธ ใช้พารามิเตอร์ตัวที่สองเพื่อ จำกัด คำศัพท์เฉพาะหรือวนซ้ำด้วยforeach ($terms as $term)และตรวจสอบ$term->vidเพื่อให้แน่ใจว่าคุณมีคำที่ถูกต้อง
mpdonadio

ฉันเพิ่งพิมพ์อย่างรวดเร็วใน D6 รุ่นที่ฉันคุ้นเคย ฉันเห็นตอนนี้จากลิงก์ / URL ของคุณรวมว่าคุณกำลังใช้งาน D7 ความคิดเห็นข้างต้นควรชี้แจงสิ่งต่าง ๆ ให้คุณทราบ
Jimajamma

22

taxonomy_get_term_by_name() จะทำเคล็ดลับ:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}

4
นอกจากนี้ยังมีข้อโต้แย้งที่สองที่เพิ่มเข้ามาใน Drupal 7 เพื่อ จำกัด สิ่งนี้ให้เฉพาะคำศัพท์ การทำเช่นนี้ทำให้ไม่จำเป็นต้องวนซ้ำผลลัพธ์เพื่อค้นหาคำที่คุณต้องการเมื่อคุณอาจมีหลาย ๆ อันที่ใช้ชื่อเดียวกัน
mpdonadio

2
เซมิโคลอนหายไปในบรรทัด$first_term = array_shift($terms);
Kevin Siji

1

ฟังก์ชั่นนี้ใช้งานได้สำหรับฉัน:

/**
 * Return the term id for a given term name.
 */
function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
  else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}

หากคุณใช้คำศัพท์อื่น (แตกต่างจากแท็ก) ให้แก้ไขในโค้ดด้านบนบรรทัด:

$vocabulary = 'tags';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.