【问题标题】:Display different blocks depending on a specific condition in drupal根据drupal中的特定条件显示不同的块
【发布时间】:2015-12-20 19:36:07
【问题描述】:

我有一个页面类型“促销”。页面的模板有一个区域,在该区域内有两个块(使用结构/块创建)正在渲染。

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

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

你能告诉我怎么做吗?

【问题讨论】:

    标签: drupal drupal-7 preprocessor block


    【解决方案1】:

    如果您有自定义功能(“付费”、“不付费”),您最好使用 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 中检查条件并修改返回以删除块内容(返回 false 或取消设置项目)。

    【讨论】:

    • 没问题,你可以使用xdebug / var_dump,不要在这个函数中计算出模块和增量。
    【解决方案2】:

    你有上下文模块:

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

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

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

    【讨论】:

      【解决方案3】:

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

      此模块将允许您为属于的用户隐藏块 某些角色。

      或核心功能

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

      所以如果我理解正确(!?),则不需要一些自定义代码/模块

      【讨论】:

      • 实际上,随着基本角色的扩展,例如“经过身份验证的用户”可以是“付费”或“非付费”用户,根据这两个用户,他还应该看到不同的块。
      • 好的,所以给用户一个特定的角色,不管他们是否付费是没有选择的?
      • 不是真的原因再次有两种类型的付费用户,一种购买了一年会员,另一种购买了月会员(以后他们也可以在会员类型之间切换)。这些角色太复杂,无法在面板中扩展它们。这就是为什么我希望使用一个函数并指定一个特定类型的用户并在块之间切换。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多