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

9

Un élément de menu est défini avec drupal_get_formcomme fonction de rappel et renvoyant le formulaire à partir de la fonction de rappel. Comment puis-je ajouter un taxonomy_term_referencechamp à 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é

Srihitha Narra
la source

Réponses:

5

Pour Drupal 7, le code est quelque chose comme ça, où se field_tagstrouve 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')
    );
?>
jibran
la source
que pagefait-on à la fin de votre code? coutures à mon code php invalide comme?
FLY
Cela semble être juste une faute de frappe. Vous pouvez l'ignorer en toute sécurité, je crois.
BrianV
Avec la partie $ form du code ci-dessus, j'obtiens le champ de taxonomie s'afficher dans le formulaire. La saisie semi-automatique fonctionne également. Mais comment stocker les valeurs soumises dans le champ de taxonomie d'un nœud? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;ne fonctionne pas pour moi. Me donne juste des erreurs.
deinqwertz
0

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

tecjam
la source
Êtes-vous sûr que cela fonctionne également pour D7? Je ne pouvais pas le faire fonctionner. Il donne une exception dans taxonomy.module
Srihitha Narra
hmm, oui ça marche, mais pas exactement comme il faut.
tecjam
1
Ça ne marchera pas. La taxonomie_autocomplete de Drupal 7 nécessite un nom de champ à passer en argument. Cet exemple utilise la syntaxe de saisie semi-automatique de taxonomie de Drupal 6.
BrianV
0

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.

tecjam
la source
J'ai essayé de la même manière et l'exception ci-dessous est donnée SELECT t.tid AS tid, t.name AS name FROM {taxonomy_term_data} t WHERE (t.vid IN ()) AND t.name LIKE: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) LIMITE 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) et mysql donne une exception près de & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra
0

@tecjam Pour Drupal 7, vous l'avez presque eu. 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.

Germán Villacreces
la source