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.