web-dev-qa-db-fra.com

Comment ajouter un champ de référence de terme de taxonomie dans un formulaire personnalisé drupal

Un élément de menu est défini avec drupal_get_form comme fonction de rappel et renvoyant le formulaire à partir de la fonction de rappel. Comment puis-je ajouter taxonomy_term_reference champ vers ce formulaire?

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

Je ne sais pas comment ajouter le champ taxonomy_term_reference pour $form['mymodule_form']['tag']. Je veux que ce champ soit un champ de texte avec saisie automatique à partir d'un vocabulaire et qu'un nouveau terme soit ajouté lorsque le terme saisi n'est pas trouvé

9
Srihitha Narra

Pour Drupal 7, le code est quelque chose comme ça, où field_tags est un champ de taxonomie dans le nœud avec le type de widget à saisie semi-automatique.

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

Vous devez inclure l'ID de vocabulaire - vous devriez pouvoir le coder en dur afin

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

);

ou pour le vocabulaire 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 testé, mais cela devrait fonctionner. Sinon, jetez un œil ici: http://drupal.org/node/854216

0
tecjam

J'ai utilisé cela et j'ai obtenu des rappels de saisie semi-automatique qui fonctionnaient, mais pas pour le vocabulaire de taxonomie spécifié. Au lieu de cela, il a renvoyé les résultats de tous les vocabulaires

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

Je ne sais pas trop pourquoi c'est pour être honnête.

0
tecjam

@tecjam For Drupal 7, vous l'aviez presque. Tout ce que vous avez à faire est d'utiliser le nom du champ au lieu de l'ID de vocabulaire.

Comme ça:

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

Remplacez field_name par le nom de votre champ.

0
Germán Villacreces