Drupal 7 - 向页面添加块


Drupal 7 - Adding blocks to a page

这是我目前的设置。

我创建了一个包含以下区域的新自定义主题。

regions[header] = Header
regions[content] = Content
regions[footer] = Footer

页面.tpl.php

    <div id="Header">
        <div class="row">
            <div class="span12" style="text-align:center;padding-top:20px;">
                <div><a href="/"><img src="logo.png" width="150" height="150" alt="KT Logo"></a></div>
            </div>
        </div>
        <div class="row">&nbsp;</div>
    </div><!-- /Header -->
    <div id="Navigation">
        <div class="row" style="text-align:center;">
            <div class="span12" style="text-align:center;">
                <?php print render($page['header']); ?>
                <hr class="style-two">
            </div>
        </div>
    </div><!-- /Navigation -->
    <div id="Content">
        <div class="row">&nbsp;</div>
        <div class="row">
            <div class="span8 offset1">
                <h1><?php print $title; ?></h1>
            </div>
        </div>
        <div class="row">&nbsp;</div>
        <div class="row">
            <div class="span10 offset1">
                <?php print render($page['content']) ?>
            </div>
        </div>
        <div class="row">&nbsp;</div>
    </div><!-- /Content -->
    <footer>
        <div class="row">
            <div class="span12">
                <img src="separator.png" alt="separator">
                <?php print render($page['footer']); ?>
            </div>
        </div>
        <div class="row">&nbsp;</div>
    </footer>
</div><!-- /container -->

这一切都运行良好,我已经很好地创建了几个基本页面。当我想在页面上有一个带有 2 个块的自定义"内容类型"时,问题就来了,一个在左侧有主要内容,一个在右侧有一个侧边栏。现在我并不完全了解这些区域是如何工作的。

我想要类似sidebar_second效果的东西,但我不确定它会如何适应我的宽度。这是我所在地区的屏幕截图。http://goo.gl/XFVnl

所以我认为我需要更改我的内容区域的显示方式,以便它可以包含侧边栏区域?

感谢您的任何帮助

特定于

内容类型的模板通常是node.tpl.php文件,页面模板是page.tpl.php文件。

当您使用 node.tpl 时,已经包含 page.tpl.php 文件.php

首先,将所有区域添加到其主题的 .info 文件中。这直接影响哪些区域在块管理页面中可用。不必将您定义的所有区域(在 .info 文件中)显示在所有 page.tpl.php 文件中。

由于 page.tpl.php 文件中有 3 个区域,请保留它,它将继续工作。但是要覆盖特定节点类型的 page.tpl.php,您必须在主题的模板.php文件中设置它们。你简单地"要求"Drupal使用这个page.tpl.php文件是节点类型是一个"页面"(例如)。

将其添加到模板.php文件中。如果节点类型是(机器名称)是"book",Drupal将不会在page--node-book.tpl.php文件中查找替代的page.tpl.php文件。

<?php
function themename_preprocess_page(&$variables) {
  if (!empty($variables['node'])) {
    $variables['theme_hook_suggestions'][] = 'page__node_' . $variables['node']->type;
  }
}
?>

现在,您可以将 page.tpl.php 文件复制到 page--node-[type].tpl.php 并在那里进行更改。您在此文件中输入的任何内容都将用于该节点类型的页面模板。(注意:"页面"和"节点"之间有 2 个连字符,"节点"和"[type]"之间有一个连字符)如果看不到更改,请记住清除缓存。

我相信

第一步是在.module文件中声明一个sidebar区域以及其他区域,即使它不会显示在每个页面上。

在您的页面模板中,您可以检查(伪代码)

if (isset($page['sidebar'])) {
   <div sidebar float left theme this how you want>
     print render($page['sidebar']);
   </div>
}

现在,当您创建块时,您可以指定要在其上显示的特定路径或要在其上显示的特定内容类型。 上面的代码将检查页面在您的侧边栏中是否有块并相应地呈现它。

如果您在drupal堆栈交换上发帖,您可能会更有可能获得答案。https://drupal.stackexchange.com/