วิธีเพิ่มฟิลด์การอ้างอิงคำศัพท์อนุกรมวิธานในรูปแบบ drupal ที่กำหนดเอง


9

รายการเมนูถูกกำหนดด้วยdrupal_get_formฟังก์ชั่นการโทรกลับและส่งกลับแบบฟอร์มจากฟังก์ชั่นการโทรกลับ ฉันจะเพิ่มtaxonomy_term_referenceฟิลด์ในแบบฟอร์มนี้ได้อย่างไร

$items['files/add'] = array(
      'title' => 'Add file',
      'description' => 'Allows users to add files',
      'type' => MENU_CALLBACK,
      'page callback' => 'drupal_get_form',
      'page arguments' => array('mymodule_add_file'),
      'access callback' => TRUE,
    );
function mymodule_add_file($form, &$form_state) {
    drupal_set_title("Add file");
    $form['mymodule_form'] = array(
      '#type' => 'fieldset',
      '#tree' => TRUE,
      '#collapsable' => FALSE,
      '#title' => 'Adding file to locker room',
    );

    $form['mymodule_form']['file'] = array(
      '#type' => 'managed_file',
      '#title' => 'Upload file',      
    );

    $form['mymodule_form']['tag'] = array(
      '#type' => 'taxonomy_term_reference',
      '#title' => 'Tags',
    );  

    return $form;
}

$form['mymodule_form']['tag']ผมไม่แน่ใจว่าวิธีการเพิ่มข้อมูลสำหรับ taxonomy_term_reference ฉันต้องการให้ฟิลด์นี้เป็นฟิลด์ข้อความที่มีการเติมคำอัตโนมัติจากคำศัพท์และเติมคำศัพท์ใหม่เมื่อไม่พบคำที่ป้อน

คำตอบ:


5

สำหรับ Drupal 7 โค้ดนั้นเป็นแบบนี้โดยที่field_tagsเป็นฟิลด์ taxonomy ในโหนดที่มีการเติมข้อความอัตโนมัติประเภทวิดเจ็ต

<?php
   $node=node_load($nid);
    $tags = array();
    foreach ($node->field_tags['und'] as $item) {
      $tags[$item['tid']] = isset($item['taxonomy_term']) ?  $item['taxonomy_term'] : taxonomy_term_load($item['tid']);
    }
    $form['tags'] = array(
      '#type' => 'textfield',
      '#default_value' => taxonomy_implode_tags($tags),
      '#title' => 'Add Tags',
      '#autocomplete_path' => 'taxonomy/autocomplete/field_tags',
      '#maxlength' => 1024,
      '#element_validate' => array('taxonomy_autocomplete_validate')
    );
?>

สิ่งที่pageทำในตอนท้ายของรหัสของคุณ? สามารถตะเข็บรหัส php ที่ไม่ถูกต้องออกได้หรือไม่
FLY

ที่ดูเหมือนจะเป็นเพียงพิมพ์ผิด คุณสามารถเพิกเฉยได้อย่างปลอดภัยฉันเชื่อ
BrianV

ด้วยส่วน $ form ของรหัสด้านบนฉันได้รับฟิลด์ taxonomy เพื่อแสดงในแบบฟอร์ม การเติมข้อความอัตโนมัติยังทำงานได้ แต่ฉันจะเก็บค่าที่ส่งในฟิลด์ taxonomy ของโหนดได้อย่างไร $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;ไม่ได้ผลสำหรับฉัน เพียงแค่ให้ฉันข้อผิดพลาด
deinqwertz

0

คุณต้องใส่รหัสคำศัพท์ - คุณควรฮาร์ดโค้ดได้เช่นกัน

$form['mymodule_form']['tag'][$vocabulary->vid] = array(
  '#type' => 'textfield',
  '#default_value' => $typed_string,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/'. $vocabulary->vid,
  '#required' => $vocabulary->required,
  '#title' => $vocabulary->name,
  '#description' => t('Some description ...").')

);

หรือสำหรับคำศัพท์ id 5

$form['mymodule_form']['tag']['5'] = array(
  '#type' => 'textfield',
  '#default_value' => $typed_string,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/5',
  '#required' => $vocabulary->required,
  '#title' => $vocabulary->name,
  '#description' => t('Some description ...").')
);

ไม่ได้ทดสอบ แต่ควรใช้งานได้ อื่นมีตัวสำรวจที่นี่: http://drupal.org/node/854216


คุณแน่ใจหรือว่ามันใช้กับ D7 ได้เช่นกัน? ฉันไม่สามารถทำงานได้ มันให้ข้อยกเว้นใน taxonomy.module
Srihitha Narra

อืมใช่มันใช้งานได้ แต่ไม่ใช่อย่างที่ควรจะเป็น
tecjam

1
สิ่งนี้ใช้ไม่ได้ taxonomy_autocomplete ของ Drupal 7 ต้องการชื่อฟิลด์ที่จะส่งผ่านเป็นอาร์กิวเมนต์ ตัวอย่างนี้ใช้ไวยากรณ์การเติมข้อความอัตโนมัติของ Drupal 6
BrianV

0

ฉันใช้สิ่งนี้และฉันได้รับการเรียกกลับอัตโนมัติที่สมบูรณ์ แต่ไม่ได้สำหรับคำศัพท์ทางด้านภาษีที่ระบุ แต่มันกลับมาผลลัพธ์จากคำศัพท์ทั้งหมด

  $element['test'] = array(
      '#type' => 'textfield',
      '#default_value' => isset($items[$delta]['test']) ? $items[$delta]['test'] : NULL,
      '#maxlength' => 100,
      '#autocomplete_path' => 'taxonomy/autocomplete/37',
   );

ฉันไม่แน่ใจว่าทำไมถึงต้องซื่อสัตย์


ฉันพยายามยกเว้นที่คล้ายกันและด้านล่างจะได้รับ SELECT t.tid เป็น tid, t.name ชื่อจาก {taxonomy_term_data} t ที่ (t.vid ใน ()) และ t.name เช่น: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) จำกัด 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) และ mysql กำลังให้ข้อยกเว้นใกล้ & # 039; \\ & # 039;) ข้อ จำกัด OFFSET 0 & # 039;
Srihitha Narra

0

@tecjam สำหรับ Drupal 7 คุณเกือบจะได้มันแล้ว สิ่งที่คุณต้องทำคือใช้ชื่อเขตข้อมูลแทนรหัสคำศัพท์

แบบนี้:

 $element['test'] = array(
 '#type' => 'textfield',
  '#default_value' => isset($items[$delta]['test']) ? $items[$delta]['test'] : NULL,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/field_name',
);

แทนที่ field_name ด้วยชื่อของฟิลด์ของคุณ

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