滚动
1.6. 产品与分类 —— 创建数据库表
在创建商品和分类功能之前,让我们先思考一下,客户和网站管理员需要哪些信息。我们必须提供足够的商品信息:包括商品名称、商品详细描述、商品价格。我们还可以展示商品的主图和附加图片。为了计算运费,可能还需要商品重量;为了防止超卖,还需要库存数量。对于管理员而言,还需要商品的 ID 以及供搜索引擎使用的可读 URL(即“伪静态链接”)。
最终,我们至少需要以下字段:
字段 | 说明 |
ID | 商品的内部编号 |
Name | 商品名称 |
Slug (ЧПУ) | 供搜索引擎使用的可读 URL |
Description | 商品详细描述 |
SKU | 商品编号(用户可见) |
Price | 商品价格 |
Stock | 库存数量 |
Primary image | 主图 |
Additional images | 附加图片 |
后续文章中我们将扩展此字段列表,目前这些已经足够使用。
商品分类表应包含以下字段:
字段 | 说明 |
ID | 分类的内部编号 |
Name | 分类名称 |
Description | 分类描述 |
Slug (ЧПУ) | 搜索引擎友好的 URL |
我们本可以立即实现用于显示商品和分类的数据结构及功能,但这样会失去灵活性。网站中的许多内容类型有共同属性。如果我们提取这些共性并创建一个抽象内容类型,我们的框架将更加灵活,可以在不同内容类型中复用功能,而无需重复代码。这样的共用功能包括:
- 内容版本控制
- 访问权限控制
- 页面、商品的评论功能
- 页面与商品的评分系统
页面 (Pages)
页面用于显示网站的静态内容,如“联系我们”、“配送与支付说明”等。这些页面的数据结构如下:
字段 | 说明 |
Name | 页面名称 |
Slug (ЧПУ) | 页面 URL |
ID | 页面内部编号 |
Heading | 页面的 <h1> 内容 |
Title | 页面的 <title> 内容 |
Content | 页面正文内容 |
Keywords | meta 关键字标签内容 |
Description | meta 描述标签内容 |
内容 (Content)
页面是我们将要扩展的主要内容类型。当需要更多字段时,我们将在此基础上扩展。分类页面本质上也是一种页面,只是需要更多字段以实现与商品的关联。
字段 | 说明 |
ID | 内部编号 |
Name | 内容标题 |
Slug (ЧПУ) | 可读 URL |
Content | 内容正文 |
Type | 内容类型(例如 page、product、category) |
Order | 内容排序字段(例如菜单项顺序) |
Parent | 父级内容,用于层级关系,如子分类或页面目录 |
Meta keywords | 关键词 |
Meta description | 描述信息 |
Date created | 创建日期 |
Creator | 内容作者 |
Active | 是否向访客显示内容 |
Secure | 权限字段,例如仅注册用户可查看 |
修订版本 (Revisions)
Drupal 拥有版本控制系统,我们也将实现类似的内容修订机制。
字段 | 说明 |
ID | 内容内部编号 |
Current revision | 当前修订版本号 |
现在我们已经规划好了内容类型,可以开始创建数据库。每种类型将对应一张独立的表。最终我们会得到以下数据表:
表名 | 说明 |
Content | 用于存储内容的活动版本及固定信息,如作者等。 |
Versions | 用于存储内容的不同版本数据。 |
Content types | 记录框架的内容类型,并将内容与类型关联。 |
Products | 用于扩展商品的详细信息。 |
Revision history | 保存修订版本历史记录。 |
Content 表结构
网站的所有内容都存储在此表中。如果我们想扩展某种内容类型,将在单独的表中实现。例如,商品将存储在 Content 表中,并通过 ID 与 Products 表关联。
字段 | 类型 | 说明 |
ID | Integer (auto increment) | 用于与其他表关联的主键 |
Current_revision | Integer | 与版本表关联 |
Active | Boolean | 内容是否已发布 |
Secure | Boolean | 是否仅登录用户可访问 |
Parent | Integer | 父级内容 ID |
Order | Integer | 排序字段 |
Author | Integer | 创建该内容的用户 ID |
Type | Integer | 内容类型 ID |
Path | Varchar | 存储可读 URL (slug) |
现在我们可以执行以下 SQL 语句来创建 Content 表:
CREATE TABLE `content` ( `id` int(11) NOT NULL AUTO_INCREMENT, `current_revision` int(11) NOT NULL, `active` tinyint(1) NOT NULL, `secure` tinyint(1) NOT NULL, `parent` int(11) NOT NULL, `order` int(11) NOT NULL, `author` int(11) NOT NULL, `type` int(11) NOT NULL, `path` char(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;