CakePHP中文手册【翻译】-View

View

1

View

一个View就是一个页面模版,通常是在一个动作之后命名。例如,PostsController::add()的视图是/app/views/posts/add.thtml.Cake view是非常简单的PHP文件,因此你可以在他们内部使用任何PHP代码。尽管大多数的view文件包含HTMLview也可以是某些特定数据的任何表现形式,可以是XML,图像等。

view模版文件中,你可以使用来自相应Model的数据。将会把此数据传递给一个称为$data的数组。在Controller里,用set()方法处理的任何view数据现在在你的view里也可用了。

缺省的,HTML Helper在每个view里都是可用的,到目前为止,在view中它是最常用的helper。在创建表单,当然包含脚本,媒体,链接以及数据验证时,它显得非常有用。请参看Helper那章的第一节的关于HTML helper的讨论。

view中大多数可用函数都由Helper提供。Cake有一些非常棒的helper(他们会在Helper这章中讨论),而且你也可以包含你自己的。因为view不会包含太多的逻辑,因此在view类里,并无太多使用得非常好的公共函数。其中有一个有用的是renderElement(),它将在1.2节中讨论。

布局(Layout

一个布局包含了所有表现的代码,这些代码组成一个view。在所有view中你想看见的任何东西应该放在布局里。

布局文件放在/app/views/layouts. Cake缺省的布局可以由一个新的缺省的布局重写。这个布局在/app/views/layouts/default.thtml.一旦创建一个新的缺省布局,当render页面时,controller view代码就会放在缺省的布局里。

当创建一个布局时,你需要告诉Cake将你的controller view代码放在哪里:为了实现此,确保你的布局为$content_for_layout包含一个位置(可选的,, $title_for_layout)。下面这个例子介绍了缺省的布局是个什么样子:

<!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">

<head>

<title><?php echo $title_for_layout?></title>

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

</head>

<body>

 

<!-- If you'd like some sort of menu to show up on all of your views, include it here -->

<div id="header">

    <div id="menu">...</div>

</div>

 

<!-- Here's where I want my views to be displayed -->

<?php echo $content_for_layout ?>

 

<!-- Add a footer to each displayed page -->

<div id="footer">...</div>

 

</body>

</html>

 

为了设置布局的标题(title),在controller中最简单的方法是使用$pageTitle controller变量。

class UsersController extends AppController
{
    function viewActive()
    {
        $this->pageTitle = 'View Active Users';
    }
}

只要愿意,你可以为你的Cake站点创建任意多的布局,只需要将他们放在app/views/layouts目录下即可,在Controller的动作(action)里,使用Controller$layout变量或者setLayout()函数来选择他们。

例如,如果站点的某一部分(section)包含一个比较小的广告条空间,我可以创建一个新的布局,而且这个布局有一个小的广告空间,并向所有controller的动作指定该布局,如下:

var $layout = 'default_small_ad';

元素

很多应用程序有一些小的表现代码段,它们在不同的页面中需要重复,有时是在某布局的不同地方。Cake能帮助你重复使用站点中需要重用的部分。这些重用的部分称为元素(Element)。在Cake中,广告,帮助框,导航控件,额外菜单,以及调用通常作为元素来实现的。基本上,一个元素是一个迷你view,它也可能包含在其他View里。

元素在/app/views/elements/文件夹下,并且.thtml是其文件扩展名。

缺省的,元素不会访问任何数据。为了给它这个权限,你需要将它作为一个数组中的命名参数来发送。

无参调用元素

<?php echo $this->renderElement('helpbox'); ?>

调用一个元素传递一个数据数组

<?php echo
$this->renderElement('helpbox', array("helptext" => "Oh, this text is very helpful."));
 ?>

在元素文件里,所有传递的变量都作为他们在传递数组的键名(非常类似在Controllerset()是如何和view工作的)来应用。在上面的例子中,/app/views/elements/helpbox.thtml 文件可以使用$helptext变量。当然,将数组传递到元素中会更加有用。

通过将重复的元素render到它们自己的文件中,元素会让view变得更加具有可读。在你的站点里,他们也可帮助你重用内容块。

Last Updated:2006-12-03
posted @ 2006-11-17 11:13  张太国  阅读(...)  评论(...编辑  收藏