zoukankan      html  css  js  c++  java
  • Zend Framework+Smarty 整合

    http://apps.hi.baidu.com/share/detail/15922819 

     本身只带的虽然很强大,但还是不能很有效的实现代码与美工的分离,而

    Zend FrameworkViewSmarty的特点就能填补这个缺陷,当然萝卜青菜各有所爱,这里也只是介绍一个例子,抛砖引玉。

          要在Zend框架中调用Smarty,要把Smarty当成Zend的一个插件来用,作为Zend这个完全面向对象的框架来说,插件肯定也要是完全面向对象,好在Smarty就是一个类,所以只要很简单的修改,就能用于Zend中。

         以投票系统为例,目录结构如下

    模板文件放在application/views/templates中,同时要建立application/views/templates_c和application/views/templates_c/cache_c文件夹。我把Smarty文件夹放在library文件夹下,这里采用include方法加载Smarty,当然也可以以插件形式。在index.php中加载Smarty。

    <?php   
        /* 
         * Date: 2009.8.16 
         * Author:DaGui 
         * Email:daguizhang@gmail.com 
         * QQ:308713166 
         */ 
        error_reporting(E_ALL|E_STRICT);   
        date_default_timezone_set('Asia/Shanghai');   
        define('WEB_ROOT', 'http://192.168.12.190:81/vote/');   
        set_include_path('.' .PATH_SEPARATOR .'./library'.PATH_SEPARATOR .'./application/models/'.PATH_SEPARATOR . get_include_path());   
        require_once 'Zend/Loader.php';   
        Zend_Loader::registerAutoload();//设置Zend Framework 自动载入类文件   
        $registry = Zend_Registry::getInstance();    
           
        //配置数据库参数,并连接数据库   
        $config=new Zend_Config_Ini('./application/config/config.ini',null, true);   
        Zend_Registry::set('config',$config);   
        $dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config->toArray());   
        $dbAdapter->query('SET NAMES UTF8');   
        Zend_Db_Table::setDefaultAdapter($dbAdapter);   
        Zend_Registry::set('dbAdapter',$dbAdapter);   
           
        //对smarty模版进行初始化   
        include 'Smarty/Smarty.class.php';   
        $views = new Smarty();   
        $views->left_delimiter = "{{";   
        $views->right_delimiter = "}}";   
        $views->compile_dir = 'application/views/templates_c';   
        $views->cache_dir = 'application/views/templates_c/cache_c';   
        $views->template_dir = 'application/views/templates';   
        function smarty_block_dynamic($param,$content,&$views)   
        {   
            return $content;   
        }   
        $views->register_block('dynamic','smarty_block_dynamic',false);   
        Zend_Registry::set('views', $views);   
        
        //创建验证对象   
        $auth = Zend_Auth::getInstance();   
        //创建访问权限对象   
        $acl = new Common_Plugin_MyAcl();   
           
        //设置控制器   
        $frontController =Zend_Controller_Front::getInstance();   
        $frontController->setBaseUrl('/vote')//设置基本路径   
                        ->setParam('noViewRenderer', true)   
                        ->registerPlugin(new Common_Plugin_MyAuth($auth, $acl))   
                        ->registerPlugin(new Zend_Controller_Plugin_ErrorHandler())   
                        ->setControllerDirectory('./application/controllers')   
                        ->throwExceptions(true)   
                        ->dispatch();   
    ?>

    然后在Controller中


    <?php   
    class IndexController extends Zend_Controller_Action   
    {   
        /** 
         * Date: 2009.8.16 
         * Author:DaGui 
         * Email:daguizhang@gmail.com 
         * QQ:308713166 
         */ 
        protected $views; /*模板对象*/ 
        protected $data; /*传递模版变量的对象*/ 
        function init()   
        {   
            $this->registry = Zend_Registry::getInstance();   
            $this->views = Zend_Registry::get('views');   
            $this->data = $this->_request->getBaseUrl();   
        }   
        
        /** 
         * 输出首页 
         */ 
        public function indexAction()   
        {   
            $topic=new Topic();//实例化数据库类   
            $page =1;//高置默认页   
            $numPerPage = 6;//每页显示的条数   
            $arrayTopic=$topic->getAllActiveTopic();   
            $total=count($arrayTopic);   
            //显示模版   
            $this->views->assign('baseUrl',$this->data);   
            $this->views->assign('topic',$arrayTopic);   
            $this->views->assign('total',$total);   
            $this->views->display('main.html');   
        }   
    }


    在相应的view中

    <body> 
        
    <div class="RoundedCorner"> 
    <div class="nav"><b class="rtop"><b class="r1"></b><b class="r2"></b><b class="r3"></b></b><b class="rtop"><b class="r4"></b></b> 投票系统</div> 
    <div class="content"> 
    <h4>最近投票主题</h4> 
    <ul> 
    {{section name=lo loop=$topic}}   
    <li><a href="{{$baseUrl}}/index/showtopic/tid/{{$topic[lo].id}}" mce_href="{{$baseUrl}}/index/showtopic/tid/{{$topic[lo].id}}" >{{$topic[lo].title}}</a></li> 
    {{/section}}   
    </ul> 
    </div> 
        <b class="rbottom"><b class="r4"></b><b class="r3"></b><b class="r2"></b><b class="r1"></b></b></p> 
        </div> 
    </body> 
    </html>

  • 相关阅读:
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    前端面试——JS进阶
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    Node学习(三)
    HTML5 知识点总结(六)
    uniapp集成unipush监听推送,处理兼容ios在线无法收到推送通知问题以及安卓推送处理
    记一些CSS属性总结(二)
    Python getattr() 函数
    python中的__init__和__new__的区别
    干货报告:八大科技领域,280 页,InfoQ《2020 中国技术发展白皮书》开放下载...
  • 原文地址:https://www.cnblogs.com/luowei/p/2455922.html
Copyright © 2011-2022 走看看