Descartes 的页面模板

我们已经创建了一个主题——Descartes,并添加了一些自定义CSS。现在,我们将修改 Bluemarine 主题提供的一个模板。我们将修改页面模板,让右边栏(右区域)可以浮动。

要做的第一件事,是把 Bluemarine 的页面模板拷贝到我们的 descartes/ 主题目录下:

 

$ cp drupal/themes/bluemarine/page.tpl.php \
drupal/sites/all/themes/descartes

现在我们有了一份模板拷贝,可以根据我们的需要修改。按照主题继承原则,这个新模板将覆写 Bluemarine 的 page.tpl.php 文件。现在,主题系统将使用Descartes 的 page.tpl.php,并忽略父主题 Bluemarine 的模板。

 

浏览一下这个模板,我们可以看到前面讨论过的很多变量。没有必要掌握这个模板的全部细节。我们将焦点放在高亮的部分。

 

<?php
   // $Id: page.tpl.php,v 1.25 2007/09/05 08:42:02 dries Exp $
   ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
      lang="<?php print $language->language ?>" 
      xml:lang="<?php print $language->language?>">
  <head>
    <title><?php print $head_title ?></title>
    <?php print $head ?>
    <?php print $styles ?>
    <?php print $scripts ?>
    <script type="text/javascript">
      <?php /* Needed to avoid Flash of Unstyle Content in IE */ ?>
    </script>
  </head>
  <body>
    <table border="0" cellpadding="0" cellspacing="0" id="header">
      <tr>
	<td id="logo">
	  <?php if ($logo) { ?>
	  <a href="<?php print $base_path ?>"
	     title="<?php print t('Home') ?>">
	    <img src="<?php print $logo?>" alt="<?php print t('Home') ?>" />
	  </a><?php } ?>
	  <?php if ($site_name) { ?>
	  <h1 class='site-name'>
	    <a href="<?php print $base_path ?>" 
	       title="<?php print t('Home') ?>">
	      <?php print $site_name ?></a></h1><?php } ?>
	  <?php if ($site_slogan) { ?><div class='site-slogan'>
	    <?php print $site_slogan ?></div><?php } ?>
	</td>
	<td id="menu">
	  <?php if (isset($secondary_links)) { ?>
	  <?php print theme('links', $secondary_links, 
		array('class' => 'links', 'id' => 'subnavlist')) ?>
	  <?php } ?>
	  <?php if (isset($primary_links)) { ?>
	  <?php print theme('links', $primary_links, 
		array('class' => 'links', 'id' => 'navlist')) ?>
	  <?php } ?>
	  <?php print $search_box ?>
	</td>
      </tr>
      <tr>
	<td colspan="2"><div><?php print $header ?></div></td>
      </tr>
    </table>
    <table border="0" cellpadding="0" cellspacing="0" id="content">
      <tr>
	<?php if ($left) { ?><td id="sidebar-left">
	  <?php print $left ?>
	</td><?php } ?>
	<td valign="top">
	  <?php if ($mission) { ?><div id="mission">
	    <?php print $mission ?></div><?php } ?>
	  <div id="main">
	    <?php print $breadcrumb ?>
	    <h1 class="title"><?php print $title ?></h1>
	    <div class="tabs"><?php print $tabs ?></div>
	    <?php print $help ?>
	    <?php if ($show_messages) { print $messages; } ?>
	    <?php print $content; ?>
	    <?php print $feed_icons; ?>
	  </div>
	</td>
	<?php if ($right) { ?><td id="sidebar-right">
	  <?php print $right ?>
	</td><?php } ?>
      </tr>
    </table>
    <div id="footer">
      <?php print $footer_message ?>
      <?php print $footer ?>
    </div>
    <?php print $closure ?>
  </body>
</html>

上面代码中高亮的表格提供了页面的基本布局。它有三个单元格,都在同一行。每个单元格对于一个区域:left, content, 和 right。

 

提示:CSS与左、右区域。注意,虽然左、右区域存储在 $left 和 $right 变量中,但相应容器的 ID 命名为 sidebar-right 和 sidebar-left。前面我们开发只用CSS的主题时,曾经为它们添加风格。

原来的布局是三列的表格布局,可是现在我们只要两列:一个用于 right 区域,另一个用于 content 区域。

left 区域将放在一个 <div/> 元素里,放在 content 部分里面,我们将修改new.css 样式表,把这个区域移动到右侧上方。

为了实现这一点,我们将去掉如下所示的第三个 <td/> 元素:
 

<?php if ($right) { ?><td id="sidebar-right">
  <?php print $right ?>
</td><?php } ?>

 

注意,只有当 $right 变量有定义时,第三列才显示出来。当我们把 right 区域移动到表格的第二列时,将保持这个特性。

 

<td valign="top">
  <?php if ($mission) { ?>
  <div id="mission">
    <?php print $mission ?>
  </div>
  <?php } ?>
  <div id="main">
    <?php if ($right) { ?>
    <div id="sidebar-right">
      <?php print $right ?>
    </div>
    <?php } ?>
    <?php print $breadcrumb ?>
    <h1 class="title"><?php print $title ?></h1>
    <div class="tabs"><?php print $tabs ?></div>
    <?php print $help ?>
    <?php if ($show_messages) { print $messages; } ?>
    <?php print $content; ?>
    <?php print $feed_icons; ?>
  </div>
</td>

我们的修改只是增加了 5 行代码。现在,如果 $right 变量有定义,模板将把
区域的内容封装在一个 <div/> 元素中,ID 为 sidebar-right, Bluemarine 风
格中的<td/> 元素用的也是这个 ID。

 

如果我们查看站点,将能看到这次小小修改的效果:

插图 3-10

修改的效果如何呢?首先,顶端橙色的使命部分现在横跨屏幕的三分之二,跨在了右边栏的上方。

回顾一下上面的代码,我们就知其所以然了:<div id="mission"/>现在位于<div id="sidebar-right"/> 元素的上方。

第二个不同是文本的回绕。在原来的模板中,右边栏一直延伸到表格的底部。现在它只延伸到足够显示自己内容的位置。中央部分(用于显示 $content)的材料在右边区域的下方可以延伸到最右边了。

提示:请记住,Drupal缓存主题信息。为了能看到修改的效果,你需要用Devel 模块的工具清空缓存。

如果想要更改区块、盒子、评论、或节点的 HTML 代码,可以使用同样的策略。从父主题那里拷贝模板,根据需要修改它们。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|