Як додати поле посилання терміна таксономії у користувацькій друпальній формі


9

Пункт меню визначається drupal_get_formяк функція зворотного дзвінка та повернення форми з функції зворотного дзвінка. Як я можу додати taxonomy_term_referenceполе до цієї форми?

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

Я не впевнений, як додати поле taxonomy_term_reference для $form['mymodule_form']['tag']. Я хочу, щоб це поле було текстовим полем із автоматичним заповненням термінів лексики та додаванням нового терміна, коли введений термін не знайдений

Відповіді:


5

Для Drupal 7 код є приблизно подібним, де field_tagsє поле таксономії у вузлі з автозаповненням віджетів.

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

що робиться pageв кінці коду? шви до мого недійсного PHP-коду?
ЛІТИ

Здається, це просто помилка друку. Ви можете сміливо ігнорувати це, я вважаю.
BrianV

З частиною коду $ form, наведеним вище, я отримую поле таксономії для відображення у формі. Автозавершення також працює. Але як я зберігаю подані значення у полі таксономії вузла? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;не працює для мене. Просто дає мені помилки.
deinqwertz

0

Вам потрібно включити ідентифікатор словника - ви також зможете його жорстко кодувати

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

);

або для vocab id 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 ...").')
);

Не перевірено, але це має працювати. Тут ще є ґендер: http://drupal.org/node/854216


Ви впевнені, що це працює і для D7? Я не міг змусити його працювати. Це дає виняток у таксономії.модуль
Srihitha Narra

хм, так, це працює, але не зовсім так, як слід.
tecjam

1
Це не спрацює. Таксономія_автокомплексу Drupal 7 вимагає введення аргументу імені поля. У цьому прикладі використовується синтаксис автозаповнення таксономії Drupal 6.
BrianV

0

Я використав це і отримав автоматичне заповнення зворотних викликів, однак не для вказаної таксономії vocab. Натомість він повертав результати всіх вокабів

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

Я не зовсім впевнений, чому це чесно.


Я спробував аналогічно, і нижче виняток дано SELECT t.tid AS tid, t.name AS ім'я ВІД {taxonomy_term_data} t WHERE (t.vid IN ()) І t.name LIKE: db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) ОБМЕЖЕННЯ 10 OFFSET 0; Array ([: db_condition_placeholder_0] = & gt;% imag%) та mysql дає виняток біля & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
Srihitha Narra

0

@tecjam Для Drupal 7 у вас це майже було. Все, що вам потрібно зробити - це використовувати ім'я поля замість ідентифікатора vocab.

Подобається це:

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

Замініть ім'я поля_іменем вашого поля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.