如何在 Prestashop 1.7 中更改代码中的模块位置?

问题描述 投票:0回答:2

我实际上在 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/

但我不明白如何将它植入到你的模块中。

有人有时间向我解释一下代码是如何安排所需的顺序的吗? 这是在安装方法中发生的还是从哪里发生的?

prestashop prestashop-1.7 prestashop-modules
2个回答
0
投票

转到您的管理面板,在“**设计**”中,然后在“**位置**”中。
在右上角的“**搜索挂钩**”搜索栏中查找“**displayTop**”。
然后将最后一行的模块拖放到第一行。

更改模块在挂钩列表中的位置

1


0
投票

我在我的一个模块中实现了这个功能,它不是很优雅,但效果很好:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.