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();
    }

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

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

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/xiongsd/p/3054818.html
Copyright © 2011-2022 走看看