根据drupal中的特定条件显示不同的块

Display different blocks depending on a specific condition in drupal

我有一个页面类型"Promotion"。该页面的模板有一个区域,在该区域内有两个正在呈现的块(使用 structures/blocks 创建)。

我有不同版本的块(文本、颜色等)。我想要做的是有一个 THEMENAME_preprocess (?) 函数来根据特定条件在块之间切换。

例如:如果用户是会员则显示block-21和block-22,如果用户做了这个或那个则显示block-23和block-24。

你能告诉我怎么做吗?

实际上我认为您可以尝试 Hide Block by Role 模块,这正是您想要的,只是反过来。

This module will allow you to hide blocks for users who belong to certain roles.

或核心功能

/admin/structure/block/manage 然后 configure:

所以如果我理解正确 (!?) 就不需要一些自定义 code/module

你有上下文模块:

https://www.drupal.org/project/context

...更高级的方块放置(以及更多)。

但是如果你想要一些自定义逻辑,为什么不把它自己放在块中呢?因此,根据您的条件,让块在另一个内容上显示一个内容,用普通 PHP.

如果您有自定义功能('paying'、'non-paying'),您可能最好使用 hook_block_view_alter(https://api.drupal.org/api/drupal/modules!block!block.api.php/function/hook_block_view_alter/7)来控制显示。

您可以默认显示两个块,并在 hook_block_view_alter 检查条件并修改 return 以删除块内容(return false 或取消设置项目)。