You are here

7 创建自己的page.tpl.php

admin 的头像
Submitted by admin on 星期三, 2015-07-15 09:52

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

现在我们要做的工作,是将静态HTML页面body里面的代码全部复制到page.tpl.php文件里面来,这里的HTML是从login.html里面复制过来的。我通常将这些静态的HTML放到注释的后面,原来代码的前面。我们要将里面的静态HTML,替换成对应的变量了。

这是没有替换前的样子:

1.png 

   我们里面的代码折叠了起来。

 

我们现在开始替换,首先看logo,原来是这样的:

<div class="logo"><span>SNT</span>代理</div>

我们看到logo是文字形式的,我们这里把它处理成为区域的形式了,这是替换后的样子:

<div class="logo"><?php print render($page['logo']); ?></div>

 

我们依次这样替换,这是第一轮替换后的样子

2png.png 

3.png 

我总是把主内容区域的输出,放在最后才替换。先易后难。我们现在来看主内容这块,首先是面包屑导航。

<p class="daohang"><a href="#">首页</a> > <a href="#">业务支持</a></p>

我们将其替换为:

  <?php if ($breadcrumb): ?>

           <p class="daohang"><?php print $breadcrumb; ?></p>

  <?php endif; ?>

Drupal里面,常使用这样的if语句,来输出变量,这样在变量为空的时候,相关的HTML也就可以不输出了。我们来看一下核心的代码:

4.png 

这里面输出了变量$messages,我们这里也把这个变量输出来,然后放到面包屑代码片段的下面。很多人做项目的时候,经常把这个给忘记了。

接下来,我们将这段HTML删除

5.png 

这就是主内容区域所在的位置。然后在同样的位置,将这段代码复制粘贴进来:

        <?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>

        <a id="main-content"></a>

        <?php print render($title_prefix); ?>

        <?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>

        <?php print render($title_suffix); ?>

        <?php if ($tabs): ?><div class="tabs"><?php print render($tabs); ?></div><?php endif; ?>

        <?php print render($page['help']); ?>

        <?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>

        <?php print render($page['content']); ?>

        <?php print $feed_icons; ?>

如果你对这些变量不熟悉的话,没有关系,我建议开始的时候把它们都输出出来,当我们发现信息显示的多了的时候,再删除相应的变量。$title是负责输出标题的;$title_prefix$title_suffix是标题的前缀和后缀;$tabs用来输出标签,我们平时看到的查看、编辑标签,就是通过这个变量输出的;$action_links是动作链接,比如管理内容页面的添加内容链接,就是通过这个变量输出的;'highlighted''help'是两个辅助性质的区域,核心模板文件里面带的,我建议,我们这里把这两个区域也加上;$feed_icons是用来输出RSS订阅链接的。

我们现在,就在snt.info文件里面把'highlighted''help'这两个区域给加上:

regions[highlighted]           = Highlighted

regions[help]           = Help

到此为止,我们的这个page.tpl.php基本上就替换完了。现在我们可以把这个模板文件中的原来复制过来的代码给删除了,不然内容会重复的显示。删除完毕,保存page.tpl.php

讲到page.tpl.php的时候,有人问过这样的问题,render的用法,以及与drupal_render之间的区别。其实我们可以看一下render的源代码,比较简单:

function render(&$element) {

  if (is_array($element)) {

    show($element);

    return drupal_render($element);

  }

  else {

    // Safe-guard for inappropriate use of render() on flat variables: return

    // the variable as-is.

    return $element;

  }

}

   如果是数组的话,就是用drupal_render输出,否则直接返回。在Drupal6的时候,对于页面回调,我们通常这样写代码:

$output = '';

$output .= '123456';

return $output;

 

但是在Drupal7下,标准的格式是这样的:

  $render_array = array();

  $render_array['#markup'] = '123456';

  return $render_array;

返回的是数组的形式,不过在Drupal7下,也可以返回字符串的形式,这是对Drupal6原有用法的一个兼容,render函数其实就是负责这一兼容工作的,就是说,在返回字符串的情况下,也能正常工作。


Drupal版本: