当前位置:  开发笔记 > 编程语言 > 正文

CakePHP查看包括其他视图

如何解决《CakePHP查看包括其他视图》经验,为你挑选了4个好方法。

我有一个CakePHP应用程序,在某些时刻会显示产品媒体(图片或视频)的视图,我想知道是否有一些视频威胁视频或威胁图片的视图,具体取决于标志.我想将这些"小视图"用于其他几个目的,因此它应该像"蛋糕组件"一样用于重用.

你们建议在Cake约定中使用什么(而不是使用原始include('')命令)



1> thr..:

查看此链接,更具体地说,该手册页的Elements部分,应该告诉您需要知道的一切


@FernandoBarrocal:这是2.X版http://book.cakephp.org/2.0/en/views.html#elements的更新链接

2> Paolo Bergan..:

为了获得这里的信息以防万一有人偶然发现这一点,重要的是要注意解决方案因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()也是一种选择,但如果不使用缓存就可以在性能上付出沉重的代价,因为它必须经历正常操作所需的所有步骤.



3> Chris Hawes..:

在您的控制器中(在此示例中为posts控制器).

function something() {
    return $this->Post->find('all');
}

在您的元素目录(app/views/element)中,创建一个名为posts.ctp的文件.

在posts.ctp中:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

然后在你看来:

element('posts'); ?>

这主要取自CakePHP书籍: 使用requestAction创建可重用元素

我相信使用requestAction是非常昂贵的,所以你会想要查看缓存.



4> LenArt..:

只需使用:

.ctp'); ?>

在.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
}

可能会调整您的索引操作:

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

您的archive.ctp将是:


理想地重用控制器动作和视图的代码.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有