Fer*_*cal 12 php templates cakephp
我有一个CakePHP应用程序,在某些时刻会显示产品媒体(图片或视频)的视图,我想知道是否有一些视频威胁视频或威胁图片的视图,具体取决于标志.我想将这些"小视图"用于其他几个目的,因此它应该像"蛋糕组件"一样用于重用.
你们建议在Cake约定中使用什么(而不是使用原始include('')
命令)
为了获得这里的信息以防万一有人偶然发现这一点,重要的是要注意解决方案因CakePHP版本而异.
$this->renderElement('display', array('flag' => 'value'));
在你的视图中,然后/app/views/elements/
你可以创建一个名为的文件display.thtml
,其中$flag
包含你传递给它的任何值.
$this->element('display', array('flag' => 'value'));
在你的视图中,然后/app/views/elements/
你可以创建一个名为的文件display.ctp
,其中$flag
包含你传递给它的任何值.
requestAction()
也是一种选择,但如果不使用缓存就可以在性能上付出沉重的代价,因为它必须经历正常操作所需的所有步骤.
在您的控制器中(在此示例中为posts控制器).
function something() {
return $this->Post->find('all');
}
Run Code Online (Sandbox Code Playgroud)
在您的元素目录(app/views/element)中,创建一个名为posts.ctp的文件.
在posts.ctp中:
$posts = $this->requestAction('posts/something');
foreach($posts as $post):
echo $post['Post']['title'];
endforeach;
Run Code Online (Sandbox Code Playgroud)
然后在你看来:
<?php echo $this->element('posts'); ?>
Run Code Online (Sandbox Code Playgroud)
这主要取自CakePHP书籍: 使用requestAction创建可重用元素
我相信使用requestAction是非常昂贵的,所以你会想要查看缓存.
对于 CakePHP 2.x
Cake 2.x 的新功能是扩展给定视图的能力。因此,虽然元素非常适合拥有少量可重用代码,但扩展视图允许您重用整个视图。
有关更多/更好的信息,请参阅手册
http://book.cakephp.org/2.0/en/views.html#extending-views
只需使用:
<?php include('/<other_view>.ctp'); ?>
Run Code Online (Sandbox Code Playgroud)
在.ctp中,您的操作最终会进入.
例如,构建一个存档函数
function archived() {
// do some stuff
// you can even hook the index() function
$myscope = array("archived = 1");
$this->index($myscope);
// coming back, so the archived view will be launched
$this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}
Run Code Online (Sandbox Code Playgroud)
可能会调整您的索引操作:
function index($scope = array()) {
// ...
$this->set(items, $this->paginate($scope));
}
Run Code Online (Sandbox Code Playgroud)
您的archive.ctp将是:
<?php include('/index.ctp'); ?>
Run Code Online (Sandbox Code Playgroud)
理想地重用控制器动作和视图的代码.