OpenCart 1.5.X 开发者初学者快速入门指南
本指南是为已经熟悉 PHP、OOP 和 MVC 架构的开发人员编写的
在下文中,您将看到购物车目录侧的示例。除了相关部分中提到的视图之外,管理端在功能上是相同的
了解库
所有库功能都可以通过控制器、模型和视图使用$this->library_name 访问。所有这些都可以在/system/library/ 文件夹中找到。例如,要访问当前购物车的产品,您需要使用Cart 类,该类位于/system/library/cart.php 中,可以使用$this->cart->getProducts() 访问
常用物品
-
customer.php - 客户相关功能
-
user.php - 管理用户相关功能
-
cart.php - 购物车相关功能
-
config.php - 所有设置都从这里加载
-
url.php - URL 生成函数
了解路由参数
OpenCart 的框架依赖于查询字符串参数中的route=aaa/bbb/ccc 来知道要加载什么,并且是查找需要为每个页面编辑的文件的基础功能。大多数路由实际上只使用aaa/bbb 这应该被视为两部分,但有些包含三个部分aaa/bbb/ccc 第一部分aaa 通常与通用文件夹中的文件夹相关,例如控制器或模板文件夹。第二部分通常与文件名有关,没有相关的.php 或.tpl 扩展名。第三部分在下面的“了解控制器”部分进行了解释
理解语言
语言存储在/catalog/language/ 文件夹的your-language 子文件夹中。其中,跨页面使用的一般文本值存储在文件夹内的your-language.php 文件中,因此对于目录端的英语,您将在catalog/language/english/english.php 中找到值。对于特定的页面文本,您需要页面的route(通常是这种情况,但不是总是,因为您可以指定任何您喜欢的语言文件)。例如,搜索页面有路由product/search,因此该页面的语言特定文本可以在catalog/language/english/product/search.php 中找到(注意文件名和子文件夹与.php 后面的路由匹配。
要在控制器中加载语言,请使用
$this->language->load('product/search');
然后就可以使用语言库函数get来检索特定的语言文本,比如
$some_variable = $this->language->get('heading_title');
语言变量在语言文件中使用特殊变量$_ 分配,该变量是键和文本值的数组。在您的/catalog/language/english/product/search.php 中,您应该找到类似于
$_['heading_title'] = 'Search';
全局语言文件english/english.php 中的值会自动加载,无需$this->language->load 方法即可使用
了解控制器
控制器是基于route 加载的,并且相当容易理解。控制器位于/catalog/controller/ 文件夹中。继续上一个示例,搜索页面的控制器位于此文件夹内的/product/search.php 中。再次注意.php后面的路由被使用了。
打开控制器文件,您会看到一个扩展 Controller 类的 Pascal Case 类名,称为 ControllerProductSearch。这又是特定于路由的,Controller 后跟子文件夹名称和文件名,扩展名不大写。大写实际上不是必需的,但为了便于阅读,建议使用它。值得注意的是,除了字母和数字之外,类名不会从子文件夹和文件名中获取任何值。下划线被删除。
类中有方法。声明为 public 的类中的方法可以通过路由访问以运行 - private 不是。默认情况下,使用标准的两部分路由(上面的aaa/bbb),调用默认的index() 方法。如果使用路由的第三部分(上面的ccc),则将运行此方法。比如account/return/insert会加载/catalog/controller/account/return.php文件和类,并尝试调用insert方法
了解模型
OpenCart 中的模型位于 /catalog/model/ 文件夹中,并根据功能而非路由进行分组,因此您需要通过
将它们加载到控制器中
$this->load->model('xxx/yyy');
这将加载名为yyy.php 的子文件夹xxx 中的文件。然后可以通过对象使用
$this->model_xxx_yyy
和控制器一样,你只能调用它的public 方法。例如,要调整图像大小,您可以使用tool/image 模型并调用其resize 方法,如下所示
$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
从控制器理解视图中的变量赋值
为了从控制器向视图传递值,您只需将数据分配给$this->data 变量,它本质上是一个键=> 值对的数组。举个例子
$this->data['example_var'] = 123;
如果您熟悉将每个键转换为变量的extract() 方法,那么在视图中访问它应该很容易理解。所以example_var 键变成$example_var 并且可以在视图中这样访问。
了解主题
主题仅在目录端可用,基本上是一个包含模板、样式表和主题图像的文件夹。主题文件夹放置在/catalog/view/theme/ 文件夹中,后跟主题名称。文件夹名称不重要,default 文件夹除外
管理端使用/admin/view/template/(跳过路径中的/theme/theme-name/,因为它不允许不同的主题)
模板文件位于主题文件夹内的template 文件夹中。如果当前选择的主题没有任何模板可用,则使用默认文件夹的模板作为备用。这意味着可以用很少的文件创建主题,并且仍然可以充分发挥作用。它还可以减少代码重复和升级时的问题
了解视图(模板)
与语言和模型一样,视图文件通常与路线相关,但根本不必如此。目录端的模板通常在/catalog/view/theme/your-theme/template/ 中找到,除非它不存在,在这种情况下将使用默认主题的模板。对于我们上面的搜索页面示例,文件是product/search.tpl。对于包含三个部分的路线,通常在aaa/bbb_ccc.tpl 中,尽管没有硬性规定。在管理员中,大多数页面都遵循此规则,除了列出项目的页面(如产品列表页面)在 catalog/product_list.tpl 中,产品编辑表单在 catalog/product_form.tpl 中。同样,这些不是设置的,而是默认购物车的标准。
模板文件实际上只是另一个 php 文件,但扩展名为 .tpl,并且实际上在控制器文件中运行,因此您可以在控制器中编写的所有内容都可以在模板文件中运行(虽然不是除非绝对必要,否则推荐)
了解数据库对象
查询使用
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
DB_PREFIX 顾名思义是一个包含数据库前缀(如果存在)的常量
$result 将为SELECT 查询返回一个对象,其中包含一些属性
$result->row 包含第一行的数据,如果一个或多个作为关联数组返回
$result->rows 包含一个行结果数组,非常适合使用 foreach 进行循环
$result->num_rows 包含返回的结果数
$this->db 对象还有一些额外的方法
$this->db->escape() 在传递的值上使用mysql_real_escape_string()
$this->db->countAffected 返回受UPDATE 查询等影响的行数
$this->db->getLastId() 使用 mysql_insert_id() 返回最后一个自动增量 ID
了解保留变量
OpenCart 有预定义的变量来代替标准的$_GET、$_POST、$_SESSION、$_COOKIE、$_FILES、$_REQUEST AND $_SERVER
$_SESSION 是使用 $this->session->data 编辑的,其中数据是一个模仿 $_SESSION 的关联数组
所有其他人都可以使用$this->request 访问,并且已经“清理”以符合启用/禁用的魔术引号,所以
$_GET 变为 $this->request->get
$_POST 变为 $this->request->post
$_COOKIE 变为 $this->request->cookie
$_FILES 变为 $this->request->files
$_REQUEST 变为 $this->request->request
$_SERVER 变为 $this->request->server
总结
虽然以上内容对于开发者来说并不是万无一失的指南,但希望它可以作为入门者的良好起点