CakePhp:防止在特定视图上渲染元素
我希望在所有页面上都呈现一个元素,所以我在default.ctp中调用了它。我想防止它出现在两个或三个特定页面上 我在谷歌上搜索并找到了一个解决方案,它正试图做我想做的事情: 在此解决方案中,通过在元素中放置以下代码来提取元素的名称和路径: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) &
<?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 objectpreventElement
,但在测试它时,我得到消息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隐藏元素?这可能是一个暂时的解决办法。您可以选择创建和引用不包含图元的其他布局。如果您决定更改该函数的布局,则可以为控制器中的每个函数定义该属性。