Заполните поле выбора словарем
У меня есть поле выбора, которое я хочу заполнить определенной таксономией программно. Если бы я должен был использовать словарь таксономии, как бы я заполнил конкретное поле выбора в своей форме. Моя форма создается с использованием api from, а не с использованием типов контента. Если бы, например, у меня был словарь под названием "Страны". У меня есть поле выбора, которое в настоящее время настроено следующим образом
$form['status']['currentstatus'] = array (
'#values' => array(t('red'), ('green'))
);
$form['status']['currentStatusList'] = array (
'#title' => 'current status',
'#type' => 'select',
'#options' => $form['status']['currentstatus']['#values']
);
Вместо того, чтобы просто добавлять значения, я хотел бы передать словарный запас.
Я постарался получить словарные данные , но перед терминами ставится ноль.
Код, который я вычислил для коробки, такой же, как у вас. Я даже передаю удостоверение личности для словарного запаса. Я поиграю с ним, спасибо за вашу помощь
2 answers
Вы должны быть в состоянии использовать taxonomy_get_tree
функция, чтобы получить все дочерние элементы термина, а затем просто запустите foreach()
для этого.
Пример:
function mymodule_blah($vocabulary) {
$terms = taxonomy_get_tree($vocabulary);
foreach ($terms as $data) {
$output[$data->tid] = $data->name;
}
return $output;
}
Это должно возвращать массив с ключом по идентификатору термина, хотя вы можете поместить все, что хотите, туда, где написано $data['tid']
, чтобы вставить другой ключ.
Пример вывода:
[1] => ['My First Term']
[2] => ['My Second Term']
...
[15] => ['My Fifteenth Term']
Затем передайте это своему '#options'
в поле выбора.
ИЗМЕНИТЬ:
Забыл упомянуть, что вспомогательной функции потребуется идентификатор словаря, переданный ему, должен был быть добавлен в пояснение просто для полноты.
ПРАВКА 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 для загрузки идентификатора словаря.
Вот дополнение к реализации 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;
}