Prestashop beforeRequest Middleware

时间:2018-03-16 14:13:26

标签: prestashop prestashop-1.6

我正在尝试为Prestashop 1.6构建一个模块,如果目标URL存在于数据库中,该模块将重定向用户。

我将要做的是:

public function checkRedirection ($url) {
    $line = Db::getInstance()->executeS('SELECT * FROM ps_custom_redirection WHERE url = ' . pSQL($url));

    if (!sizeof($line)) {
        return null;
    }

    header('Location: ' . $line[0]['destination']);
    http_response_code($line[0]['http_code']);
    exit();
}

现在,我可以在触发displayTop挂钩时运行此函数。但我宁愿在请求的过程开始时启动此功能。

Prestashop会提供这样的钩子吗?如果没有,我可以创建吗?我应该在哪里编写代码来解雇它?

1 个答案:

答案 0 :(得分:1)

执行的第一个钩子是actionDispatcher - 你可以根据需要使用它。

你会发现这个钩子在/classes/Dispatcher.php中执行。搜索代码Hook::exec('actionDispatcher', $params_hook_action_dispatcher);

如果要将此挂钩添加到模块中,则需要在主模块文件中使用其名称,如下所示:

public function install() { return parent::install() && $this->registerHook('actionDispatcher'); }

public function hookActionDispatcher($params) { // your code Tools::redirect($url); }

如果重定向,则使用Prestashop Tools::redirect($url);