Simple Zend_Layout Example

最近又看了一下最新版的Zend Framework代码;新出来的功能主要是Zend_Layout和Zend_Form。
都挺强大的;的确方便开发;本想自己写了例子,结果网上发现Akra Blog写过这么一篇实例文章;干脆翻译过来得了。
(没和Akra联系,不知道算不算版权文问题)

第一次翻译;大家将就着看。

http://akrabat.com/2007/12/11/simple-zend_layout-example/

Zend_Layout终于放出来了,这里是一个利用Zend_Layout的简单MVC例子。



这个例子里包括三个视图文件:
一个外部框架型文件(
the outer layout file),
一个基于
action的视图文件(the index action viewscript)
和一个右边菜单文件
(a right hand side bar)

本帖将讲述如何创建这些文件。代码附在帖子之后。(译:到这个老兄网站上下载吧)


开始
这是一个目录结构:







正像你看到的,这是一个基本结构图。我们创建一个indexController控制器。为了更好的显示,我创建一个视图帮手文件来正确显示css等文件。
(译:这个视图帮手文件奇简单无比;像我的开发中,一般都放在Action的init()中获取,然后传给视图)


$fc =Zend_Controller_Front::getInstance();

$request =$fc->getRequest(); /* @var $request Zend_Controller_Request_Http */

return$request->getBaseUrl();



先让我们看看启动文件(bootstrap file

<?php
define('ROOT_DIR', dirname(dirname(__FILE__)));

// Setup path to the Zend Framework files
set_include_path('.'
. PATH_SEPARATOR . ROOT_DIR.'/lib/'
. PATH_SEPARATOR . get_include_path()
);

// Register the autoloader
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

// Initialise Zend_Layout's MVC helpers
Zend_Layout::startMvc(array('layoutPath' => ROOT_DIR.'/app/views/layouts'));

// Run!
$frontController = Zend_Controller_Front::getInstance();
$frontController->addControllerDirectory(ROOT_DIR.'/app/controllers');
$frontController->throwExceptions(true);
try {
    $frontController->dispatch();
} catch(Exception $e) {
    echo nl2br($e->__toString());
}

(译:注意这里的layoutPath使用绝对目录)

这是一个基本的启动文件,我们使用startMvc静态方法初始化了Zend_Layout。这个方法接受一个数组型配置,其中最基本的就是目录配置。这个例子里选择ROOT_DIR.'/app/views/layouts'
The Controller(控制器文件)文件包括两个方法:
1init() 初始化(译:根据Zend_Controller_Action 执行过程,所有的action执行过程都是依次执行init()preDispatch()actionpostDispatch()
这里的初始化只是关联sidebar标志符到一个指定的视图文件。

2indexAction() 就是放一些文本内容到视图内。 

<?php

class IndexController extends Zend_Controller_Action
{
    function init()
    {
        // Render sidebar for every action
        $response = $this->getResponse();
        $response->insert('sidebar', $this->view->render('sidebar.phtml')); 
    }

    function indexAction()
    {
        $this->view->pageTitle = "Zend Layout Example";

        $this->view->bodyTitle = '<h1>Hello World!</h1>';
        $this->view->bodyCopy = "<p>Lorem ipsum dolor etc.</p>";
    }
}


视图部分视图部分分两部分。
第一部分,内部视图(
the "inner" scripts)(类似sidebar或者index.phtml之类的文件),
第二部分,外部视图
(the "outer" layout script),这是一个框架视图。其中很多内容需要内部视图填充。 内部视图Action视图也算内部视图。在index/index.phtml里,我们显示在indexAction里定义的值。

[php]
<?php echo $this->bodyTitle ;?>
<?php echo $this->bodyCopy ;?>
[[/php]
(译:这跟原来的视图表现是一样的)

Sidebar也算内部视图。前面在init()里定义过它的视图位置。

<h2>Sidebar</h2>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>

外部视图外部视图是layout.phtml ,我们在启动文件中定义过。它可以利用<?php echo $this->layout()->content ?>去渲染(render)一个视图片断(a named response segment)。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" cstylesheet" href="<?php echo $this->baseUrl(); ?>/main.css" type="text/css">
</head>
<body>
    <div id="content">
        <?php echo $this->layout()->content ?>
    </div>
    <div id="sidebar">
        <?php echo $this->layout()->sidebar; ?>
    </div>
</body>
</html>

译:注意几个地方:

1$this->baseUrl() 就是前面说的视图帮手,为了取得当前项目路径名,更好的显示css文件。

2$this->pageTitle 是在indexAction中定义的。也就是说,layout框架文件里是可以接受action定义的变量的。这点很重要。

3$this->layout()->content 默认就是当前action的视图文件,本例就是index/index.phtml内容

4$this->layout()->sidebar 是在action中定义的,并指定显示哪一个视图文件。这个很重要。

5、高级用法,还得看文档。比如在Action里是可以控制关闭框架视图的比如:

$this->_helper->layout->disableLayout();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值