4

私はYiiのネストされたセットの動作を使用しています。これは、ここに示すようにカテゴリをネストしたままにするのに役立ちます(タイトル行はロシア語であることに注意してください)。ここに画像の説明を入力してください

そして、私がやりたいのは、Bootstrapのネストされたメニューを作成することだけです。これは次のようになります。

    $criteria = new CDbCriteria;
    $criteria->order = 'root, lft';
    $categories = Category::model()->findAll($criteria);
    foreach($categories as $i => $category) {
      $items[$i]['label'] = $category->title;
      $items[$i]['url'] = $category->url;
      $items[$i]['active'] = false;
      $items[$i]['items'] = array(
        array('label'=>'123', 'url'=>'#'),
        array('label'=>'123', 'url'=>'#'),
        array('label'=>'123', 'url'=>'#', 'items'=>array(
            array('label'=>'1234', 'url'=>'#'),
            array('label'=>'1234', 'url'=>'#'),
            array('label'=>'1234', 'url'=>'#', 'items'=>array(
                array('label'=>'1234', 'url'=>'#'),
                array('label'=>'1234', 'url'=>'#'),
                array('label'=>'1234', 'url'=>'#'),
            )),
        )),
    ); 
}
$this->widget('bootstrap.widgets.TbMenu', array(
    'type'=>'pills',
    'stacked'=>false, // whether this is a stacked menu
    'items'=>$items
)); 

これを実行する方法がわかりません。ところで、このトピックを読んだだけで、この関数を実際に問題に適用する方法がわかりません。助けに感謝します。

4

3 に答える 3

1

これは、私がjsonオブジェクトとしてフォーマットするために使用する関数です。これを変更して、php配列を生成できます。

protected function formatJstree(){
        $categories = $this->descendants()->findAll();
        $level=0;
        $parent = 0;
        $data = array();
        foreach( $categories as $n => $category )
        {
            $node = array(
                'data'=> "{$category->title}",
                'attr'=>array('id'=>"category_id_{$category->category_id}")
            );
            if($category->level == $level){
                $data[$parent]["children"][] = $node;
            }
            else if($level != 0 && $category->level > $level){
                if(!isset($data[$n]["children"])){
                    $data[$n]["children"] = array();
                }
                $data[$parent]["children"][] = $node;
            }
            else
            {
                $data[] = $node;
                $parent = $n;
            }
            $level=$category->level;

        }
        return $data;

    }
于 2012-10-29T18:58:05.280 に答える
1

最後に、私自身の再帰的ソリューション(複数のルートで機能します):

    public function getTreeRecursive() {
    $criteria = new CDbCriteria;
    $criteria->order = 'root, lft';
    $criteria->condition = 'level = 1';
    $categories = Category::model()->findAll($criteria);

    foreach($categories as $n => $category) {
        $category_r = array(
            'label'=>$category->title,
            'url'=>'#',
            'level'=>$category->level,
        );              
        $this->category_tree[$n] = $category_r;

        $children = $category->children()->findAll();
        if($children)
            $this->category_tree[$n]['items'] = $this->getChildren($children);
    }
    return $this->category_tree;
}
private function getChildren($children) {
    $result = array();
    foreach($children as $i => $child) {
        $category_r = array(
            'label'=>$child->title,
            'url'=>'#',
        );          
        $result[$i] = $category_r;
        $new_children = $child->children()->findAll();
        if($new_children) {
            $result[$i]['items'] = $this->getChildren($new_children);
        }           
    }
    return $result_items = $result;
}
于 2012-10-30T22:08:08.007 に答える
0

単純な作業だけでなく、PHPとYii(MVCフレームワーク)を使用してマルチレベルのカテゴリシステムを作成します。1.モデルで関数を作成する

`

function getRootCategory($cur_cat='') {
$sql='select id, course_name, parent_id from course where parent_id="0" and status=0'; 
$command=Yii::app()->db->createCommand($sql);
$return =$command->queryAll();
foreach($return as $rootCat){
if ($rootCat['id']==$cur_cat){
$test= 'selected=selected'; 
}else{
$test='';
 }
$id=$rootCat['id'];
echo "".$rootCat['course_name'].'';
$this->sub_cat($rootCat['id'] , '', $cur_cat ); 
}
 }

   function sub_cat($parentID=0, $space='',$cur_cat ) {
$sql="select id, course_name, parent_id from course where parent_id='$parentID' and status=0";
$command=Yii::app()->db->createCommand($sql);
$return =$command->queryAll();
$count=count($return);
if($parentID==0){ $space=''; }else{ $space .=" - "; }

if($count > 0){
foreach($return as $subcat){
if ($subcat['id']==$cur_cat){$test='selected=selected';}else{$test='';}
$ids=$subcat['id'];
echo "".$space.$subcat['course_name'].'';
$this->sub_cat($subcat['id'],$space, $cur_cat ); 
}
 } 
}

`ここで、view/file.phpにこのコードを作成します

<?php
echo ‘&lt;select id=”parent_id” class=”select” name=”Course[parent_id]” >’;
echo “&lt;option value=’0′  >–Select Exam–&lt;/option>”;
echo Course::model()->getRootCategory($model->parent_id);
// ($model->parent_id) means selected text box
echo ‘&lt;/select>’; ?>

詳細はこのURLをクリックしてください http://it-expert.in/create-multi-level-category-using-recursive-function-in-yii/にアクセスしてください

于 2018-03-31T07:50:02.420 に答える