最模板介绍 很多人对于Prestashop模块的开发,多少有些迷茫,这主要是因为它缺少文档。但是别怕--这个系列的目的就是向开发PHP的人讲述如何开发 Prestashop模块。它将会讲述怎样开发一个属于我们自己的功能模块,这个模块体现了我们通常见到的模块所具有的功能。它还为我们提供一个可以用于自己代码的基础模版。在后续的系列中,我们会看到如何创建一个支付模块,如何扩展Administration界面。 在开始阶段,我们还是专注于模块类的开发, 因为它主要负责在你的页面显示东东,这是Prestashop开发的基本。 开始之前
这个系列的文章是假定你有一个php 5.x.x的基本知识和它的面向对象编成方面的概念。(译者注,其实不用担心,我之前也没有学习过PHP) 强烈建议你搭建一个Prestashop开发环境,这样你就可以看到Prestashop如何做到页面的配置。就这篇文章的目的来说,我们要开发是一个基于当前发布版本(写这篇文章的时候是1.2.0.6)的示例。(译者注:我测试的版本是1.2.0.8)。但是我们的代码会写得比较通用一点,保证它与Prestashop的所有版本兼容,即使是1.1版之前的。如果你熟悉Prestashop使用的第三方工具和类库,会对理解这些文章有很大帮助。我特别建议你熟悉下smarty template引擎的基本知识。要注意到,Prestashop的核心就是处理这些模板的初始化,所以特别要了解得的就是模板变量的赋值,模板的创建(和展示),模板的修饰符(modifier)和函数(函数)。
PrestaShop的架构
理解Prestashop modules是怎么运作,根本上就是看网站页面是怎么显示的。Prestashop的框架大致上的为MVC,一个"Modle", 一个"View",和一个"Controller"。虽然它不是完全遵循,但这对我们理解程序是怎么运作的有好处。
Models
Prestashop中的Model是通过扩展基类ObjectModel来实现的。ObjectModel类定义了关于的DB表的通用操作。在提供创建、读取、更新、删除操作的同时,它还实现了数据校验、多语言处理等。通过扩展这个基础功能类,创建各自的model来管理店铺数据。 Prestashop的model都放在 /classes 目录下,用来处理DB的各类数据(比如:分类 Category, 产品 Product,订单 Order,配置 Configuration 等等)。关于Model的约定是,每个类class放在一个php文件里,文件名和它其中的类名一致。
Views
我们这个购物车网站的数据展示用的是smarty template引擎。使用view可以达到业务逻辑和页面展示的分离。在严格的MVC环境中,view是不进行任何数据的处理,仅仅是显示从 controller传过来的数据。大多数情况下Prestashop是这样的,除了有一些Ajax/Javascript进行数据的处理。 Prestashop的view文件通常放在 /themes 目录下,和对应的template文件一起,可供管理页面挑选。许多module把自己的template放在自己的目录结构下。
Controller
Controller是一个或一些页面的主要业务逻辑所在。它负责与Model进行交互,获取数据,对数据进行业务逻辑的处理,然后输出结果到一个或多个页面。在Pretashop里,它们置于安装目录的根目录,对应就是网站的主要页面。
OK,那module好处在哪呢?
讲过了Prestashop的功能核心,已经足够我们开发出一个购物车了,就添加功能来说的确是很方便。比如,你想基于上面的框架修改店面首页,你无须直接修改controller页面。否则就代码维护来讲,这很麻烦(当有一个新版本发布时,你要亲手修改之前修改过的所有controller页面,到处跟踪调试),并且这需要对系统有相当的了解。
对一个没有技术背景的人来说,创建一个易扩展、可维护的系统的购物车系统,需要把各项功能采用插入--“挂载(hooked)”--方式添加到上面说的框架中去,通过controller代码中添加的各种挂载点(hook)。换个角度讲就是用和可安装的插件(Prestashop里称为模块 (module))。这样,这些模块就具备了显示其它的或者被你修改了的内容,具备了添加新功能(业务逻辑)到controller中,甚至搜集信息的功能。
支付模块是一个特别的模块,但它为了提供用户更多选择,也是挂载到标准的controller里。至于管理面板的扩展完全是另一码事,它更像是开发 controller,需要单独来谈。感谢Prestashop的模块框架,给我们在管理界面添加module带来相当大的便利性,总之,在大多除非特别复杂情况下,只是最好的实现方式。
综述
读了这篇文章,你应该对在页面创建基本的区块来装点你的店铺有个了解。在下一篇中,我们会看看基于这些概念怎么开发我们的第一模块,以扩展Prestashop。
|