CakePHP中文手册【翻译】-View
View
第1节
View
一个View就是一个页面模版,通常是在一个动作之后命名。例如,PostsController::add()的视图是/app/views/posts/add.thtml.Cake view是非常简单的PHP文件,因此你可以在他们内部使用任何PHP代码。尽管大多数的view文件包含HTML,view也可以是某些特定数据的任何表现形式,可以是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.")); ?> |
在元素文件里,所有传递的变量都作为他们在传递数组的键名(非常类似在Controller里set()是如何和view工作的)来应用。在上面的例子中,/app/views/elements/helpbox.thtml 文件可以使用$helptext变量。当然,将数组传递到元素中会更加有用。
通过将重复的元素render到它们自己的文件中,元素会让view变得更加具有可读。在你的站点里,他们也可帮助你重用内容块。