メニュー項目は、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;
}
$form['mymodule_form']['tag']
のtaxonomy_term_referenceフィールドを追加する方法がわかりません。このフィールドは、語彙用語からのオートコンプリートと、入力した用語が見つからない場合に追加される新しい用語を含むテキストフィールドにしたい
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')
);
?>
あなたは語彙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 ...").')
);
または語彙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
私はこれを使用して、オートコンプリートコールバックを機能させましたが、指定された分類法の語彙では機能しませんでした。代わりに、すべての語彙から結果を返しました
$element['test'] = array(
'#type' => 'textfield',
'#default_value' => isset($items[$delta]['test']) ? $items[$delta]['test'] : NULL,
'#maxlength' => 100,
'#autocomplete_path' => 'taxonomy/autocomplete/37',
);
それが正直である理由がよくわかりません。
@tecjam Drupal 7の場合、ほとんど問題ありません。必要なことは、語彙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をフィールドの名前に置き換えます。