1
    foreach($product_categories as $product_category)
    {
        $options = array();
        foreach($series_categories as $series_category)
        {
            if($product_category['prod_cate_idx'] == $series_category['prod_cate_idx'])
            {
                $options[$series_category['series_cate_idx']] = $series_category['series_cate_name'];
            }
        }
        if(count($options) > 0)
        {
            $series_category_dropdown[$product_category['prod_cate_name']] = $options;
        }
        else
        {
            //problem here. how to make a empty optgroup?
            $series_category_dropdown[$product_category['prod_cate_name']] = array('', NULL);
        }
        empty($options);
    }

ここには 2 つのカテゴリがあります。1 つは製品カテゴリで、もう 1 つは製品カテゴリの 1 つに属するシリーズ カテゴリです。製品カテゴリには、シリーズ カテゴリがある場合とない場合があります。

次のようなドロップダウン メニューを作成する必要があります。

    • a
    • a
    • a
    • a
  • B
    • b
    • b
    • b
  • D
    • e
    • e
    • e

指定されたコードは完全に機能していますが、空の optgroup を処理する方法がわかりません:S

C&Dのような空のoptgroupを生成する方法を見つけるためにたくさんのグーグル検索をしましたが、解決策が見つからないか、誰もまだ試していません:(誰かがそれを実現するために多次元配列を生成する方法の手がかりを持っていますか?ありがとう.

4

1 に答える 1

1

CI のコア コードを見ると、それは不可能です。ただし、コア ファイルを編集することで非常に簡単に修正できます。ここでコア ファイルを編集することで「逃げる」ことができると思う理由は、ドロップダウン メニューで他の何かに影響を与えないからです。

  1. 案内する/system/helpers/form_helper.php
  2. form_dropdown関数を見つける
  3. ループif(empty($optgroup_val)) continue;の後に追加optgroup

foreachループは次のようになります。

foreach ($val as $optgroup_key => $optgroup_val)
{
    // add this line
    if(empty($optgroup_val)) continue;

    $sel = (in_array($optgroup_key, $selected)) ? ' selected="selected"' : '';

    $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
}

上で述べたように、通常、コア ファイルを編集することはお勧めしませんが、代わりに CI ヘルパー クラスを拡張することをお勧めします。CI も同様です (もう少し手間がかかります)。

ヘルパーを「拡張」するには、 application/helpers/ フォルダーに既存のヘルパーと同じ名前のファイルを作成しますが、先頭に MY_ を付けます (このアイテムは構成可能です。以下を参照してください)。

参照:ヘルパー関数の「拡張」ヘルパー

于 2013-10-13T17:55:59.953 に答える