Заполните поле выбора словарем


У меня есть поле выбора, которое я хочу заполнить определенной таксономией программно. Если бы я должен был использовать словарь таксономии, как бы я заполнил конкретное поле выбора в своей форме. Моя форма создается с использованием 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']    
);

Вместо того, чтобы просто добавлять значения, я хотел бы передать словарный запас.

Я постарался получить словарные данные , но перед терминами ставится ноль.

enter image description here

Код, который я вычислил для коробки, такой же, как у вас. Я даже передаю удостоверение личности для словарного запаса. Я поиграю с ним, спасибо за вашу помощь

Author: Alexander, 2012-04-02

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;
}
 6
Author: Chapabu, 2012-04-02 23:34:30

Смотрите Ответ Чапабу; если вы хотите сделать его более динамичным, вы можете использовать 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;
  }
 1
Author: Patrick Scheffer, 2015-07-09 09:50:48