
Ubercart 是 Drupal 的一个在线商店模块。现在(截至 4 月 16 日)Drupal 8.x 版本的 Ubercart 可用模块还不多,但很快就会陆续出现,到时候就可以在 Drupal 8 上而不是 Drupal 7 上构建商店了。
https://www.drupal.org/project/ubercart
Ubercart 提供以下功能:
1. 商品分类与产品目录。
2. 购物车。
3. 订单处理。
4. 支付与配送模块。
5. 税费计算模块。
6. 库存管理模块。
7. 报表统计模块。
这些功能足以满足一个简单网店的需求,其他功能(如折扣、优惠券)可以通过附加模块实现:


Ubercart 的安装方式与普通模块相同:
第一组模块是安装时必需的:
Cart —— 购物车模块。
Country —— 针对特定国家的设置模块。
Order —— 订单管理模块。
Product —— 产品设置模块。
Store —— 商店的主要设置模块。
接下来是可选模块,可根据需要启用或不启用:


要在您的 Ubercart 商店中创建商品分类目录,首先需要启用 Catalog(目录) 模块:
在启用 Catalog 模块之前,最好先启用 Product(产品)、Store(商店) 和 Country(国家) 模块。
安装完成后,系统会自动创建一个用于产品分类的词汇表(字典) Catalog:
/admin/structure/taxonomy
进入术语(terms)列表,为产品添加几个分类。


我们之前分析的所有内容,都与早期版本的 Drupal 类似。但随着 Drupal 的发展,一切都变得不同了。虽然从外观上看,Drupal 仍然与 Drupal 7 相似,但在内部结构上,Drupal 由 Symfony 组件、自身的核心组件以及许多外部库组成。因此,我们必须学习新的 插件系统(Plugin System),并掌握 PHP 的面向对象编程(OOP)。
首先,我们将从熟悉的 Drupal 钩子(hooks) 开始,然后了解 Drupal 如何处理页面(route),学习如何添加新页面,并探讨 Drupal 是如何处理请求的。
随着新文章和视频的添加,我将继续扩展这篇入门文章。


在本文中,我们不会编写代码,而是为编写代码做准备。为此,我们将安装 Drush。Drush 是一个命令行工具,可让您执行许多与 Drupal 相关的日常操作:更新模块、上传/下载配置、备份等等。
如果您使用 Open Server 作为开发用的 Web 服务器,那么以下说明适用于您:
1. 安装服务器本身。 您可以从作者网站 open-server.ru 下载。安装方法与文档可在该网站上查看。
2. 安装 Open Server 后(或者如果您已经安装了),需要在 Windows 系统变量中注册 PATH 环境变量。
C:\Users\yourUserName\AppData\Roaming\Composer\vendor\bin;C:\OpenServer\modules\php\PHP-5.6;C:\OpenServer\modules\database\MySQL-5.5\bin


本文旨在让您熟悉 Drupal,我们将在添加自定义模块后编写代码示例。
Drupal 并不是一个完美无缺、无需改动的单体系统。客户经常会要求在网站上添加某些功能。为了在保持 Drupal 核心代码完整的同时扩展其功能,我们使用模块(module)。模块化系统使得 Drupal 的功能得以扩展。但如果我们想要扩展一个现成的第三方计数器模块怎么办?当然,我们可以在 drupal.org 上创建一个 issue,申请添加我们需要的功能,也许一个月、两个月……甚至一年或两年后,才能在该模块中获得我们所需的功能。但我们也可以换一种方式——自己编写需要的代码。为了扩展 Drupal 附加模块及其自身的功能,我们会在自己的模块中使用钩子(hook)和插件(plugin)。
核心思想是:我们不需要直接维护 Drupal 核心或附加模块的代码,这样能在开发成本上节省大量支出。为了能够轻松更新 Drupal 核心与模块代码,绝不能修改核心代码或第三方模块。否则,当模块或核心升级时,您的所有更改都会被覆盖。


让我们以一些组织开始创建我们的模块。我们将继续区分自定义模块(custom)和贡献模块(contrib)。在Drupal中,模块位于 /modules 文件夹中。现在我们不再需要将它们放在 /sites/all/modules 中,尽管readme中提到这种方式仍然可以使用,但建议使用 /modules 文件夹。在 /modules 文件夹中,我们将创建两个子文件夹:custom 和 contrib。contrib 文件夹将存储来自 drupal.org 的第三方模块,而我们的自定义模块将放在 custom 文件夹中。
英文字幕:
代码示例可以在 GitHub 上查看:


在本课中,我们将扩展模块的功能,创建仅对注册用户或具有特定角色的用户可用的内容。
代码示例可以在GitHub上查看:
https://github.com/levmyshkin/drupalbook8
首先,在我们的drupalbook.permissions.yml模块文件夹中添加一个新的YML文件:
access premium pages:
title: '访问高级页面'
description: '您页面的自定义权限。'
restrict access: TRUE
现在,前往访问权限页面并为所需角色设置对高级内容的访问权限,我将为注册用户设置:
/admin/people/permissions


在学习Drupal API时,您将经常需要参考主文档,网址为 https://api.drupal.org。这是自动生成的Drupal文档。它包含有关每个函数、类、方法的所有信息,定义的位置以及简短的描述。该网站还提供API帮助,我建议您熟悉每个部分:
如果您在Drupal上开发网站,那么您将会遇到网站上写的每个部分。
有时您只需要查看示例并照做即可。为此,Drupal有一个examples模块:


我们可以在URL中使用参数来定义路由。它们的工作方式与视图中的上下文过滤器相同。例如,我们可以在URL中传递各种实体的ID、文本字符串或由逗号或加号分隔的顺序ID。在本课程中,我们将传递节点的ID,并在内容中显示该节点的标题和正文。
代码示例可以在GitHub上查看:
https://github.com/levmyshkin/drupalbook8
让我们将路由添加到我们的drupalbook.routing.yml模块文件中:
