题
我有一个程序,在某一时刻将会显示一个图与媒体产品(图片或视频)我要知道,好歹,以包括另一种观点认为威胁的视频或威胁的图片,这取决于一个标志。我想要使用这些"小景"几个其他目的,因此,它应该被"喜欢"一个蛋糕的组件,用于再利用.
你们什么建议使用以在蛋糕公约(而不使用的原料 include('')
命令)
解决方案
看看这个 链接 更具体地说 元素-一部分,手册应告诉你一切你需要知道
其他提示
在感兴趣的具有信息在这里以防有人绊倒在此,重要的是要注意的解决方案取决于不同的版本。
为Cake1.1
$this->renderElement('display', array('flag' => 'value'));
在你看来,然后在 /app/views/elements/
你可以做一个文件叫 display.thtml
, ,哪里 $flag
会有价值的无论你通过它。
为Cake1.2
$this->element('display', array('flag' => 'value'));
在你看来,然后在 /app/views/elements/
你可以做一个文件叫 display.ctp
, ,哪里 $flag
会有价值的无论你通过它。
在这两个版本的元素将有机会获得所有数据的查看已经访问+任何价值,你通过它。此外,正如有人指出,
requestAction()
也是一种选择,但它可以带来了沉重的代价在绩效,如果做不使用缓存,因为它已经通过的所有步骤的一个正常的行动。
在你的控制器(在本例中的员额控制器)。
function something() {
return $this->Post->find('all');
}
在你的元件目录(app/views/件)建立一个文件称为员额。ctp。
在员额。ctp:
$posts = $this->requestAction('posts/something');
foreach($posts as $post):
echo $post['Post']['title'];
endforeach;
然后在你的观点:
<?php echo $this->element('posts'); ?>
这主要是采取从的书:建立可重复使用的元素与requestAction
我相信,使用requestAction是相当昂贵,所以你会想要看看高速缓存。
只是使用:
<?php include('/<other_view>.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));
}
你的档案。ctp将是:
<?php include('/index.ctp'); ?>
理想的再利用的代码控制的行动和意见。
为Cake2.x
新蛋糕2.x是abilty延长给定图。因此,虽然元素是很好有点位的可重复使用的代码,延伸视图可以重复使用整个景。
请参阅本手册的更多/更好的信息
元素的工作,如果你想让他们有机会获得同样的数据,该调查访问。
如果你想要你的嵌入式视为有权访问其自己的一套数据,可能要用的东西喜欢 requestAction()
.这可以让你嵌入一个全面的视图,否则将独立。
在Cake3.x你可以简单的使用:
$this->render('view')
这将使该图从相同的目录中,父图。