CakePHP视图,包括其他视图
我有一个CakePHP应用程序,该应用程序将在某个时刻显示一个我想知道的产品媒体(图片或者视频)的视图,是否有某种方式包括另一个威胁视频或者威胁图片的视图,具体取决于标记。我想将这些"小视图"用于其他几个目的,因此应该"像蛋糕一样"组件以进行重用。
你们建议在Cake约定中使用的内容(而不是使用原始的include('')
命令)
解决方案
查看此链接,更具体地说,该手册页面的"元素"部分应告诉我们我们需要了解的所有内容
为了在某人偶然发现此信息的情况下获得此信息,请务必注意解决方案因CakePHP版本而异。
对于CakePHP 1.1
$ this-> renderElement('display',array('flag'=>'value'));`
在视图中,然后在/ app / views / elements /
中,我们可以创建一个名为display.thtml`的文件,其中$ flag的值将与传递给它的值相同。
对于CakePHP 1.2
$ this-> element('display',array('flag'=>'value'));`
在视图中,然后在/ app / views / elements /
中可以创建一个名为" display.ctp"的文件,其中$ flag
具有传递给它的值。
在这两个版本中,元素都将有权访问视图有权访问的所有数据+我们传递给它的任何值。此外,正如某人指出的那样,requestAction()
也是一个选项,但是如果不使用高速缓存而进行操作,则可能会造成很大的性能损失,因为它必须执行正常操作的所有步骤。
如果我们希望元素可以访问调用视图可以访问的相同数据,则它们可以工作。
如果我们希望嵌入式视图可以访问自己的数据集,则可能需要使用诸如requestAction()
之类的东西。这使我们可以嵌入完整的视图,否则该视图将是独立的。
I want to use those "small views" to several other purposes, so It should be "like" a cake component, for reutilization.
如此处所述,这是通过"助手"完成的。但是我不确定那不是我们真正想要的。 "元素"建议也似乎是正确的。这在很大程度上取决于我们要完成的工作。我的两分钱
在控制器中(在本示例中为posts控制器)。
function something() { return $this->Post->find('all'); }
在elements目录(app / views / element)中,创建一个名为posts.ctp的文件。
在posts.ctp中:
$posts = $this->requestAction('posts/something'); foreach($posts as $post): echo $post['Post']['title']; endforeach;
然后在我们看来:
<?php echo $this->element('posts'); ?>
这主要是从CakePHP书中获取的:
使用requestAction创建可重用元素
我确实相信使用requestAction非常昂贵,因此我们将需要研究缓存。