2012-11-27 94 views
3

我有保存在數據庫中的類別和子類別。我想向他們展示在了CHtml下拉列表如下:Yii在數據庫的下拉列表中顯示treeview

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')); 
?> 

,但它給了我一個空的下拉菜單。如何在帶選項組的下拉列表中顯示此樹形視圖? (該選項組是父類和選項 - 行業標準。

+1

的'getCategoryTree'功能將無法使用初始化'$ this'當你用'static'模型'$ this'調用它會'null' –

回答

7

試試這個

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

這將顯示家長和子類別的下拉

+0

它的工作原理工作,但它只是顯示所有類,它不開這應該工作的父母和子類別 –

+2

,只是'SubCat'將是'Category'本身和'relation_name'將是'getparent' –

+0

是對不起我的壞!它應該按預期工作。 – WebDevPT

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')); 

檢查錯誤的代碼,你需要進行修改。

0
public function getDropdownCategories() 
    { 
     $array = self::find()->select(['id', 'parent_id', 'name'])->asArray()->all(); 
     $array = self::buildTree($array); 
     $array = ArrayHelper::map($array, 'id', 'name'); 
     return $array; 
    } 

private function buildTree($array, $parentId = null, $preWord = '') 
    { 
     if(!empty($preWord)) 
      $preWord.='-'; 

     $tmpArray = []; 
     foreach ($array as $element) { 
      if ($element['parent_id'] == $parentId) { 
       $tmpArray[] = ['id' => $element['id'], 'name' => $preWord.$element['name']]; 
       $tmp = self::buildTree($array, $element['id'], '-'); 
       if(!empty($tmp) && is_array($tmp)) { 
        foreach ($tmp as $item) { 
         $tmpArray[] = ['id' => $item['id'], 'name' => $item['name']]; 
        } 
       } 
      } 
     } 
     return $tmpArray; 
    } 
相關問題