zoukankan      html  css  js  c++  java
  • Yii CTreeView用法举例

    -- 表的结构 `coverage`
    --
    CREATE TABLE IF NOT EXISTS `coverage` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `pid` int(10) unsigned DEFAULT NULL,
    `coverageName` varchar(100) DEFAULT NULL,
    `coverageDesc` varchar(200) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `pid` (`pid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;
    --
    -- 转存表中的数据 `coverage`
    --
    INSERT INTO `coverage` (`id`, `pid`, `coverageName`, `coverageDesc`) VALUES
    (16, NULL, '类别', ''),
    (17, 16, '类别一', ''),
    (18, NULL, '分类', ''),
    (19, 17, '类别二', '');
    --
    -- 限制表 `coverage`
    --
    ALTER TABLE `coverage`
    ADD CONSTRAINT `coverage_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `coverage` (`id`) ON DELETE CASCADE;

     

    方法一,直接写死在view文件里

    <?php
    $this->widget('system.web.widgets.CTreeView', array(
        'animated' => 'normal',
        'data' => array(
            array(
                'text' => '<span>AAAA</span>',
                'children' => array(array(
                        'text' => '<a href="' . $this->createUrl('/site/index') . '">BBBB</a>',
                        'text' => '<a href="' . $this->createUrl('/site/page') . '">BBB</a>',
                        ), ),
                ),
            array(
                'expanded' => false,
                'text' => '<span>CCCC</span>',
                'children' => array(
                    array('text' => 'CCC'),
                    array('text' => 'CCC', ),
                    ),
                ),
            ),
        ));
    ?>

    优点:简单明了,缺点:新增或修改需要修改文件

    方法2:ajax动态加载

    在view中写入

    <?php
    $this->widget('CTreeView', array(
        'persist' => 'cookie',
        'animated' => 'fast',
        'url' => array('ajaxFillTree'),
        'htmlOptions' => array('id' => 'coverageTree', 'class' => 'coverageTree')));
    ?>

    在Controller.php中写入

    public function actionAjaxFillTree()
    {
    if(!Yii::app()->request->isAjaxRequest)
    {
    exit();
    }
    $parentId=null;
    if(isset($_GET['root']) and $_GET['root'] != 'source')
    {
    $parentId=(int) $_GET['root'];
    }
    $req=Yii::app()->db->createCommand(
    "SELECT m1.id, m1.name AS text, m2.id IS NOT NULL AS hasChildren "
    ."FROM coverage AS m1 LEFT JOIN coverage AS m2 ON m1.id=m2.pid "
    ."WHERE m1.pid <=> $parentId "
    ."GROUP BY m1.id ORDER BY m1.name ASC"
    );
    //<=>叫做安全等于,至于什么情况下使用<=>有知道的告诉哈
    $children=$req->queryAll();

    echo str_replace('"hasChildren":"0"', '"hasChildren":false', CTreeView::saveDataAsJson($children)
            );

    //AAA:如果要在节点处增加链接,在$children=$req->queryAll()后面增加下面的
     $treedata=array();
    foreach ($children as $child)
    {
    $options=array('href'=>'#','id'=>$child['id'],'class'=>'treenode');

                   /*BBB:如果是只在叶子节点上增加链接
    $child['text'] = ($child['hasChildren'] == true ? $child['text'] : CHtml::openTag('a', $options).$child['text'].CHtml::closeTag('a')."\n");

                 *--BBB

                  */

                 /*CCC:如果父节点也要链接

                $nodeText = CHtml::openTag('a', $options);
                       $nodeText .= $child['text'];
                       $nodeText .= CHtml::closeTag('a') . "\n";
                        $child['text'] = $nodeText;

               *--CCC

                */
    $treedata[]=$child;
    }

     

    //AAA:修改echo部分
    echo str_replace(
    '"hasChildren":"0"','"hasChildren":false',CTreeView::saveDataAsJson($treedata)
    );


    exit();
    }

    至于要链接的动作可新建表记录相应节点对应的动作;

    扩展:可加入权限控制,只显示用户用户有权限的节点。

  • 相关阅读:
    Rabbit简单测试实例
    RabbitMQ-2 工作队列
    RabbitMQ-1 Helloword
    utmp
    导入wordpress数据库到mysql报错
    Tengine 反向代理状态检测
    阿里云服务器挖矿wipefs处理
    JbossMiner 挖矿蠕虫分析 (转载)
    centos6+nginx+php+mysql+memcached+wordpress
    php安装ZendGuardLoader扩展问题
  • 原文地址:https://www.cnblogs.com/xiongsd/p/3054818.html
Copyright © 2011-2022 走看看