Prestashop源码分析之框架初始化路由及自定义emailtest模块
2025-01-17 13:50阅读:
PS框架启动时,项目根目录下面有一个index代码文件,调用了Dispacher类下的dispatch方法,这个方法会根据传进来的路径区分走模块控制器ModuleFrontController、FrontController还是BackOfficeController,这里emailtest肯定是走的ModuleFrontController,然后代码会扫描这个模块路径下的controller/front路径下面的控制器代码文件,进而执行相关的代码。
模块自定义插入的流程:
建立如下的目录结构:
从截图中可以看出该模块的目录结构,具体内容如下:
- modules
这是根目录下的一个主要文件夹,包含了多个子模块。
- emailtest
这是一个模块文件夹,包含了以下子目录和文件:
- controllers
该目录下有一个front目录,包含email文件,这是该模块的控制器。
- mails
邮件相关的文件夹,可能用于存储邮件模板或配置。
- translations
用于存储翻译文件,可能与多语言支持相关。
- views
视图文件夹,包含css、js和templates等子目录:
- css
存储样式表文件。
- js
存储JavaScript文件。
- templates
存储HTML模板文件,内有front目录,包含email
模板。
- hook
存储钩子相关的文件。
- test_email
测试邮件相关的HTML文件。
- index
可能是模块的入口文件。
- emailtest
与emailtest模块相关的PHP文件。
- install
安装相关的PHP文件。
- install
与数据库安装相关的SQL文件。
- mail_debug
邮件调试日志文件,用于记录邮件发送相关的调试信息。
- tecentsinstallation
可能与腾讯安装相关的PHP文件。
- tecentsinstallationupdate
更新腾讯安装相关的文件。
总体来看,这个模块涉及邮件发送功能,包含了控制器、视图、邮件模板、钩子等部分,并提供了调试功能以帮助开发和测试。
除此之外,需要在数据库中插入如下数据:
-- 1. 插入模块记录
INSERT INTO ps_module
(name, active,
version)
VALUES
('emailtest',
1,
'1.0.0');
-- 2. 获取模块ID
SET @module_id =
LAST_INSERT_ID();
-- 3. 注册钩子
INSERT INTO ps_hook_module (id_module, id_hook,
position)
SELECT @module_id, id_hook, (
SELECT
IFNULL(MAX(position),
0) + 1
FROM ps_hook_module
WHERE id_hook =
h.id_hook
)
FROM ps_hook h
WHERE h.name IN
('displayHeader',
'displayHome');
-- 4. 添加模块权限
INSERT INTO ps_module_access (id_profile,
id_module, view, configure, uninstall)
VALUES (1,
@module_id, 1,
1,
1);