用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8215|回复: 16
收起左侧

[已解决] 关于视图调用,我的优化方案

[复制链接]
发表于 2008-3-30 11:45:07 | 显示全部楼层 |阅读模式
http://codeigniter.org.cn/forums/thread-376-1-1.html
这个前几天讨论过,几种方案我觉得都不很好
昨天爬了一下rails和ci的代码,实现了一下类似rails的layout输出
实际就一小段代码

MY_Controller中增加一个render方法

    function _render($viewName , $data = false , $layout = false){
                //echo "this is ni render<br>";
                //处理当前action调用视图的内容
                $content = $this->load->view($viewName , $data , true);
                //当前action视图内容在layout里显示
                $data = array("ci_action_content"=> $content);
                if(!$layout){
                        $layout = "default";
                }
                //得到layout视图
                $this->load->view("layout/$layout" , $data);
        }

添加一个layout
views/layout/default.php
<html>
        <head>
                <title>default layout</title>
        </head>
        <body>
                <div>head info</div>
                <div>
                        <?php echo $ci_action_content ?>
                </div>
                <div>bottom info</div>
        </body>
</html>


action中使用_render生成
        function test(){
                $data = array("content"=>"action content");
                $this->_render("test" , $data);
        }
发表于 2008-3-30 22:15:00 | 显示全部楼层
这个效果直接用view就可以达到了啊。。。
 楼主| 发表于 2008-3-31 09:41:22 | 显示全部楼层

回复 2楼 的帖子

哦?
怎么弄啊?
给个例子我
发表于 2008-3-31 14:40:35 | 显示全部楼层
最简单的方式就是用一个header一个footer夹住content。

不然的话已经有人做过 layout library 了: http://codeigniter.com/wiki/layout_library/
发表于 2008-3-31 14:48:43 | 显示全部楼层
是有点多余,不过思路很欣赏。。。。:)
 楼主| 发表于 2008-4-1 13:41:47 | 显示全部楼层
有library
超级酷
发表于 2008-7-19 20:46:30 | 显示全部楼层
lib酷......
发表于 2008-7-26 19:52:52 | 显示全部楼层
还是加入smary这个强大的模版吧,不管什么layout,plugins,modifier,source都可以。

我看了fleaPHP,它的webControls其实就是一个smarty,实现了不错的view。
发表于 2008-7-27 02:14:28 | 显示全部楼层
smarty 好是好,可是不是每个人都喜欢,呵呵~
发表于 2008-7-27 18:41:01 | 显示全部楼层
一个优秀的框架,除了有一个完整的功能外,还要提供方便易用的接口,
CI是一个不错的框架,它具备了一个基本的建站功能,可是,在细节功能上,还不能做到精.
特别在view上,不可能和完成的smarty比较,至少到目前为止,我还没有见到过哪个框架的VIEW能和smarty比较,包括(Zend framework, FleaPHP,ThinkPHP;  Symfony还没有研过,不好说),所以,如果硬硬要开发一个CI强大的VIEW.不是好好的思路。如果一般的应用,CI的VIEW已经可以对付了。如果要做模版互嵌套,页面资源相互调用,还是用smaty的补丁,插件,函数,过滤器(输出前,输出中,输出后)..等,我想任何东西做不到唯美,善于利用别人的长处,才是硬道理.

本版积分规则