我想在所有页面上渲染一个元素,所以我在default.ctp中调用它。我想阻止它出现在两个或三个特定页面上。
我用Google搜索并找到了一个解决方案,它正在努力完成我想做的事情:
在此解决方案中,通过在元素中放置以下代码来提取元素的名称和路径:
<?php
$e = explode('views/elements/',__FILE__);
$e[1] = str_replace('.ctp', '', $e[1]);
if (isset($this->preventElement) && $e[1] == $this->preventElement[$e[1]]) return false;
?>
并且您不希望转发该元素的视图,这行代码放置在:
<?php $this->preventElement['someElement'] = 'someElement';?>
此处使用了视图对象preventElement
,但在测试时,我收到了消息preventElementHelper could not be found.
我在cakePhp文档中找不到对prventElement
的任何引用。
答案 0 :(得分:2)
为了渲染元素,你不要使用像这样的代码吗?:
echo $this->element('foobar');
要渲染它,为什么不把它放在if语句中,如下所示:
if(!isset($noDisplay)) {
echo $this->element('foobar');
}
在此示例中,在控制器中设置变量$ noDisplay,这应该使if
为false而不呈现。
答案 1 :(得分:1)
一种方法是只检查请求对象中的控制器和操作,然后确定是否应该显示该元素。
<?php
// app/View/Element/your_element_name.ctp
$controller = $this->request->params['controller'];
$action = $this->request->params['action'];
if (($controller == 'foo' && $action == 'bar') || ($controller == 'baz' && $action == 'bob')) {
continue;
}
它不够优雅,但会完成这项工作。