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

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

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


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.