CakePhp:防止在特定视图上渲染元素

CakePhp:防止在特定视图上渲染元素,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我希望在所有页面上都呈现一个元素,所以我在default.ctp中调用了它。我想防止它出现在两个或三个特定页面上 我在谷歌上搜索并找到了一个解决方案,它正试图做我想做的事情: 在此解决方案中,通过在元素中放置以下代码来提取元素的名称和路径: <?php $e = explode('views/elements/',__FILE__); $e[1] = str_replace('.ctp', '', $e[1]); if (isset($this->preventElement) &

我希望在所有页面上都呈现一个元素,所以我在default.ctp中调用了它。我想防止它出现在两个或三个特定页面上

我在谷歌上搜索并找到了一个解决方案,它正试图做我想做的事情:

在此解决方案中,通过在元素中放置以下代码来提取元素的名称和路径:

<?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';?>

这里使用的是view object
preventElement
,但在测试它时,我得到消息
preventElementHelper无法找到。


我在cakePhp文档中找不到任何对
prventElement
的引用

为了渲染元素,您不使用类似这样的代码吗

echo$this->element('foobar')

要呈现它,为什么不将其放入if语句中,如下所示:

if(!isset($noDisplay)) {
    echo $this->element('foobar');
}

在本例中,在控制器中设置变量$noDisplay,这将使
if
为false而不渲染。

一种方法是只检查请求对象中的控制器和操作,然后确定是否应显示元素

<?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;
}

我不确定是否需要这样做,但您是否尝试过使用CSS隐藏元素?这可能是一个暂时的解决办法。您可以选择创建和引用不包含图元的其他布局。如果您决定更改该函数的布局,则可以为控制器中的每个函数定义该属性。