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.