[2009/04/16]发布《Drupal项目实战-公司订餐系统(四)》本博客内容均为原创(Original),如有雷同,纯属巧合。转载请注明出处。同时欢迎学术探讨与批评。

2008年12月30日星期二

Drupal项目实战:公司员工订餐系统(二)

创建菜单节点
首先创建菜单(Food)的节点类型,增加几个字段后,效果见下图。由于属基本操作,就不再赘述了。
在完成菜单类型的创建后,发现默认的节点显示页面,实在是比较简陋.这需要我们自己动手来完善一下.在开始之前,必须介绍一个很重要的模块-Devel(http://drupal.org/project/devel).此模块为开发者必备,主要功能有:
  • 查看节点的变量
  • 清空缓存(模块的)
  • 生成测试数据(节点等)
我常用的是这几个,对于D6,它还可以调试主题模板,比较有效.不过,这个模块有时会用其它模块的Javascript脚本有冲突,目前还不太明确与哪些模块有冲突.如果朋友们在调试Drupal时发现莫名其妙的JS问题,可以考虑先关闭Devel模块,然后再试.

开发主题,当然还需要能方便查看和动态更改CSS的浏览器支持.Firefox+Firebug组合当仁不让成为现时的首选.不过目前,IE8和Chrome也正努力赶上.IE8中按F12可以调出和IE Developer Tools相似的HTML,CSS代码调试框,基本上Firebug功能类似.Chrome目前可以定位HTML页面元素,以及查看其CSS样式,不过还不能即时修改.选择哪个就看大家自己的喜好了.一般情况下,我们都要调试Firefox和IE下的兼容性.尤其是Div+CSS的布局,如果没有很高的技巧,确实需要调试很长时间。

创建菜单显示模板
在开始创建之前,当然要进行设计.我们的项目目前没"网页设计",那我们就直接挑一个差不多的作参考吧。如果你的项目组中有美工人员,这部分应该交给他/她去做了。对于Drupal页面的设计,我的意见是:尽量符合Drupal默认的页面布局,这样交给Drupal开发者时,只需要做少量修改即可。否则就需要花很多时间在主题和模板开发上.毕竟CSS技巧高的又懂Drupal的同志,还是不大容易找到的。
我看中了一个国外网站的"菜单"信息的显示页面,分享一下:http://www.foodnetwork.com/recipes/paula-deen/christmas-ham-recipe/index.html.截图如下。
对于Drupal项目,我认为首先应该开发针对不同的节点类型的页面的显示模板,即:node-content_type.tpl.php。它是显示的模板,它包含节点的各个元素的显示方式的设定(如标题、内容、以及用CCK生成的字段等),但不对整个页面的布局进行设定。此处需要提一个需要注意的问题:通过Devel的"Dev load"查看的变量,并不是在node.tpl.php中直接可用的变量。它显示的是通过node_load函数得到的$node节点,与node.tpl.php中的$node节点还是有区别的。同时,大家在使用节点变量时,也可以参考一下$node->content变量中的内容,它是经过Drupal处理后的HTML内容。

关于Drupal主题模板开发的顺序,下面是我的看法:
  1. 开发节点类型的模板:node-content_type.tpl.php
  2. 开发评论的模板:comment.tpl.php
  3. 开发普通页面的模板:page.tpl.php
  4. 开发首页模板:page-front.tpl.php
  5. 整理CSS类别和区块
  6. 制作全站的CSS,写入style.css,或创建单独的样式表文件,在style.css中import.
  7. 为生产站点作CSS优化:如使用Drupal的CSS Aggregation将CSS文件整合为一个文件或重新设置每页加载的CSS文件。

我喜欢的开发顺序是:先把所有的HTML写出,然后创建好每个CSS类和ID等,最后再进行“上色”。流程如下所示:
原始页面
第一次布局修改:
  • 分左中右三栏
  • 左侧为图像,中间为基本信息,右侧为评论。
第二次布局修改
加入样式

采用table作布局
做成像cnbeta.com那样的评论
Drupal默认的评论在最下方,我想把它放在页面的右侧,这样用户打开这个页面,无需浏览到底部,就可以看到最新的评论。cnbeta.com的形式也不错,它将“支持”者多的评论,放置在右侧。下面我们看看在D中怎样实现。
按正常思路,评论就应该在page.tpl.php中设置。但是,在page.tpl.php中只能找到$content变量。因此,将评论更换显示位置就显得有点“棘手”了。我目前的解决方法是:使用Views创建某个节点的评论列表,然后创建自定义模块,调用views_build_view函数,将列表以区块的形式,放置在右侧区域。那么,这部分应该以区块形式存在,放置在right区域,也无须对node.tpl.php进行修改了。
(未完待续)

相关函数讲解
theme_image($path, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE)
用途:显示图像,生成IMG标签,同时可以设置style属性——通过设置$attributes数组。
参数解析:
$path:图像路径。如本例中,如果为节点创建了Image Field,那么可以将$field_food_pic[0]['filepath']作为参数传入。
$attributes:用于设置HTML标签的style属性。像这样使用即可——array('weight' => '200px', 'height' => '100px')。
$getsize:如果设置为TRUE,那么将会按照图像文件的实际长和宽来显示图像,通过$attributes设置的自定义长和宽就会失效。
int strtotime ( string $time [, int $now ] )
用途:将任何英文文本的日期时间描述解析为 Unix 时间戳。使用Drupal的Date field得到的日期是ISO日期格式的,如2008-10-20T10:20:20。大家可以发现多了一个“T”,因此我们需要先将这个日期转化为UNIX时间戳,然后再转换为适当的日期格式。
array get_defined_vars ( void )
用途:此函数返回当前页面中所有可用的变量。调试佳品。

3 条评论:

  1. 项目实战:很专业,一定要坚持做完。

    回复删除
  2. 改变评论的位置可以参考:http://drupal.org/node/122240#comment-649749

    另外,谢谢您的文章,受益匪浅。

    回复删除
  3. 也非常感谢你的分享。原来更改Comment的位置可以通过在node.tpl.php中的适当位置加入下面的代码,来显示评论。

    <?php
    if (function_exists('comment_render') && $node->comment) {
    print comment_render($node, $node->cid);
    $node->comment = NULL;
    }
    ?>

    回复删除