Özel bir drupal formda sınıflandırma terimi referans alanı nasıl eklenir


9

Bir menü öğesi drupal_get_formgeri arama işlevi olarak tanımlanır ve formu geri arama işlevinden döndürür. taxonomy_term_referenceBu forma nasıl alan ekleyebilirim ?

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

Taxonomy_term_reference alanının nasıl ekleneceğinden emin değilim $form['mymodule_form']['tag']. Bu alanın kelime terimlerinden otomatik tamamlanmış bir metin alanı olmasını ve girilen terim bulunamadığında yeni terimin eklenmesini istiyorum

Yanıtlar:


5

Drupal 7 için, kod böyle bir şeydir, burada field_tagswidget türünde otomatik tamamlama içeren bir sınıflandırma alanıdır.

<?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')
    );
?>

pagekodunuzun sonunda ne yapıyor? benim gibi geçersiz php kodu dikişler?
FLY

Bu sadece bir yazım hatası gibi görünüyor. Güvenle görmezden gelebilirsin, inanıyorum.
BrianV

Yukarıdaki kodun $ form kısmı ile, formda göstermek için sınıflandırma alanı olsun. Otomatik tamamlama da çalışır. Ancak gönderilen değerleri bir düğümün sınıflandırma alanında nasıl saklayabilirim? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;benim için çalışmıyor. Sadece hata veriyor.
deinqwertz

0

Kelime kimliğini eklemeniz gerekir - bunu kodlayabilmeniz gerekir.

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

);

veya kelime kimliği 5 için

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

Test edilmedi, ancak bu işe yarayacak. Başkalarının burada bir gander var: http://drupal.org/node/854216


Bunun D7 için de çalıştığından emin misiniz? Çalıştıramadım. Taksonomi.module istisna verir
Srihitha Narra 15:11

hmm, evet çalışıyor, ama olması gerektiği gibi değil.
tecjam

1
Bu işe yaramaz. Drupal 7'nin taxonomy_autocomplete öğesi, bir alan adının bağımsız değişken olarak geçirilmesini gerektirir. Bu örnekte Drupal 6'nın sınıflandırma otomatik tamamlama sözdizimi kullanılmaktadır.
BrianV

0

Bunu kullandım ve otomatik tamamlama geri çağrıları var, ancak belirtilen sınıflandırma kelime için değil. Bunun yerine tüm kelimelerin sonuçlarını döndürdü

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

Bunun neden dürüst olacağından emin değilim.


Benzer şekilde denedim ve istisna aşağıda tECT olarak SELECT t.tid, t.name adı {taxonomy_term_data} t NEREDE (t.vid IN ()) VE t.name GİBİ verilir: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) SINIR 10 OFSET 0; Dizi ([: db_condition_placeholder_0] = &% '% imag%) ve mysql & # 039; \\ & # 039; yakınında bir istisna veriyor. LIMIT OFSET 0 & # 039;
Srihitha Narra

0

@tecjam Drupal 7 için neredeyse başardınız. Tek yapmanız gereken kelime kimliği yerine alan adını kullanmaktır.

Bunun gibi:

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

Alan_adı yerine alanınızın adını yazın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.