Como adicionar o campo de referência do termo de taxonomia em um formulário drupal personalizado

9

Um item de menu é definido drupal_get_formcomo função de retorno de chamada e retornando o formulário da função de retorno de chamada. Como posso adicionar um taxonomy_term_referencecampo a este formulário?

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

Não sei como adicionar o campo taxonomy_term_reference $form['mymodule_form']['tag']. Desejo que este campo seja um campo de texto com preenchimento automático de termos de vocabulário e que seja adicionado um novo termo quando o termo digitado não for encontrado

Srihitha Narra
fonte

Respostas:

5

Para o Drupal 7, o código é algo como isto, onde field_tagsé um campo de taxonomia no nó com o tipo de widget preenchimento automático.

<?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
fonte
o que está pagefazendo no final do seu código? costuras para o meu código php como inválido?
precisa
Isso parece ser apenas um erro de digitação. Você pode ignorá-lo com segurança, acredito.
BrianV
Com a parte $ form do código acima, recebo o campo taxonomia para aparecer no formulário. O preenchimento automático também funciona. Mas como armazeno os valores enviados no campo taxonomia de um nó? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;não funciona para mim. Apenas me dá erros.
25412 Deinqwertz
0

Você precisa incluir o ID do vocabulário - deve poder codificá-lo para que

$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 para id 5 do vocabulário

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

Não testado, mas isso deve funcionar. Caso contrário, dê uma olhada aqui: http://drupal.org/node/854216

tecjam
fonte
Você tem certeza de que isso funciona para o D7 também? Eu não consegui fazê-lo funcionar. Dá exceção no taxonomy.module
Srihitha Narra
hmm, sim, funciona, mas não exatamente da maneira que deveria.
tecjam
11
Isso não vai funcionar. O taxonomy_autocomplete do Drupal 7 exige que um nome de campo seja passado como argumento. Este exemplo usa a sintaxe de preenchimento automático de taxonomia do Drupal 6.
BrianV
0

Eu usei isso e obtive retornos de chamada de preenchimento automático funcionando, mas não para o vocabulário de taxonomia especificado. Em vez disso, retornou resultados de todos os vocabs

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

Não sei ao certo por que isso é para ser honesto.

tecjam
fonte
Tentei da mesma forma e, a seguir, a exceção é dada: SELECT t.tid AS tid, t.name AS name FROM {taxonomy_term_data} t WHERE (t.vid IN ()) AND t.name COMO: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) LIMITE 10 OFFSET 0; Matriz ([: db_condition_placeholder_0] = & gt;% imag%) e o mysql está dando exceção perto de & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra
0

@tecjam Para o Drupal 7, você quase conseguiu. Tudo o que você precisa fazer é usar o nome do campo em vez do ID do vocabulário.

Como isso:

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

Substitua field_name pelo nome do seu campo.

Germán Villacreces
fonte