arkonsoft/ps-module-core

PrestaShop 模块的内核工具

v1.0.4 2024-06-13 12:13 UTC

This package is auto-updated.

Last update: 2024-09-13 12:51:40 UTC


README

简介

为 PrestaShop 创建模块真是一件令人头痛的事情。本包包含一些基本工具,以使开发过程不那么痛苦。

要求

  • PHP >= 7.0

安装

使用 composer 安装包

composer require arkonsoft/ps-module-core

基本用法

AbstractModule

从您的模块类继承 AbstractModule 类。现在您可以使用 $this->canBeUpgraded() 方法,该方法可以用来显示有关模块更新或其他内容的警告。

您还可以使用 ModuleCategory 字典来设置 $this->tab,它包含模块分类(在模块列表页上有意义)。

<?php
if (!defined('_PS_VERSION_')) {
    exit;
}

use Arkonsoft\PsModule\Core\Module\AbstractModule;

class MyModule extends AbstractModule
{
    public function __construct()
    {
        $this->name = 'mymodule';

        // ps-module-core
        $this->tab = ModuleCategory::FRONT_OFFICE_FEATURES;
        $this->version = '1.0.0';
        $this->author = 'Firstname Lastname';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = [
            'min' => '1.7.0.0',
            'max' => '8.99.99',
        ];
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->trans('My module', [], 'Modules.Mymodule.Admin');
        $this->description = $this->trans('Description of my module.', [], 'Modules.Mymodule.Admin');

        $this->confirmUninstall = $this->trans('Are you sure you want to uninstall?', [], 'Modules.Mymodule.Admin');

        // ps-module-core
        if ($this->canBeUpgraded()) {
            $this->warning = $this->trans('The module %s needs to be updated. Use the "update" option in the list of modules. The module without an update may not work properly.', [ $this->name ], 'Modules.Mymodule.Admin');
        }
    }
}

AbstractAdminSettingsController

在您的模块 AdminController 类中继承 AbstractAdminSettingsController 类。现在您只需定义设置表单的字段(以 HelperForm 格式),然后您就完成了!

数据写入和读取操作发生在抽象类中,因此您只需关注定义字段。

<?php

use Arkonsoft\PsModule\Core\Controller\AbstractAdminSettingsController;

if (!defined('_PS_VERSION_')) {
    exit;
}

class AdminMyModuleSettingsController extends AbstractAdminSettingsController
{
    public function prepareOptions(): void
    {
        $form = [
            'form' => [
                'tabs' => [
                    'general' => $this->module->getTranslator()->trans('General', [], 'Modules.MyModule.Admin'),
                    'other1' => $this->module->getTranslator()->trans('Other 1', [], 'Modules.MyModule.Admin'),
                    'other2' => $this->module->getTranslator()->trans('Other 2', [], 'Modules.MyModule.Admin'),
                ],
                'legend' => [
                    'title' => $this->module->getTranslator()->trans('Settings', [], 'Modules.MyModule.Admin'),
                    'icon' => 'icon-cogs'
                ],
                'submit' => [
                    'title' => $this->module->getTranslator()->trans('Save', [], 'Modules.MyModule.Admin'),
                    'class' => 'btn btn-default pull-right'
                ],
            ],
        ];

        $form['form']['input'][] = [
            'label' => $this->module->getTranslator()->trans('Example field 1', [], 'Modules.MyModule.Admin'),
            'type' => 'text',
            'name' => $this->module->name . 'example_field_1',
            'lang' => true,
            'tab' => 'general'
        ];

        $form['form']['input'][] = [
            'label' => $this->module->getTranslator()->trans('Example field 2', [], 'Modules.MyModule.Admin'),
            'type' => 'text',
            'name' => $this->module->name . 'example_field_2',
            'lang' => true,
            'tab' => 'general'
        ];

        $this->forms[] = $form;
    }
}

定义

AbstractModule 类

AbstractModule 类扩展了 PrestaShop 的 Module 类,并为 PrestaShop 模块提供了常见功能。

getDatabaseVersion 方法

/**
 * Returns the database version of the module
 * 
 * @return ?string
 */
protected function getDatabaseVersion()

此方法从 PrestaShop 数据库中检索模块的数据库版本。

canBeUpgraded 方法

/**
 * Checks if the database version is lower than the specified version for potential upgrade.
 * 
 * @return bool
 */
protected function canBeUpgraded(): bool

此方法检查模块的数据库版本是否低于指定的版本,表示可能需要升级。

示例用法

public function __construct()
    {
        // other code

        if ($this->canBeUpgraded()) {
            $this->warning = $this->trans('The module %s needs to be updated. Use the "update" option in the list of modules. The module without an update may not work properly.', [ $this->name ], 'Modules.Mymodule.Admin');
        }
    }

ModuleCategory 接口

ModuleCategory 接口定义了代表 PrestaShop 模块不同类别的常量。

常量

  • ADMINISTRATION:与管理系统相关的模块。
  • ADVERTISING_MARKETING:与广告和营销相关的模块。
  • ANALYTICS_STATS:用于分析和统计的模块。
  • BILLING_INVOICING:用于计费和发票的模块。
  • CHECKOUT:与结账过程相关的模块。
  • CONTENT_MANAGEMENT:用于内容管理的模块。
  • DASHBOARD:用于仪表板功能的模块。
  • EMAILING:与电子邮件相关的模块。
  • EXPORT:用于导出数据的模块。
  • FRONT_OFFICE_FEATURES:为前台提供功能的模块。
  • I18N_LOCALIZATION:用于国际化本地的模块。
  • MARKET_PLACE:与市场相关的模块。
  • MERCHANDIZING:用于商品展示的模块。
  • MIGRATION_TOOLS:用于迁移工具的模块。
  • MOBILE:为移动设备优化的模块。
  • OTHERS:其他杂项模块。
  • PAYMENTS_GATEWAYS:用于支付和网关的模块。
  • PAYMENT_SECURITY:用于支付安全的模块。
  • PRICING_PROMOTION:用于定价和促销的模块。
  • QUICK_BULK_UPDATE:用于快速批量更新的模块。
  • SEARCH_FILTER:用于搜索和筛选的模块。
  • SEO:用于搜索引擎优化的模块。
  • SHIPPING_LOGISTICS:用于运输和物流的模块。
  • SLIDESHOWS:用于创建幻灯片的模块。
  • SMART_SHOPPING:用于智能购物的模块。
  • SOCIAL_NETWORKS:与社交网络集成的模块。

示例用法

public function __construct()
    {
        // other code

        $this->tab = ModuleCategory::FRONT_OFFICE_FEATURES;
    }

TabDictionary 接口

TabDictionary 接口包含表示 PrestaShop 管理面板中各种标签的常量。每个常量都是一个对应于管理员部分的字符串。

常量

示例常量

  • ACCESS:代表“AdminAccess”标签。
  • ADDONS_CATALOG:代表“AdminAddonsCatalog”标签。
  • ADDRESSES:代表“AdminAddresses”标签。
  • ADVANCED_PARAMETERS:代表“AdminAdvancedParameters”标签。
  • ATTACHMENTS:代表“AdminAttachments”标签。
  • ATTRIBUTES_GROUPS:代表“AdminAttributesGroups”标签。
  • BACKUP:表示“AdminBackup”选项卡。
  • CARRIERS:表示“AdminCarriers”选项卡。
  • CART_RULES:表示“AdminCartRules”选项卡。
  • CARTS:表示“AdminCarts”选项卡。
  • CATALOG:表示“AdminCatalog”选项卡。
  • CATEGORIES:表示“AdminCategories”选项卡。

示例用法

public function installTab(): bool
    {
        if (Tab::getIdFromClassName($this->settingsAdminController)) {
            return true;
        }

        $tab = new Tab();

        $parentTabClassName = TabDictionary::CATALOG;

        // other code
    }

AbstractAdminSettingsController 类

AbstractAdminSettingsController 类继承自 PrestaShop 的 ModuleAdminController 类,并提供比原生的 OptionsAPI 更好的管理模块设置的功能。

构造函数

public function __construct()

构造函数方法通过设置上下文、启动和调用 prepareOptions 方法初始化 AbstractAdminSettingsController 类。

prepareOptions 方法

abstract public function prepareOptions();

此抽象方法用于为设置控制器准备选项。子类必须实现此方法。

initContent 方法

public function initContent()

此方法通过渲染表单初始化设置控制器的内容。

postProcess 方法

public function postProcess()

此方法处理表单提交后的后处理任务,例如保存表单数据。

dispatchAction 方法

public function dispatchAction()

此方法根据表单提交分派操作。

renderForm 方法

public function renderForm()

此方法使用 HelperForm 类渲染表单。

loadFormValues 方法

public function loadFormValues(HelperForm $helper)

此方法从数据库加载表单值。

saveForm 方法

public function saveForm()

此方法将表单数据保存到数据库。

其他辅助方法

  • loadField:从数据库加载字段值。
  • loadCategoryField:从数据库加载类别字段的值。
  • saveField:将字段值保存到数据库。
  • saveLangField:将多语言字段值保存到数据库。
  • saveCategoryField:将类别字段的值保存到数据库。
  • isHTMLAllowed:检查字段类型是否允许 HTML。
  • isNestedArray:检查数组是否嵌套。