Zend与Smarty整合的三种办法

来源:互联网 发布:网络赚钱博客 编辑:程序博客网 时间:2024/04/30 02:19

修改Action中Smarty模版


     $this->_helper->viewRenderer->setNoRender();
     $cfg = new Zend_Config_Ini( APPLICATION_PATH . '/configs/view.ini', 'Smarty' );
     $viewCfg = $cfg->toArray();
     $view = new Zamp_View_Smarty( $viewCfg );
     $view->assign( 'username', 'baobao' );
     $view->setScriptPath( $viewCfg['template_dir'] );
     echo $view->render( 'smarty/hello2.phtml' );

修改Controller中Smarty模版

    创建initView函数,内容如下:

 

 

    public function initView()
    {
        $cfgObj = new Zend_Config_Ini( APPLICATION_PATH . '/configs/view.ini', 'Smarty' );
        $smarty_cfg = $cfgObj->toArray();
        $modDir = $this->_request->getModuleName();
        $dirs = $this->getFrontController()->getControllerDirectory();
        if ( empty( $modDir ) || !isset( $modDir ) )
        {
            $modDir = $this->getFrontController()->getDefaultModule();
        }

        $baseDir = dirname( $dirs[$modDir] ) . DIRECTORY_SEPARATOR  . 'views'  . DIRECTORY_SEPARATOR . 'scripts' . DIRECTORY_SEPARATOR;
        if (!file_exists($baseDir) || !is_dir($baseDir)) {
            require_once 'Zend/Controller/Exception.php';
            throw new Zend_Controller_Exception('Missing base view directory ("' . $baseDir . '")');
        }

        $this->view = new Zamp_View_Smarty( $smarty_cfg );
        $this->view->setScriptPath( $baseDir );
        $this->_helper->viewRenderer->setView( $this->view );

        return $this->view;
    }

    创建init函数,并在期内增加initView函数,如下:

    public function init()
    {
        $this->initView();
    }

    注意:此应用中必须设置viewRender的View,因为Controller应用中render是调用viewRender中的render函数。而viewRender中默认的是启动自身的应用而非使用Zend_View中的render应用。

在Bootstrap中Smarty模版


    在Bootstrap引导文件中创建_initView函数。

 

 

    protected function _initView()
    {
        $cfgObj = new Zend_Config_Ini( APPLICATION_PATH . '/configs/view.ini', 'Smarty' );
        $smarty_cfg = $cfgObj->toArray();
        $view = new Zamp_View_Smarty( $smarty_cfg );
        $view->setScriptPath( $smarty_cfg['template_dir'] );
        $renderer = new Zend_Controller_Action_Helper_ViewRenderer();
        $renderer->setView( $view );
        $renderer->setViewBasePathSpec( $smarty_cfg['template_dir'] );
        Zend_Controller_Action_HelperBroker::addHelper( $renderer );
    }

    注意:在此应用中$renderer->setViewBasePathSpec( $smarty_cfg['template_dir'] );必须执行此函数,因为ViewRenderer类中执行的默认模版地址是有此函数执行的,而其他函数是不予执行的。