好模板介绍 在这个系列的第二篇里,我们来看看如何创建自己的第一个Prestashop模块,并且能够在后台操作这个模块。
模块类
与基类ObjectModel类似,所有的Prestashop模块都扩展自一个为它们定义了基本功能的通用类。Module类提供了管理界面和模块之间的接口,还提供国际化和挂载管理功能。
代码约定
在我们开始写代码前,有一个要点,那就是模块类、目录和文件名的命名。
在Prestashop里,模块都必须放在你的店铺安装根目录下的 /modules 目录下面。而且,模块目录和类文件读必须是模块类名的小写。注意,模块类名本身不用小写(按照一般约定采用大小写混写的方式“Camel case”, 译者注:比如ShoppingCart),其根本就是放置模块的陌路和文件要遵循这个约定。
一个“空”模块
在这个系列教程的这一部分,我们要创建一个“TutorialFirst”模块,它包含了创建一个最初级的模块的必要代码。第一步是创建模块目录,命名为“tutorialfirst”。然后是在这个目录下创建模块的主类文件。使用下面的代码:
view plaincopy to clipboardprint?
1. <?php
2. class TutorialFirst extends Module
3. {
4. function __construct()
5. {
6. $this->name = 'tutorialfirst';
7. parent::__construct();
8.
9. $this->tab = 'mypresta.cn Tutorials';
10. $this->version = '0.1.0';
11. $this->displayName = $this->l('First Tutorial Module');
12. $this->description = $this->l('Our very first module - it does absolutely nothing at all.');
13. }
14. }
15. // End of: tutorialfirst.php
16. ?>
<?php class TutorialFirst extends Module { function __construct() { $this->name = 'tutorialfirst'; parent::__construct(); $this->tab = 'mypresta.cn Tutorials'; $this->version = '0.1.0'; $this->displayName = $this->l('First Tutorial Module'); $this->description = $this->l('Our very first module - it does absolutely nothing at all.'); } } // End of: tutorialfirst.php ?>
把文件保存为模块目录下的“tutorialfirst.php”,把它放到服务器上去。虽然这些代码看起来什么也不是,但是它的确是包含了某些功能,这要归功于它扩展的基类。一旦你把他上传到服务器上的开发测试站点上,你就可以在服务器的模块列表上看到一个模块分组“mypresta.cn Tutorials”,而我们的第一个模块就在这个分组下面。这是你可以安装并卸载它了。
看看我们在这段代码里做了什么吧,还有为什么这么做。
view plaincopy to clipboardprint?
1. $this->name = 'tutorialfirst';
2. parent::__construct();
$this->name = 'tutorialfirst'; parent::__construct();
类构造器的头两行是设置模块的基本属性,以确保能够正确地继承到基类里的必要功能。首先是设置了模块的内部名称(译者注:相对系统开发而言)。要注意到它同样遵循了模块目录名和主类文件名的约定,还是类名的小写形式。只有这一步完成后我们才能放心的调用父类构造函数,让它帮我们设置必要的模块其它内部属性。
之后是定义需要用来在后台显示我们的模块的属性。
view plaincopy to clipboardprint?
1. $this->tab = 'mypresta.cn Tutorials';
2. $this->version = '0.1.0';
3. $this->displayName = $this->l('First Tutorial Module');
4. $this->description = $this->l('Our very first module - it does absolutely nothing at all.');
$this->tab = 'mypresta.cn Tutorials'; $this->version = '0.1.0'; $this->displayName = $this->l('First Tutorial Module'); $this->description = $this->l('Our very first module - it does absolutely nothing at all.');
$this->tab 成员变量定义了我们希望这个模块显示在后台模块列表中的哪个分类里。通常情况下我们应该选标准的分类(比如‘Advertisement’, ‘Products’, ‘Tools’, ‘Blocks’ 这些)。但怎么设置这个属性完全是你自己的事。在这个系列的黎子里,我选择把它们归在“mypresta.cn Tutorials”分类下。
$this->version 成员变量是让我们用来在模块列表里显示模块的当前版本,让用户能够可视化地分辨他们使用的模块的版本。当我们使用外部的一些外部模块时,这也对我们区分版本是否陈旧过时非常有用。
最后的两个成员变量是用来在模块列表里显示我们的模块的,让它具有相当的自述性。要注意到他们使用的是Module类的 $this->l() 函数,并不是直接赋一个静态的字符串。
l() (来自基类) 成员函数实现了多语言支持,使得店主能够自己完成翻译。我们希望显示的文本的英文版本直接传给了这函数,只有这样,店主才能通过后台的 Tools->Translations页面将它翻译成自己选择的语言。这样包装模块中的静态文本可使得它支持翻译功能,并且我们模块里的任何非语言独立的静态文本都需要采用这种处理方式。
综述
读完这篇文章,你应该可以创建一个能够显示在Prestashop后台并被操作的新模块了,甚至显示的是店主自己的语言。在下一讲中,我们将会看到如何扩展我们的第一个模块,并支持模块的后台配置,以及基于后台配置的前台页面显示。 (责任编辑:好模板) |