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

2009年1月17日星期六

Drupal项目实战-公司订餐系统(三)

上节回顾

上一节的进展为: 

  • 创建了Food的Content type
  • 使用CCK创建了Food的相关字段
  • 修改了node-food.tpl.php

目前,简单的菜单管理功能模块可以说基本上完成了,除了权限控制部分。我认为权限控制应该在所有系统功能完成后再统一考虑,目前还是先实现功能为主。那么接下来,就可以进入订餐功能模块的开发了。本文我们就开始订餐功能的设计和开发。

订餐功能模块分析

公司员工在浏览了菜单后,可以选择订购此午餐,同时设定购买数量。由于菜单是一个套餐,因此通常一个员工只会选择一种套餐。但是,此处我认为应该在一定程序上考虑系统的可扩展性,也就是说,应该考虑一个用户订两个或多个“套餐”的情况。因为很显然的是,员工小A想替小B和小C订餐的话,那么使用小A的帐户就需要同时订购三种不同的套餐。

其实此处就存在一个实际的业务模型和系统模型间的映射关系。如果只是从“一个员工中午只吃一种套餐”的常识来想,将每个“帐户”设定为“只允许订购一种套餐”的话,做成的系统就明显不适合使用了。这点也提醒做系统设计的朋友们要注意。

由于目前本系统只限于某公司员工内部使用,因此不存在需要填写送餐地址的信息。同时为了方便起见,暂时不考虑网上支付。这样问题就简化了。另外,用户在订餐时,通常会按照个人口味提出一些建议,因此系统还需要提供一个文本框,用于用户对订餐进行一些“补充说明”。

总结一下,订饭的流程如下:

  1. 浏览菜单并选择“订购”某套餐
  2. 设置订购数量
  3. 输入补充信息
  4. 查看购物车并确认生成订单
  5. 查看订单状态(已收到订单、已发货、收货确认)

图!图!图!

我认为任何语言的描述都不如页面草图来的直接。UML和简洁的文字都不是和客户交流的最好方式。看得见的页面图才是最有效的办法。

上面几张图演示了在浏览套餐菜单后,可直接订餐的全部过程。
(未完待续)

7 条评论:

  1. 方老師好~想詢問那麼為什麼您能將縮略圖的部位固定秀在某個地方,而文字說明在圖的旁邊呢?

    回复删除
  2. 你好。在Drupal中,可以通过修改node.tpl.php的模板文件来实现这样的需求。我使用CCK创建了Image的Field,然后在node-food.tpl.php模板中,使用table或div+css的方式布置缩略图和文字内容。缩略图和文字内容均是$node实例的属性,你可以在node.tpl.php中任意处使用。

    回复删除
  3. 请问这些页面示意图是用什么画的/做的?

    回复删除
  4. Hello, Betty. 页面示意图是用VS做的。

    回复删除
  5. 方老師您好:
          那意思是指使用 print $images 這類的方式將縮略圖顯示出嘛?
    -----------------------------------------------------------------------
    覺得不太明白node-food.tpl.php的作法說!
    ------------------------------------------------------------------------
    以node-food.tpl.php的頁面主要是給訂餐系統這頁的頁面專用的頁面。
    那麼它要如何得知我用cck創建出的欄位的值呢?
    是不是指field(自已命名出的值呢)。
    若我的縮圖取為Field_images_01在node-food.tpl.php的頁面就得印出 print $Field_images_01$
    是指這樣的作法嘛?
    而且覺得若view想合node-food.tpl.php作結合的話又得怎結合呢?
    如果我用view列出產品清單,之後點了某一產品清單則列出像方老師你做的產品內頁。
    但方老師你的產品內頁是以node-food.tpl.php製作的。
    那麼view出來的產品清單再關聯到產品內頁時,要怎製作呢?
    老師不好意思問那多問題,只是被drupal弄的好昏哦!唔~~謝謝您哦~~

    回复删除
  6. 你好,node-food.tpl.php模板页,是所有content type为food的节点显示全部内容时的页面模板。你从views中的列表打开产品内页,还是会调用node-food.tpl.php模板页来生成产品内页的,这是由drupal自动完成的。
    ------------------------------
    对于cck创建的字段,比如你创建的image field的名称为field_images_01,那么在node.tpl.php页面,应该是$node->field_images_01为图像对像,你可以使用devel模块中的node render选项卡,来查看$node都有哪些属性,就会找到了。或直接在node.tpl.php中用var_dump($node),也可以查看$node的完整属性及结构。
    ------------------------------
    欢迎讨论交流,不必客气,呵呵!过段时间我会将这个项目的源代码发布出来,到时你会看到node-food.tpl.php的源码,应该较容易理解了。

    回复删除
  7. 方醫生您好:
    不知有無node-food.tpl.php的源码可以給我們看呢? >w<…謝謝

    回复删除