我实际上在 Prestashop 1.7 中学习了模块编程....辛苦但真的很好。
所以,当我安装第一个模块时,
public function install()
{
if (Shop::isFeatureActive()) {
Shop::setContext(Shop::CONTEXT_ALL);
}
if ( !parent::install() or
!$this->registerHook('displayTop') or
!$this->registerHook('header') or
!$this->registerHook('backOfficeHeader') )
return false;
return true;
}
位置会自动设置在钩子显示顶部的末尾。
现在,我必须做什么才能将其设置在第一位?
我读过它将与“updatePosition”功能一起使用,不幸的是我只找到了 2012 年和 2-3 年前的提示。
开发者文档在这里有一个提示,
https://devdocs.prestashop.com/1.7/development/components/position-updater/
但我不明白如何将它植入到你的模块中。
有人有时间向我解释一下代码是如何安排所需的顺序的吗? 这是在安装方法中发生的还是从哪里发生的?
更改模块在挂钩列表中的位置
我在我的一个模块中实现了这个功能,它不是很优雅,但效果很好:
public function install()
{
return parent::install() &&
$this->registerHook('displayProductAdditionalInfo') &&
$this->setModulePositionFirst('displayProductAdditionalInfo');
}
private function setModulePositionFirst($hook_name)
{
// Récupère l'ID du Hook donné en paramètre à partir de son nom
$id_hook = Hook::getIdByName($hook_name);
if ($id_hook) {
// Récupère l'ID de module courant
$id_module = (int)$this->id;
// Incrémente la position de tous les modules greffé sur ce hook
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'hook_module`
SET `position` = `position` + 1
WHERE `id_hook` = ' . (int)$id_hook . ' AND `id_module` != ' . (int)$id_module
);
// Fixe le module courant en première position
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'hook_module`
SET `position` = 1
WHERE `id_hook` = ' . (int)$id_hook . ' AND `id_module` = ' . (int)$id_module
);
// Informe à Presta que cette étape s'est bien passé pour qu'il continuer l'installation du module
return true;
}
// Stop l'installation du module si le Hook n'existe pas
return false;
}