如何显示要在Drupal的某些页面中显示的块?


10

考虑一个模块荒漠:

  • 第1页:- deserts/*
  • 第2页:- deserts/*/*
  • 第3页:- deserts/*/*/*

动态内容...

我有三个方块,分别是a,b和c:

  • 块a应该仅在第1页中显示
  • b块应仅在第2页中显示
  • 块a应该仅在第3页中显示

这种限制应该怎么做?


Drupal 6或7?6使定义PHP代码更容易实现块可见性。
Mołot

这是drupal7 molot
Ajmal

2
@Ajmal如果您可以评论给定的答案并解释为什么它们没有帮助,这将很有用。人们会(自然地)认为投票最正确的答案是正确的,如果您没有解释为什么该答案对您不起作用,则不会继续提供替代方法。
克莱夫(Clive)

我有desert/*/*/ desert/*/edit我的区块应显示的所有 页面 desert/*/*desert/*/edit 在这种情况下它对我不起作用
。–

1
也许只有我一个人,但这似乎令人困惑。 *表示通配符。因此,要求提供解决方案的地方desert/*/*暗示该方块显示为desert/*/edit或就此而言desert/*/whatever
cdmo 2013年

Answers:


18

使用上下文模块。尽管我通常不喜欢该模块,但这是派上用场的情况之一。

为路径添加条件。因此,如果我在第1页上想要一个块,而不在第2或3页上,那么我将这样写路径,每个块一个:

个案1-A座

沙漠/ *
〜沙漠/ * / *
〜沙漠/ * / * / *

个案2-B座

〜沙漠/ *
沙漠/ * / *
〜沙漠/ * / * / *

案例3-C区

〜沙漠/ *
〜沙漠/ * / *
沙漠/ * / * / *

〜表示在这种情况下要排除。之后,将块添加到您希望其显示的区域。您还可以重新添加可能会被排除的特定路径,反之亦然。


在这种情况下适用。但是我们想针对所有可能的情况修复此问题,这是原始解决方案,在某些情况下它不能很好地解决问题。我已经在上面解释了这种情况。因此,请参考
Ajmal

我更新了答案,因此希望可以更好地解释它。您将为每个块制定一条规则。
kyletaylored 2013年

4

您可以使用“此PHP代码在其上返回TRUE的页面(仅限专家)”的可见性选项。但是,恕我直言,将PHP代码放入数据库中是一种不好的做法。相反,请考虑使用诸如扩展块可见性模块之类的东西或hook_block_list_alter()诸如

function MODULE_block_list_alter(&$blocks) {
  global $theme_key;
  foreach ($blocks as $key => $block) {
    if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
      // This block was added by a contrib module, leave it in the list.
      continue;
    }
    switch ("{$block->module}_{$block->delta}") {
      case "moduleA_deltaA":
        if (arg(0) != 'deserts' || !arg(1) || arg(2)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleB_deltaB":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || arg(3)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleC_deltaC":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || !arg(3)) {
          unset($blocks[$key]);
        }
        break;
    }
  }
}

注意:可能有一种更聪明的方法来实现可见性规则。


0

您应该能够使用“ 规则”块可见性模块来使其工作。以下是其项目页面的引文:

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

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

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

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

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

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

这样,按照上面的“ 如果可以使用规则来执行,则可以使用它来控制块的可见性 ”,您已经减少了问题,使规则可以拦截与您的page1,page2和page3对应的各种URL。

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.