web-dev-qa-db-ja.com

選択ボックスに語彙を入力します

プログラムで特定の分類法を入力する選択ボックスがあります。分類語彙を使用する場合、フォームの特定の選択ボックスにどのように入力しますか。私のフォームは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']    
);

単に値を追加する代わりに、語彙を渡したいと思います。

語彙データを取得するように管理していますが、用語の前にゼロが置かれています。

enter image description here

私が箱のために考え出したコードはあなたのものと同じです。ボキャブラリーのIDも渡します。助けてくれてありがとう

4
Alexander

_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;
}
_
6
Chapabu

チャパブの答えを見てください。より動的にしたい場合は、 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;
  }
1