Come aggiungere il campo di riferimento del termine tassonomia in un modulo drupal personalizzato


9

Una voce di menu è definita drupal_get_formcome funzione di richiamata e restituisce il modulo dalla funzione di richiamata. Come posso aggiungere un taxonomy_term_referencecampo a questo modulo?

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

Non sono sicuro di come aggiungere il campo taxonomy_term_reference per $form['mymodule_form']['tag']. Voglio che questo campo sia un campo di testo con completamento automatico da termini del vocabolario e un nuovo termine da aggiungere quando il termine inserito non viene trovato

Risposte:


5

Per Drupal 7, il codice è simile a questo, dove si field_tagstrova un campo di tassonomia nel nodo con il completamento automatico del tipo di widget.

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

cosa sta pagefacendo alla fine del tuo codice? cuciture al mio codice php come non valido?
VOLO il

Questo sembra essere solo un errore di battitura. Puoi tranquillamente ignorarlo, credo.
BrianV,

Con $ form parte del codice sopra, ottengo il campo di tassonomia da mostrare nel modulo. Anche il completamento automatico funziona. Ma come posso memorizzare i valori inviati nel campo della tassonomia di un nodo? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;non funziona per me. Mi dà solo errori.
Deinqwertz,

0

Devi includere l'id del vocabolario - dovresti essere in grado di codificarlo anche in questo modo

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

);

o per ID vocabolario 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 ...").')
);

Non testato, ma dovrebbe funzionare. Altrimenti fatti qui: http://drupal.org/node/854216


Sei sicuro che funzioni anche per D7? Non riuscivo a farlo funzionare. Dà un'eccezione in taxonomy.module
Srihitha Narra,

hmm, sì, funziona, ma non esattamente come dovrebbe.
tecjam,

1
Questo non funzionerà. Taxonomy_autocomplete di Drupal 7 richiede che un nome di campo venga passato come argomento. In questo esempio viene utilizzata la sintassi di completamento automatico della tassonomia di Drupal 6.
BrianV,

0

Ho usato questo e ho ottenuto i callback di completamento automatico funzionanti, tuttavia non per il vocabolario tassonomia specificato. Invece ha restituito risultati da tutti i vocaboli

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

Non sono del tutto sicuro del perché sia ​​sincero.


Ho provato in modo simile e sotto l'eccezione viene dato SELECT t.tid AS tid, t.name AS nome DA {taxonomy_term_data} t DOVE (t.vid IN ()) E t.name COME: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) LIMIT 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) e mysql sta dando un'eccezione vicino a & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra,

0

@tecjam Per Drupal 7, ce l'hai quasi fatta. Tutto quello che devi fare è utilizzare il nome del campo anziché l'id del vocabolario.

Come questo:

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

Sostituisci field_name con il nome del tuo campo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.