有没有一种方法可以通过编程方式设置块可见性,而无需使用PHP过滤器模块?


11

通过启用核心PHP过滤器模块,我可以使用PHP代码在块配置页面中设置块的可见性。

但是我不想启用PHP过滤器模块以进行安全措施。那么有没有办法在自定义模块中做到这一点?我找不到这样做的钩子。而且,闭合钩子hook_block_view_alter只能更改块内容。

Answers:


13

是。将块内容设置为false会将其从显示中隐藏,如果不存在其他块,则将隐藏该区域。我想您将需要与以下类似的设置:

$block['content'] = _my_module_custom_block();

...

function _my_module_custom_block(){
    if( HIDE_CONDITION )
        return false;
}

2
还是会显示内容为空的块吗?
gilzero 2012年

1
很好,很好。谢谢。
gilzero 2012年

@gilzero,不,不会。
WM

1

规则块知名度模块是另一种选择可用...... 不需要PHP的过滤器启用。以下是其项目页面的引文:

规则块可见性模块允许“规则”组件用于控制块可见性。除了Drupal提供的默认可见性选项之外,这还为Drupal管理员和开发人员提供了极大的灵活性,可以控制何时在其网站上显示块。

通常的想法是,如果可以使用“规则”来实现,则可以使用它来控制块的可见性,因此可能性是无限的。

是否需要仅对一个月以上注册的用户显示屏蔽?

也许您有一个必须在工作日的上午8点至下午5点之间显示的街区?

如何根据当前天气情况显示或隐藏街区?

所有这些都可以通过使用“规则”块可见性来完成。

此外,按照上面的“ 如果可以使用规则来操作,则可以使用它来控制块的可见性,您可以使用规则来实现各种自定义逻辑(请参见“以编程方式/自定义模块”部分您的问题)。

有关如何使用此模块的说明,请参考我对“ 如何停止将Views阻止向管理员显示,例如user / 1? ”的回答。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.