我有一个CakePHP应用程序,在某个时刻会显示产品媒体(图片或视频)的视图我想知道是否有一些视图包含威胁视频或威胁图片的视图,具体取决于标志。我想将这些“小视图”用于其他几个目的,因此它应该像“蛋糕组件”一样用于重复利用。
你们建议在Cake约定中使用什么(而不是使用原始include('')
命令)
答案 0 :(得分:18)
查看此link,更具体地说,该手册页的元素部分,应告诉您需要知道的所有内容
答案 1 :(得分:9)
为了获取此处的信息以防万一有人偶然发现,请务必注意解决方案因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()
也是一种选择,但如果不使用缓存就可以在性能上付出沉重代价,因为它必须完成正常操作所需的所有步骤。< / p>
答案 2 :(得分:7)
在您的控制器中(在此示例中为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;
然后在你看来:
<?php echo $this->element('posts'); ?>
这主要取自CakePHP书籍: Creating Reusable Elements with requestAction
我确实认为使用requestAction非常昂贵,所以你需要考虑缓存。
答案 3 :(得分:5)
只需使用:
<?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));
}
您的archive.ctp将是:
<?php include('/index.ctp'); ?>
理想地重用控制器动作和视图的代码。
答案 4 :(得分:4)
对于CakePHP 2.x
Cake 2.x的新功能是扩展给定视图的能力。因此,虽然元素非常适合于使用少量可重用代码,但扩展视图允许您重用整个视图。
有关更多/更好的信息,请参阅手册
答案 5 :(得分:1)
如果您希望元素可以访问调用视图可以访问的相同数据,则元素可以正常工作。
如果您希望嵌入式视图可以访问自己的数据集,则可能需要使用requestAction()
之类的内容。这允许您嵌入一个完整的视图,否则它将是独立的。
答案 6 :(得分:0)
我想用那些“小视图”来 其他几个目的,所以它应该 是“喜欢”的蛋糕组成部分 再利用。
这是通过“助手”完成的,described here。但我不确定这真的是你想要的。 “Elements”建议似乎也是正确的。这在很大程度上取决于你想要完成的事情。我的两分钱......
答案 7 :(得分:0)
在CakePHP 3.x中,您可以简单地使用:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body id="Bodenpreisrechner">
<div class="container">
<form>
<section class="row">
<div class"col-md-6">
<div class="input-group">
<label for="lohn"> Durchschnittliche Arbeitszeit je Hektar
<input id="arbeitszeitjeha" input type="number" class="form-control" aria-label="..." placeholder="Stunden/ha">
</label>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="hilfe" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Hilfe
<span class="caret"></span>
</button>
<ol class="dropdown-menu" aria-labelledby="hilfe">
<table id="arbeitszeit" height="auto" class="gridtable" border="1" style="cursor: pointer;">
<tr>
<td></td>
<td>10ha</td>
<td>50ha</td>
<td>100ha</td>
<td>Individuel</td>
</tr>
<tr>
<td>Marktfrucht</td>
<td>10</td>
<td>10</td>
<td>10</td>
<td><a href="http://daten.ktbl.de/vrpflanze/prodverfahren/start.action#start" target="_blank">KTBL</a></td>
</tr>
<tr>
<td>Milchvieh</td>
<td>10</td>
<td>10</td>
<td>10</td>
<td><a href="http://daten.ktbl.de/wkrtier/?tx_ktblsso_checktoken[token]=" target="_blank">KTBL</a></td>
</tr>
<tr>
<td>Veredelung</td>
<td>10</td>
<td>10</td>
<td>10</td>
<td><a href="http://daten.ktbl.de/wkrtier/?tx_ktblsso_checktoken[token]=" target="_blank">KTBL</a></td>
</tr>
</table>
</ol>
</div>
</div>
</div>
</section>
</form>
</div>
这将从与父视图相同的目录呈现视图。