【问题标题】:Moving a block (view) into a different region programmatically (Drupal 7)以编程方式将块(视图)移动到不同的区域(Drupal 7)
【发布时间】:2017-10-11 11:37:17
【问题描述】:

我使用 Drupal 7 的 Commerce Kickstart Distribution。我希望将搜索栏分配到首页上的不同区域,而不是在我的主题中的所有其他站点上。我使用了这里显示的方法:http://saw.tl/drupal/programmatically-manage-drupal-blocks.html

function mytheme_hook_block_info_alter(&$blocks, $theme, $code_blocks) 
{
  if(drupal_is_front_page()) {
      $blocks['views]['-exp-display_products-page']['region'] = "branding";
   }
}

这是我的 template.php 中的函数。我知道搜索栏是使用视图模块创建的,不是“默认块”。

搜索栏的 Block 菜单中显示的名称是 Exposed form: display_products-page,我按照本教程选择的模块名称和机器名称 http://drupalchamp.org/node/166

但是,它根本不起作用。我没有收到任何错误或警告,当我加载首页时,该块只是停留在默认区域。

【问题讨论】:

    标签: php drupal drupal-7 theming commerce-kickstart


    【解决方案1】:

    您可以使用 Context 模块根据某些条件将块添加到不同的区域:

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

    非常强大且易于使用的模块,所以我建议它。

    如果您更喜欢以代码形式执行此操作,您可以获取块的内容并直接从模板打印,具体取决于检测到的页面。比如:

    $block = module_invoke('views', 'block_view', 'block_machine_name');
    print render($block);
    

    当然你会有条件地执行它......

    【讨论】:

    • 刚安装,好像正是我需要的。我还遇到了“上下文块禁用”插件。我想我太专注于以编程方式进行操作,并没有先寻找模块。谢谢。
    • 是的,它有一堆子模块,所以选择你需要的。哦,如果你需要的话,请将我的答案标记为解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2023-04-06
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多