防止渲染一些视图时渲染布局元素!

此代码段适用于您希望在渲染某些视图时防止布局中的某些元素渲染的情况。

> ### 已更新 ###

> 在条件语句中

>

if (isset($this->preventElement)...

> $this->preventElement 变为 $this->preventElement[$e[1]],以解决在使用此代码段时,布局中有多个元素时产生的索引缺失错误。

考虑以下示例,有一个元素显示最受欢迎的搜索关键字,它被命名为 top_searches.ctp。此元素放置在布局中,以便在搜索框元素下方渲染。

假设现在,我们有一个索引视图,用于列出所有搜索关键字,我们不想在调用索引视图时渲染 top_searches 元素。

我们应该将以下代码段添加到 top_searches 的最上面一行,即第 1 行。

<?php
$e = explode('views/elements/',__FILE__);
$e[1] = str_replace('.ctp', '', $e[1]);
if (isset($this->preventElement[$e[1]]) && $e[1] == $this->preventElement[$e[1]]) return false;
?>

简而言之,以上代码提取了元素 ctp 文件相对于元素目录的路径和名称,然后,它请求 View 对象的一个数组属性 called preventElement,如果它发现元素的名称被设置为一个键值,它的值也是它的名称,它将返回 false 以防止渲染元素的其余部分。

现在在 index.ctp 中,我们应该添加以下代码

<?php $this->preventElement['top_searches'] = 'top_searches';?>

我将以上代码行也放在第一行,很明显,我们定义了 preventElement 属性,并设置了我们想要停止或阻止其渲染的元素的名称。