Section 1 Views 视图

一个view是一个页面模版,通常按action的名字命名。例如,PostsController::add的view位于/app/views/posts/add.thtml。Cake view是非常简单的PHP文件,因此你可以在其中使用任何PHP代码。尽管你的大多数view文件包含HTML代码,一个view可以是对一个特定数据集的任意表示,XML,图像,等等。
在view模版文件里,你可以使用相关model提供的数据。这些数据通过$data数组传递过来。你在controller里边使用set()方法递交给view的所有数据也是可用的。

默认情况下,HTML helper对于每一个view都是可用的,并且到目前为止它是view里边最常用的helper。它对于创建表单,插入客户端脚本和多媒体,协助数据验证都是非常有用的。关于HTML helper的详细讨论,请参见“Helpers”章的Section 1。

在view里使用的大多数功能都是由helper提供的。Cake提供了许许多多的helper(在“Helpers”章里讨论),并且你也可以定义自己的helper。由于view不应该包含太多业务逻辑,view类并没有提供太多广泛使用的公共方法。其中一个很有用的是renderElement(),我们将在section 1.2看到它。

Layouts 布局

一个layout(布局)包含了所有包裹在view之外的表现代码。Layout文件都放在/app/views/layouts目录里。你可以重写一个默认的layout来取代位于/app/views/layouts/default.thtml的Cake默认layout。一但创建了新的默认layout,当页面render的时候controller view的内容会被替换到默认layout中。

当你创建一个layout的时候,你需要告诉Cake在哪里放置controller view的内容:确保你的layout包含$content_for_layout(还有$title_for_layout,不过它是可选的)。以下是一个默认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>

要为layout设置标题(title),最简单的办法是在controller里使用$pageTitle变量来设置。

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

只要需要,你可以随意为你的Cake站点创建任意数量的layout,只要把他们放在app/views/layouts目录,并且在你的controller action里边使用controller的$layout变量或者setLayout()方法来切换layout。
比如,我的站点中有一个包含小型广告区域的部分,我也许可以创建一个具有更小的广告区域的layout并且使用以下语句来指定它为所有controller action的layout:

var $layout = 'default_small_ad'; 

Elements 元素

许多应用程序都会有一些在各个页面见不停重复的表现层代码,有时他们只是在layout里的不同地方。Cake可以帮助你复制站点中的某些区块,如果需要的话。 我们将这些可重用的页面区块称为Element(元素)。广告,帮助框,导航栏,菜单和插图都被Cake实现成为element。一个element其实可以看作是可以包含在其他view里边的mini-view。

所有element都生活在/app/views/elements目录下,并且文件扩展名为.thtml。
默认情况下,element访问不到任何数据。想让它具有对数据的访问权,你需要将数据放在数组里传递给它,并不要忘了为这些数据带上名字(键-值对数组)。

无参数地调用一个element

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

调用一个element,并传入包含数据地数组

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

在element文件里,所有传入的变量都可以通过他们在参数数组里的键名来使用(有点类似于在view里边使用controller用set()设置的变量)。在上边这个例子中,/app/views/elements/helpbox.thtml文件可以使用$helptext变量。当然,如果传递一个数组给element会更佳有用。

element使view具有更佳的可读性,而把render重复的element的部分放在对应的element文件中。它们也可以帮助你重用站点中的内容区块。

来源: http://www.1x3x.net/cakephp/view.html

cakephp 1.3 Views相关推荐

  1. cakephp视图用php文件,CakePHP - 扩展视图( Extending Views)

    CakePHP - 扩展视图( Extending Views) 很多时候,在制作网页时,我们希望在其他页面中重复某些页面. CakePHP具有这样的功能,可以在另一个视图中扩展视图,为此,我们不需要 ...

  2. CakePHP你必须知道的21条技巧

    原文链接:http://www.avatarfinancial.com/pages/cake/ 这篇文章可以说是CakePHP教程中最经典的了.虽然不是完整的手把手系列, 但作者将自己使用CakePH ...

  3. cakephp 1.3 Models

    Section 1 What is a model? 什么是model呢?model就是MVC模式中的M. Model用来做什么呢?它将领域逻辑从表现层和独立的业务逻辑中剥离出来. Model通常是数 ...

  4. cakephp 1.3 Controller

    Controller 一个controller用于管理应用程序里某一方面的逻辑.大多数来说,controller被用于管理独立model的逻辑.比如,当你想构建一个管理录像带的站点,你也许会有一个Vi ...

  5. cakephp 1.3 配置CakePHP

    Section 1 数据库配置 app/config/database.php 这个文件包含了所有的数据库配置.新安装的Cake是没有datebase.php这个文件的,你需要从database.ph ...

  6. CakePHP 中文手册

    基本概念 Section1 简介 本章节篇幅很短,简单的介绍一下MVC概念以及在cake中是如何实现的.如果你对MVC模式很陌生,这个章节将会非常适合你.我们由 常规的MVC概念开始我们的讨论,然后用 ...

  7. CakePHP中文手册【翻译】-基本概念

    基本概念 第1节 介绍 本章是对MVC概念的一个短小而且随意的介绍,因为这些概念在Cake里得到实现.如果你是一个MVC模式的新人,很显然本章就是为你而写的.我们从MVC的一般概念的讨论开始,然后以我 ...

  8. CakePHP中文手册【翻译】-Cake Blog创建指南

    Cake Blog创建指南 第1节 介绍 欢迎来到Cake.你可能正在使用本指南,因为你想学习更多关于Cake是如何工作的知识.其目的就是为了提高效率,并且让编写代码变得更加有趣.我们希望当你深入代码 ...

  9. lamp+cakephp下配置fckeditor详解 --by heng

    1.登录http://ckeditor.com/download/ 下载FCKeditor2.6.6(在页面最下方) 2.解压FCKeditor_2.6.6.zip得到fckeditor文件夹 3.拷 ...

最新文章

  1. 计算机在医疗方面的应用与前景,计算机在医疗卫生领域应用现状及前景.docx
  2. mysql事务实现数据更新_MySql事务select for update及数据的一致性处理讲解
  3. SAP各种凭证的取消小结
  4. 微软2020开源回顾:止不住的挨骂,停不下的贡献
  5. vue旋转图片功能,旋转放大图片功能;vue旋转放大div元素
  6. ajax 输入不为空,ajax POST响应为空
  7. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现
  8. 数据库errno: 1045的解决办法
  9. Eclipse超级完美汉化教程
  10. mysql 加锁 索引_把MySQL中的各种锁及其原理都画出来
  11. 华为云盘里面的照片怎么导出来_华为手机误删照片,怎么恢复?别急!只需点击这里...
  12. 查看计算机桌面隐藏文件夹,电脑怎么查看隐藏文件(隐藏文件夹显示方法)
  13. 应用层下的人脸识别(三):人脸比对
  14. 【POJ 3764】 The xor-longest path
  15. Luogu P3369 【模板】普通平衡树
  16. 隐形的翅膀-张韶涵 (歌词)
  17. 洛谷T46780 ZJL 的妹子序列(生成函数)
  18. 计算机系统如何重置,如何重置电脑系统?看这里1分钟教会你!
  19. QImage 图片分割、保存
  20. DevExpress 20.2.3有源码吗?一名鱼友刚刚问我的

热门文章

  1. 税收与补贴问题(洛谷-P1023)
  2. 信息学奥赛C++语言: 不与最大数相同的数字之和
  3. 贪吃蛇程序不要白不要,一个赞就够了
  4. 计算机两年发展,计算机发展历史
  5. Python更换清华的源
  6. linux /proc文件系统(1)
  7. arcgis根据矢量范围裁取tif影像(栅格数据)、批量合并shp文件、根据矢量范围裁取区域内的矢量,输出地理坐标系
  8. influxdb的可视化界面
  9. 06_Influxdb+Grafana绘图基础
  10. Arraylist理解(3)删除元素