วิธีการตั้งค่าคำศัพท์อนุกรมวิธานทางโปรแกรมสำหรับโหนด?


18

ฉันสร้างข้อกำหนดเกี่ยวกับอนุกรมวิธานและกำหนดให้กับประเภทเนื้อหา ' บทความ ' โดยใช้ฟิลด์คำอ้างอิง ฉันสร้างโหนดโดยทางโปรแกรม แต่จะกำหนดเงื่อนไข taxonomy สำหรับโหนดได้อย่างไร

คำศัพท์ทางอนุกรมวิธานถูกสร้างขึ้นแล้ว ฉันต้องการที่จะกำหนดระยะอนุกรมวิธานสำหรับโหนดโปรแกรม

คำตอบ:


17

ใช้ฟังก์ชั่นนี้เพื่อรับ ID จาก Termname

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

ฉันชอบความเก่งกาจของมัน (ส่วนอื่นของมัน) ดังนั้นมันจึงเพิ่มคำศัพท์
Eduardo Chongkan

15

เมื่อคุณสร้างโหนดโดยทางโปรแกรมคุณสามารถกำหนดโหนดให้กับคำใด ๆ เช่นนี้:

$node = new stdClass();
$node->type = 'YOUR_CONTENT_TYPE_NAME';
$node->title = 'title';

$node->language = LANGUAGE_NONE;
node_object_prepare($node);

//id of your taxonomy term
$tid = 1;

//add term to a node field
//field_yourfield_name - machine name of your term reference field

$node->field_yourfield_name[$node->language][0]['tid'] = $tid;
node_save($node);

1
@ neok.Thanks.It ทำงานได้ดีโดยใช้คำว่า id แต่วิธีการตั้งชื่อ? เป็นเช่นเดียวกับ $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani

2
ใครรู้วิธีติดแท็กโหนด (โดยทางโปรแกรม) โดยใช้ชื่อ taxonomy แทน taxonomy id ใน drupal 7?
Ranjani

@pretty ใช้ taxonomy_get_term_by_name เพื่อรับอ็อบเจกต์ term แล้วใช้ tid
Lee Woodman

2

คุณสามารถใช้เอนทิตีของ wraps เมทาดาทาบางอย่างเพื่อให้บรรลุเช่น

try {
  $w_node = entity_metadata_wrapper('node', $entity);
  $w_some_term = entity_metadata_wrapper('taxonomy_term', 1234);
  $w_node->field_term_ref = $w_some_term->tid->value();
  $w_node->save();
} catch (Exception $e) {
  drupal_set_message(t('Error for node: @title, message: @error.',
        array('@title' => $w_node->title->value(), '@error' => $e->getMessage())), 'error');
  watchdog_exception('foo', $e);
}

1
+1 สำหรับการใช้ EMW พวกเขายังมีวิธีที่มีประโยชน์ getIdentifier () $w_some_term->tid->value()ซึ่งเป็นหนึ่งในขั้นตอนน้อยกว่า นี่เป็นบทความที่ยอดเยี่ยมที่ช่วยให้ฉันเข้าใจแนวคิดนี้ดีขึ้นมากและฉันอ้างอิงเป็นประจำเมื่อใช้ EMWs:
scotself

1

เมื่อเพิ่มคำศัพท์ฉันพบว่าฉันต้องการเพิ่ม $ term-> parent = array (0) มิฉะนั้นตาราง taxonomy_term_hierarchy ไม่ได้รับการอัปเดตอย่างถูกต้องและคำศัพท์ไม่แสดงในหน้ารายการผู้ดูแลระบบสำหรับคำศัพท์นั้น

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