Prestashop 1.7如何通过代码设置模块在钩子中的排序位置
PrestaShop 1.7 模块设置钩子首位的实现方案
不需要引入额外的前端组件,直接在模块的install方法中追加位置调整逻辑即可,具体规则和代码如下:
- 执行时机:位置调整代码必须放在
parent::install()和所有registerHook()调用执行成功之后,此时模块和钩子的绑定关系才会写入数据库,否则位置更新会因为找不到绑定记录失效。 - 排序规则:PrestaShop 钩子内的模块排序从1开始计数,数值越小展示优先级越高,排在第一位的模块对应位置值为1。
- 核心调用:直接使用模块类内置的
updatePosition方法即可完成排序调整,不需要手写原生数据库操作。
修改完成的完整install方法代码如下:
public function install() { if (Shop::isFeatureActive()) { Shop::setContext(Shop::CONTEXT_ALL); } if ( !parent::install() || !$this->registerHook('displayTop') || !$this->registerHook('header') || !$this->registerHook('backOfficeHeader') ) { return false; } // 调整当前模块在displayTop钩子下的排序到首位 $displayTopHookId = (int)Hook::getIdByName('displayTop'); if ($displayTopHookId) { // 参数依次为:目标钩子ID、移动方向(0=插入到目标位置之前)、目标排序值 $this->updatePosition($displayTopHookId, 0, 1); } return true; }
补充说明
- 官方提到的position-updater是后台拖拽调整模块排序用的前端交互组件,只服务于后台可视化操作场景,模块安装时自动设置排序不需要引入该组件。
- 如果需要把模块放到其他排序位,只需要修改
updatePosition第三个参数的数值即可,比如传入3就会把模块排到对应钩子的第3位。 - 调整位置前增加钩子ID判断,是为了避免钩子不存在时触发系统报错。
内容的提问来源于stack exchange,提问作者Hardy Thiergart
相关产品推荐
相关产品推荐

