Làm thế nào để thêm trường tham chiếu thuật ngữ phân loại trong một hình thức drupal tùy chỉnh


9

Một mục menu được định nghĩa với drupal_get_formchức năng gọi lại và trả về mẫu từ chức năng gọi lại. Làm thế nào tôi có thể thêm taxonomy_term_referencetrường vào mẫu này?

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

Tôi không chắc chắn làm thế nào để thêm trường taxonomy_term numference cho $form['mymodule_form']['tag']. Tôi muốn trường này là trường văn bản tự động hoàn thành từ thuật ngữ từ vựng và thuật ngữ mới sẽ được thêm khi không tìm thấy thuật ngữ đã nhập

Câu trả lời:


5

Đối với Drupal 7, mã là một cái gì đó giống như thế này, trong đó field_tagsmột trường phân loại trong nút có loại tự động hoàn thành.

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

những gì đang pagelàm ở cuối mã của bạn? đường nối đến mã php không hợp lệ của tôi?
FLY

Điều đó dường như chỉ là một lỗi đánh máy. Bạn có thể yên tâm bỏ qua nó, tôi tin.
BrianV

Với phần $ form của mã ở trên, tôi có được trường phân loại để hiển thị trong biểu mẫu. Tự động hoàn thành cũng hoạt động. Nhưng làm cách nào để lưu trữ các giá trị được gửi trong trường phân loại của một nút? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;không làm việc cho tôi. Chỉ cần cho tôi lỗi.
deinqwertz

0

Bạn cần bao gồm id từ vựng - bạn sẽ có thể mã hóa nó để

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

);

hoặc cho 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 ...").')
);

Không được thử nghiệm, nhưng điều đó nên làm việc. Khác có một người thích ở đây: http://drupal.org/node/854216


Bạn có chắc chắn điều này cũng hoạt động cho D7? Tôi không thể làm cho nó hoạt động. Nó đưa ra ngoại lệ trong taxonomy.module
Srihitha Narra

hmm, vâng, nó hoạt động, nhưng không chính xác theo cách nó nên
tecjam

1
Điều này sẽ không làm việc. Taxonomy_autocomplete của Drupal 7 yêu cầu một tên trường được thông qua làm đối số. Ví dụ này sử dụng cú pháp tự động hoàn thành phân loại của Drupal 6.
BrianV

0

Tôi đã sử dụng điều này và tôi đã nhận được các cuộc gọi lại tự động hoàn thành, nhưng không phải cho các vocab phân loại được chỉ định. Thay vào đó, nó trả về kết quả từ tất cả các vocab

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

Tôi không chắc tại sao điều đó phải trung thực.


Tôi đã thử tương tự và ngoại lệ bên dưới được đưa ra CHỌN T.tid AS tid, t.name AS tên TỪ {taxonomy_term_data} t WHERE (t.vid IN ()) 039;) GIỚI HẠN 10 OFFSET 0; Mảng ([: db_condition_placeholder_0] = & gt;% fant%) và mysql đang đưa ra ngoại lệ gần & # 039; \\ & # 039;) GIỚI HẠN OFFSET 0 & # 039;
Srihitha Narra

0

@tecjam Đối với Drupal 7, bạn gần như đã có nó. Tất cả bạn phải làm là sử dụng tên trường thay vì id vocab.

Như thế này:

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

Thay thế tên trường bằng tên của trường của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.