CakePHP视图,包括其他视图

时间:2020-03-06 14:21:56  来源:igfitidea点击:

我有一个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非常昂贵,因此我们将需要研究缓存。