プログラムで特定の分類法を入力する選択ボックスがあります。分類語彙を使用する場合、フォームの特定の選択ボックスにどのように入力しますか。私のフォームはfrom APIを使用して生成され、コンテンツタイプを使用していません。たとえば、国と呼ばれる語彙があるとしたら。現在このように構成されている選択ボックスがあります
$form['status']['currentstatus'] = array (
'#values' => array(t('red'), ('green'))
);
$form['status']['currentStatusList'] = array (
'#title' => 'current status',
'#type' => 'select',
'#options' => $form['status']['currentstatus']['#values']
);
単に値を追加する代わりに、語彙を渡したいと思います。
語彙データを取得するように管理していますが、用語の前にゼロが置かれています。
私が箱のために考え出したコードはあなたのものと同じです。ボキャブラリーのIDも渡します。助けてくれてありがとう
_taxonomy_get_tree
_ 関数を使用して用語のすべての子を取得し、その上でforeach()
を実行できます。
例:
_function mymodule_blah($vocabulary) {
$terms = taxonomy_get_tree($vocabulary);
foreach ($terms as $data) {
$output[$data->tid] = $data->name;
}
return $output;
}
_
これは、用語IDでキー付けされた配列を返す必要がありますが、_$data['tid']
_と表示されている場所に好きなものを配置して、別のキーを挿入することもできます。
出力例:
_[1] => ['My First Term']
[2] => ['My Second Term']
...
[15] => ['My Fifteenth Term']
_
次に、これを選択ボックスの_'#options'
_に渡します。
編集:
ヘルパー関数に渡されるボキャブラリーIDが必要であることを言及するのを忘れていました。
編集2(完全な実装):
_function mymodule_myform($form) {
//The rest of your form stuff is in here
$form['status']['currentStatusList'] = array (
'#title' => 'current status',
'#type' => 'select',
'#options' => mymodule_selectbox_contents(PUT THE NUMERIC VOCABULARY ID HERE) ,
);
//The rest of your form stuff is in here
}
function mymodule_selectbox_contents($vid) {
$terms = taxonomy_get_tree($vid);
foreach ($terms as $data) {
$output[$data->tid] = $data->name;
}
return $output;
}
_
チャパブの答えを見てください。より動的にしたい場合は、 taxonomy_vocabulary_machine_name_load を使用して語彙IDをロードできます。
Chapabuの実装への追加は次のとおりです。
function mymodule_myform($form) {
//The rest of your form stuff is in here
$voc = taxonomy_vocabulary_machine_name_load(your_machine_name);
$form['status']['currentStatusList'] = array (
'#title' => 'current status',
'#type' => 'select',
'#options' => mymodule_selectbox_contents($voc->vid),
);
//The rest of your form stuff is in here
}
function mymodule_selectbox_contents($vid) {
$terms = taxonomy_get_tree($vid);
foreach ($terms as $data) {
$output[$data->tid] = $data->name;
}
return $output;
}