Hinzufügen eines Referenzfelds für Taxonomiebegriffe in einem benutzerdefinierten Drupal-Formular

9

Ein Menüpunkt wird drupal_get_formals Rückruffunktion definiert und das Formular von der Rückruffunktion zurückgegeben. Wie kann ich taxonomy_term_referencediesem Formular ein Feld hinzufügen ?

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

Ich bin nicht sicher, wie ich das Feld taxonomy_term_reference für hinzufügen soll $form['mymodule_form']['tag']. Ich möchte, dass dieses Feld ein Textfeld mit automatischer Vervollständigung aus einem Wortschatz ist und ein neuer Begriff hinzugefügt wird, wenn der eingegebene Begriff nicht gefunden wird

Srihitha Narra
quelle

Antworten:

5

Für Drupal 7 ist der Code ungefähr so: Hier field_tagsbefindet sich ein Taxonomiefeld im Knoten mit der automatischen Vervollständigung vom Widget-Typ.

<?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
quelle
Was pagemacht am Ende Ihres Codes? Nähte zu meinem wie ungültigen PHP-Code?
FLY
Das scheint nur ein Tippfehler zu sein. Sie können es sicher ignorieren, glaube ich.
BrianV
Mit dem $ -Form-Teil des obigen Codes wird das Taxonomiefeld im Formular angezeigt. Die automatische Vervollständigung funktioniert auch. Aber wie speichere ich die übermittelten Werte im Taxonomiefeld eines Knotens? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;funktioniert bei mir nicht Gibt mir nur Fehler.
Deinqwertz
0

Sie müssen die Vokabular-ID angeben - Sie sollten sie auch fest codieren können

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

);

oder für Vokabelnummer 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 ...").')
);

Nicht getestet, aber das sollte funktionieren. Sonst haben Sie einen Blick hier: http://drupal.org/node/854216

Tecjam
quelle
Sind Sie sicher, dass dies auch für D7 funktioniert? Ich konnte es nicht zum Laufen bringen. Es gibt Ausnahme in taxonomy.module
Srihitha Narra
hmm, ja es funktioniert, aber nicht genau so wie es sollte.
Tecjam
1
Das wird nicht funktionieren. Für taxonomy_autocomplete von Drupal 7 muss ein Feldname als Argument übergeben werden. In diesem Beispiel wird die Autocomplete-Syntax der Taxonomie von Drupal 6 verwendet.
BrianV
0

Ich habe dies verwendet und Autocomplete-Rückrufe ausgeführt, jedoch nicht für das angegebene Taxonomie-Vokabular. Stattdessen wurden Ergebnisse aus allen Vokabeln zurückgegeben

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

Ich bin mir nicht ganz sicher, warum das ehrlich ist.

Tecjam
quelle
Ich habe es ähnlich versucht und die folgende Ausnahme wird angegeben: SELECT t.tid AS tid, t.name AS name FROM {taxonomy_term_data} t WHERE (t.vid IN ()) UND t.name LIKE: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) LIMIT 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) und mysql geben eine Ausnahme in der Nähe von & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra
0

@tecjam Für Drupal 7 hatten Sie es fast. Sie müssen lediglich den Feldnamen anstelle der Vokabular-ID verwenden.

So was:

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

Ersetzen Sie Feldname durch den Namen Ihres Feldes.

Germán Villacreces
quelle