You are here

主题制作(以Vancl为例)

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2010-01-25 15:00

我们前面提到了,商品目录的问题,它涉及到我们卖什么东西的问题。还有一个问题,也是许多人都关注的,那就是主题制作。通常情况下,在网站建设的前期,会有专门的人设计出来效果图,比如PSD图,之后有美工将其转化为静态的HTML。有了静态的HTML,在进行Drupal网站建设的过程中,还需要将这些静态的HTML转化为Drupal的主题。

 
       通常,向Drupal主题转化的过程不是一步就能完成的,它需要经过多步的迭代。首先需要考虑的是整体的布局,也就是根据静态页面,确定区域的划分。大致需要多少个页面模板文件。
 
       通常主题在开始的时候,只能做出来一个大致的样子,包含页面模板,节点模板,区块模块。这样就完成了主题制作的第一步工作。
 
       接下去就是反馈,Drupal主题与效果图的差距,以及在各个浏览器之间的兼容性。经过细致的调整以后,客户基本上就比较满意了。
 
       这个时候,需要解决的就是局部,个别页面的实现了。因为有些部分是使用的Drupal默认的输出。我们需要对这些进行覆写,有两种方式,一种是CSS的方式,一种是覆写markup。
      
       我们假定Vancl.com就是最终的效果图。也就是我们有了静态的HTML了。大致的可以分为,首页,列表页面,产品页面。
 
    首页,产品页面其实是采用的上中下的结构。而列表页面中间采用了左右布局的方式。
       我们以列表页面为页面模板文件的标准。
 
    我们把女装频道的HTML保存到本地。并将其复制到Drupal的主题下面。首先创建主题的info文件,这里我们把主题的名字命名为了vancl。内容如下:
       ; $Id$
name = Vancl
description = 模仿凡客成品制作的Drupal主题,仅供zhupou教学,学习交流使用.
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[print][] = print.css
 
我们把女转频道的HTML复制一份,并将其重命名为page.tpl.php。如图所示:
我们打开page.tpl.php,将里面的静态内容替换为动态的Drupal变量。我们看到VANCl的HTML标签并不都是小写的。我们在我们的主题中需要把它转化为小写的。这是Drupal的习惯。
 
  
1.<STYLE type=text/css>中的文本将被首先删除。在我们不断删除静态的内容的,同时我们也需要分析页面中的大题布局。
 
2.最前面加上
<?php
// $Id: page.tpl.php$
?>
 
3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">保持不变。将来可能会对其作调整。注意这里使用的是Transitional,也就是说它并没有严格的遵守W3C规范。
 
4.删除注释:
<!-- saved from url=(0035)http://vancl.com/channel/women.html -->
 
 
5.将<HTML xmlns="http://www.w3.org/1999/xhtml">修改为<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">
我们在这里添加了xml:lang,lang,dir属性。这里面使用了页面变量$language。我们所用的是中文,其实这里可以忽略。但是把它带上,是一个好习惯。当我们访问zhupou.cn的时候,对应这段HTML代码的片段为:<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-hans" lang="zh-hans" dir="ltr">
xml:lang,lang表示语言的代码为zh-hans。Dir表示语言的方式,从左到右,ltr是left to right的缩写。.
 
 
6.<HEAD></HEAD>标签中的内容被删除了,将被替换为对应的PHP变量。我们先使用garland里面的代码。通常这是可以复用的。
<?php print $head ?>
    <title><?php print $head_title ?></title>
    <?php print $styles ?>
    <?php print $scripts ?>
 
我们使用FIREFOX打开女转频道的HTM,然后使用firebug来分析下面的HTML结构。这个时候我们发现,并不是所有的标签都是大写的,因为这里都是小写的。全部大写可能是IE保存HTM时做了修改。另外,在IE7下面查看页面源代码,有部分是小写,有部分是大写。我们先不管这个。
我们看到:
body里面的第一个div就是Head,Head里面又包含了两个div,分别为headTitle,tomid。headTitle里面包含了最顶部的导航。
我们可以把它处理为Drupal的菜单,显然这个不是主菜单,我们使用secondary link就可以了。这是Drupal自带的,能很好的解决这里的问题。
这样,这部分的代码就变为了
下面我们来处理tomid。
它下面包含了3个div,第一个为topMenu,第2个未命名,只带有样式,为了方便,我们可以为其取一个id。最后一个是tele-car。
       我们可以简单的将上面的3个DIV处理为3个区域,然后把对应的内容处理为区块,这样就简单很多。这样做有一个坏处,就是要对多个区块的模板文件进行覆写。其实我们还可以进一步的分析它的内部结构。继续看topMenu。
它包含了两部分,topleft,topright。Topright我们可以处理为一个区域。而topleft我们不能简单地将其处理为区域。
       它又包含了两部分。Lowel和site-nav.我们可以将site-nav处理为一个区域,而对于lowel,他还有内部结构。我们可以将其处理成为区域,但是我自己还想把它分解一下,显然,这里包含了logo。我们知道,Drupal中页面模板里面是有一个logo变量的。这个时候,作为一个Drupal程序员,我们就有点抱怨了,美工在设计HTML的时候,丝毫没有考虑Drupal的习惯。
       其实这也是Drupal强大的地方。我们完全可以做一个网站,让它看起来一点都不Drupal。
我们在这里把logo处理为页面变量,把welcome处理为一个区域。当然,welcome也可以处理为template.php文件中的一个硬编码的函数,然后在页面模板中直接调用这个函数。这段内容是动态的,没有登陆的时候显示为:
登录后显示为:
所以最好处理成为一个动态的区块。这样看起来,就让懂行的人觉得比较专业。我们暂时不用去考虑Vancl主导航的实现。那将是以后的事情了。
处理后的代码为:
 
第2个div,也就是没有名字的div,我们把它处理为一个区域,id名字为tophot。它里面包含了热门分类,和搜索。我们看到这个搜索是商品搜索,它不同于Drupal默认的搜索。我们需要对这个搜索进行定制。
 
tele-car也被处理为了一个区域tele_car。替换后的代码如下:
 
在接下来的代码中,有一个script,和一个object,也就是flash。我们直接将其删除,这不是我们学习的内容。
 

论坛:

xcccb 的头像

哦。。。

批量的问题我已经解决了。那个属性跟类别绑定的我也已经测试出来了。现在还有一个问题。就是我用了category 这个模块来代替taxonomy时。批量上传就又会出错了。。。麻烦啊。。这里我用category 模块来代替taxonomy的主要目的是想实现一个功能。就是我的分类有二级。当我点击其中一个大类时。在这个大类的页面的左侧。我只想让他显示跟这个大类有关的二级类别,其他的类别我就不显示了。网上找了一下。好像是说这个category模块可以实现。可我用了这个后。批量上传又出错了。希望楼主看一下有没有其他的方法,可以既实现我要的功能。在批量上传时又不会出错。。万分感谢。楼主的耐心指导!!!!