3

データベースにカテゴリとサブカテゴリを保存しています。次のようにCHtmlドロップダウンでそれらを表示したい:

Patrent_cat
   sub_cat1
   sub_cat2
Parent_cat2
  ...

私のカテゴリテーブルはこのようなものです

id name parent_id

タプル自体が親の場合、parent_id は 0 です。

私はすでにカテゴリモデルでこれを試しました:

public function relations()
{
    return array(
                'getparent' => array(self::BELONGS_TO, 'Category', 'parent_id'),
                'childs' => array(self::HAS_MANY, 'Category', 'parent_id', 'order' => 'id ASC'),
    );
}

public function getCategoryTree() 
    {
        $subitems = array();
        if($this->childs) foreach($this->childs as $child) 
        {
            $subitems[] = $child->getListed();
        }
        $returnarray = array($this->id => $this->title);
        if($subitems != array()) 
            $returnarray = array_merge($returnarray, array('items' => $subitems));
        return $returnarray;
    }

そして私の見解では:

<?php 
         echo CHtml::dropDownList('category', 'id', 
                        Category::model()->CategoryTree,
                        array('empty' => '(Select a category'));
?>

しかし、空のドロップダウンが表示されます。オプション グループを含むドロップダウン リストにこのツリービューを表示するにはどうすればよいですか? (オプション グループは親カテゴリで、オプションは sub_categories です。

4

3 に答える 3

7

これを試して

echo $form->dropDownList($model,'id',CHtml::listData(SubCat::model()->findAll(),'id', 'name','relation_name.name'),array('prompt'=>'Choose'));

これにより、ドロップダウンに親とサブカテゴリが表示されます

于 2012-11-27T16:57:32.623 に答える
0

空のモデルを作成し、その子を取得しようとすると、Category::model()->CategoryTree空の結果が得られます。

モデル内の子カテゴリのリストを取得するメソッドを試してください:

public function getChildList() {
    $return = array();
    if ($this->childs !== null) {
        foreach ($this->childs as $child) {
            $return[$child->id] = "--".$child->title;
        }
    }
    return $return;
}

コントローラーのアクションで:

...
$categotyList = array();
$parentCategories = Category::model()->findAllByAttributes(array('parent_id'=>'0'));
foreach ($parentCategories as $category) {
    array_merge($categoryList, 
               array('$category->id' => '$category->name'), 
               $category->getChildList()
    );
}
...

そして見る:

echo CHtml::dropDownList('category', 'id', 
                        $categoryList,
                        array('empty' => '(Select a category'));

コードにエラーがないかチェックし、必要に応じて修正します。

于 2012-11-28T05:03:48.690 に答える