如何以编程方式禁用Drupal 7页面上的区域?

| 我正在一个模块上工作,该模块的页面必须没有区域或多余的内容。一种“请稍候”页面。 如何将所有多余的内容(区域菜单等)划掉?我认为Panels具有此功能,但我找不到它使用的代码段。 另一方面,模块是否可以指定特殊的自定义页面?例如维护页面?     
已邀请:
您可以为要隐藏区域的页面专门创建一个额外的page.tpl.php。命名原理类似于节点的命名原理。 假设您有一个网址,网址为example.com/content/contact。名为page--content--contact.tpl.php的模板将为该页面提供服务,并且以该url开头的任何页面(即example.com/content/contact/staff页面)也将使用该模板(我认为)。 检查body元素的类,以获取可为模板命名的线索,大多数主题都会打印出来。在上面的示例中,body元素将包括class page-content-contact。     
page.tpl.php方法不灵活。它基于表示逻辑。您应该将hook_page_alter()用于业务逻辑解决方案。例如:
function yourmodulename_page_alter(&$page) {
  if (current_path() == \'node/add/yourcontenttype\') {
    unset($page[\'sidebar_first\']);
  }
}
还要看看非常强大的上下文模块。     
我唯一能想到的就是在您的page.tpl.php文件中编写检查,以查看您是否在该“页面”上进行讨论,而不是打印出区域/菜单,或者使用其他模板。 http://drupal.org/node/223440     
如果要在渲染块之前执行此操作:
/**
 * Implements hook_block_list_alter()
 *
 * Hides the right sidebar on some pages.
 */
function THEME_NAME_block_list_alter(&$blocks) {

  // This condition could be more interesting.
  if (current_path() !== \'node/add/yourcontenttype\') {
    return;
  }

  // Go through all blocks, and hide those in the \'sidebar_second\' region.
  foreach ($blocks as $i => $block) {
    if (\'sidebar_second\' === $block->region) {
      // Hide this block.
      unset($blocks[$i]);
    }
  }
}
注意:有趣的是,无论您在主题中还是模块中使用此钩子,它似乎都可以工作。 (如果我错了,请纠正我)     

要回复问题请先登录注册