사용자 정의 drupal 양식에 분류 용어 참조 필드를 추가하는 방법


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 코드와 같은 이음새가 있습니까?
FLY

오타 일뿐입니다. 당신은 안전하게 무시할 수 있다고 믿습니다.
BrianV

위 코드의 $ form 부분을 사용하면 분류 필드가 양식에 표시됩니다. 자동 완성도 작동합니다. 그러나 제출 된 값을 노드의 분류 필드에 어떻게 저장합니까? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;나를 위해 작동하지 않습니다. 나에게 오류를 줘.
deinqwertz

0

어휘 ID를 포함해야합니다. 어휘 ID를 하드 코딩 할 수 있어야합니다.

$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에서도 작동합니까? 나는 그것을 작동시킬 수 없었다. 그것은 taxonomy.module에서 예외를 제공합니다
Srihitha Narra

흠, 그래도 작동하지만 정확히 해야하는 방식은 아닙니다.
tecjam

1
작동하지 않습니다. Drupal 7의 taxonomy_autocomplete에는 필드 이름을 인수로 전달해야합니다. 이 예는 Drupal 6의 분류 자동 완성 구문을 사용합니다.
BrianV

0

나는 이것을 사용했고 자동 분류 콜백이 작동했지만 지정된 분류 체계가 아닙니다. 대신 모든 어휘에서 결과를 반환했습니다.

  $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 FROM {taxonomy_term_data} t WHERE (t.vid IN ()) 및 t.name LIKE : db_condition_placeholder_0 ESCAPE & # 039; \\ & # 039;) 제한 10 오프셋 0; 배열 ([: db_condition_placeholder_0] = & gt; % imag %)이고 mysql이 & # 039; \\ & # 039; 근처에서 예외를 발생시키고 있습니다. LIMIT OFFSET 0 & # 039;
Srihitha Narra

0

@tecjam Drupal 7의 경우 거의 다 왔습니다. vocab id 대신 필드 이름 만 사용하면됩니다.

이처럼 :

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

field_name을 필드 이름으로 바꾸십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.