Cara menambahkan bidang referensi istilah taksonomi dalam bentuk drupal khusus

9

Item menu didefinisikan dengan drupal_get_formfungsi callback dan mengembalikan form dari fungsi callback. Bagaimana saya bisa menambahkan taxonomy_term_referencebidang ke formulir ini?

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

Saya tidak yakin cara menambahkan bidang taxonomy_term_reference untuk $form['mymodule_form']['tag']. Saya ingin bidang ini menjadi bidang teks dengan pelengkapan otomatis dari istilah kosakata dan istilah baru ditambahkan ketika istilah yang dimasukkan tidak ditemukan

Srihitha Narra
sumber

Jawaban:

5

Untuk Drupal 7, kodenya seperti ini, di mana field_tagsbidang taksonomi di simpul dengan tipe widget autocomplete.

<?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')
    );
?>
jibran
sumber
apa yang pagedilakukan di akhir kode Anda? jahitan ke kode php seperti saya yang tidak valid?
FLY
Tampaknya hanya salah ketik. Anda dapat dengan aman mengabaikannya, saya percaya.
BrianV
Dengan $ form bagian dari kode di atas, saya mendapatkan bidang taksonomi muncul di formulir. Pelengkapan otomatis juga berfungsi. Tapi bagaimana cara menyimpan nilai yang dikirimkan dalam bidang taksonomi dari sebuah simpul? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;tidak bekerja untuk saya. Hanya memberi saya kesalahan.
deinqwertz
0

Anda harus memasukkan id kosa kata - Anda juga harus bisa meng-hardcode-nya

$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 ...").')

);

atau untuk vocab 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 ...").')
);

Tidak diuji, tetapi itu seharusnya berhasil. Lain punya memandang sebentar di sini: http://drupal.org/node/854216

tecjam
sumber
Apakah Anda yakin ini bekerja untuk D7 juga? Saya tidak bisa membuatnya bekerja. Ini memberikan pengecualian dalam taxonomy.module
Srihitha Narra
hmm, ya itu berhasil, tetapi tidak persis seperti seharusnya.
tecjam
1
Ini tidak akan berhasil. Taxonomy_autocomplete Drupal 7 mengharuskan nama bidang dilewatkan sebagai argumen. Contoh ini menggunakan sintaksis autocomplete taksonomi Drupal 6.
BrianV
0

Saya menggunakan ini dan saya mendapat panggilan balik autocomplete bekerja, namun tidak untuk vocab taksonomi yang ditentukan. Alih-alih itu mengembalikan hasil dari semua vocab

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

Saya tidak begitu yakin mengapa itu jujur.

tecjam
sumber
Saya mencoba dengan cara yang sama dan pengecualian di bawah ini diberikan SELECT t.tid AS tid, t.name AS name FROM {taxonomy_term_data} t WHERE (t.vid IN ()) DAN t.name LIKE: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) LIMIT 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) dan mysql memberikan pengecualian di dekat & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra
0

@tecjam Untuk Drupal 7, Anda hampir memilikinya. Yang harus Anda lakukan adalah menggunakan nama bidang alih-alih id vocab.

Seperti ini:

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

Ganti field_name dengan nama bidang Anda.

Germán Villacreces
sumber