- views:视图是动作运行的唯一的页面部分。它们构成了应用程序的响应。
- elements:小的可重用的视图代码。元件通常在视图内部渲染。
- layouts: 应用程序中打包了呈献逻辑的一些视图接口文件。多数视图在布局内部渲染。
- helpers:这些类包装了视图层的许多地方都使用的视图逻辑。除了其它事项,CakePHP 的助手帮助你建立表单、构建 AJAX 功能、分页模型数据,或者提供 RSS feed。
使用视图块
视图块放在$scripts_for_layout,并提供一个允许你在视图/布局中任意位置定义插槽或者块的灵活的 API。 块是实现类似边栏这样的东东的理想方法,或者是在布局的头/尾加载资源的好地方。块有两种定义方式:作为捕获块,或者通过直接赋值。start()、append()和end()方法是和捕获块一同工作的:
1 // 建立一个边栏块 2 $this->start('sidebar'); 3 echo $this->element('sidebar/recent_topics'); 4 echo $this->element('sidebar/recent_comments'); 5 $this->end(); 6 8 // 随后添加一个边栏 9 $this->append('sidebar'); 10 echo $this->element('sidebar/popular_topics'); 11 $this->end();
也可以多次使用start()添加进一个块。 任何时候都可以使用assign()清除或者覆盖一个块:
1 // 清除之前定义的边栏块的内容。 2 $this->assign('sidebar', '');
在 2.3 版本中,新加了几个与块一同工作的方法。prepend()预置一个已存在的块的内容:
1 // 预置到边栏。 2 $this->prepend('sidebar', 'this content goes on top of sidebar');
startIfEmpty()方法在一个块为空或者未定义时生成一个块。如果块已经存在,则startIfEmpty()定义的内容被忽略。当你想要在块不存在时为其定义默认内容时,可以使用这一方法::
1 // 在视图文件中。 2 // 创建一个导航栏块。 3 $this->startIfEmpty('navbar'); 4 echo $this->element('navbar'); 5 echo $this->element('notifications'); 6 $this->end(); 7 8 // 在父视图/布局中。 9 $this->startIfEmpty('navbar'); 10 Default content 11 $this->end(); 12 13 echo $this->fetch('navbar');
上面的例子中,navbar块包含在第一部分中添加的内容。一旦在子视图中定义了这个块,其默认内容将被忽略。
显示块
可以使用fetch()方法显示块。fetch将安全地输出一个块,如果块不存在,就返回 ‘’。
1 echo $this->fetch('sidebar');
还可以根据一个块是否存在来决定是否显示其内容。要想在布局、继承视图文件中有条件的显示头或者其它标签时,这种方法非常有用:
1 // 在 app/View/Layouts/default.ctp 中 2 <?php if ($this->fetch('menu')): ?> 3 <div class="menu"> 4 <h3>Menu options</h3> 5 <?php echo $this->fetch('menu'); ?> 6 </div> 7 <?php endif; ?>
在 2.3.0 版,还可以在块没有内容时为其提供默认值。这使为空状态添加占位符变得更容易。可以使用两个参数提供默认值:
1 <div class="shopping-cart"> 2 <h3>Your Cart</h3> 3 <?php echo $this->fetch('cart', 'Your cart is empty'); 4 </div>
使用 script 和 CSS 文件块
块替代了被废弃的$scripts_for_layout布局变量。HtmlHelper关联到视图块,它的script()、css()和meta()方法在与inline=false选项共同使用时使用相同的相同的名字更新一个块。
1 <?php 2 // 在视图文件中。 3 $this->Html->script('carousel', array('inline' => false)); 4 $this->Html->css('carousel', null, array('inline' => false)); 5 ?> 6 7 // 在布局文件中。 8 <!DOCTYPE html> 9 <html lang="en"> 10 <head> 11 <title><?php echo $this->fetch('title'); ?></title> 12 <?php echo $this->fetch('script'); ?> 13 <?php echo $this->fetch('css'); ?> 14 </head> 15 // 下面是剩余的布局尊容...
HtmlHelper还允许你控制使用哪个 scripts 和 CSS 块:
1 // 在视图文件中。 2 $this->Html->script('carousel', array('block' => 'scriptBottom')); 3 4 // 在布局文件中。 5 echo $this->fetch('scriptBottom');
cakephp笔记——view层2
最新推荐文章于 2021-03-29 03:52:30 发布
CakePHP 的视图层可以由不同的部分构成。每一部分有不同的用途。