使用视图块或元素的简单导航栏,或带有mysql内容的动态菜单(使用requestAction()方法)有什么区别?哪个更合适?
是,有一点不同.元素只是你在一个单独的.ctp文件中编写的php/HTML片段,它将被插入到你调用的地方$this->element().
块很难解释.块是您可以在其他位置定义的视图区域.块甚至可以包含元素.解释我能想到的块的最好例子是标准的CakePHP布局,标题中有行
echo $this->fetch('meta');
echo $this->fetch('css');
echo $this->fetch('script');
Run Code Online (Sandbox Code Playgroud)
这些是说在这个地方渲染块"meta","css"和"script"的行.您可以编辑视图中的元,css,脚本块,即使在$this->fetch();调用相应的块之后也是如此.例如,我一直使用以下内容:
echo $this->Html->script('javascript', array('block' => 'script'));
Run Code Online (Sandbox Code Playgroud)
这会将javascript includes添加到脚本块中,我可以在视图文件中,在元素中使用它.所以,我使用这个技巧来根据你正在查看的view.ctp文件包含哪些javascript文件.
我应该注意脚本,css和元块最终定义的方式与通常定义块的方式不同.正常定义块内容的方式如下:
$this->start('block');
//Block contents here
$this->end();
Run Code Online (Sandbox Code Playgroud)
什么时候应该使用元素vs块?
在大多数情况下,元素将足够好.你可能甚至可以在不使用块的情况下完成任何事情,但如果你知道如何使用它们,它们可以很方便,或者导致更好的设计.
使用块,查找您知道要重用视图的某些部分的情况,但该部分有一些基于尚无法确定的内容的变化.
布局是一个常见的例子.也许您想在布局中显示页面的名称.您可以$name在控制器的操作中设置变量.但是稍后您可能希望稍后重新编辑该网站,然后您不再希望在新主题中显示页面名称.然后你应该从控制器中删除设置$ name变量的行,使其干净.或者,您可以通过使用块并定义应在view.ctp文件中显示的页面名称来避免此问题.现在您的应用程序更多是MVC.
阅读官方食谱中有关元素和块的更多信息:http://book.cakephp.org/2.0/en/views.html
| 归档时间: |
|
| 查看次数: |
2783 次 |
| 最近记录: |