您的店铺即将升级至 PrestaShop 9,但有一个模块不再由其开发者维护。您应该将其升级还是重构?我们已经为 PrestaShop 1.5 到 8 版本编写的数十个模块进行了升级。在本文中,您将找到我们关注的征兆、快速自检以及每种方案对您的店铺意味着什么。
为什么旧模块在 PrestaShop 9 上会失效
PrestaShop 9 是比大多数版本更新更大的一步。在 1.7 或 8 上运行良好的模块可能会阻止安装、破坏页面,或者在最坏的情况下,导致整个后台崩溃。原因几乎总是相同的:
- 更新的 PHP 版本。 PrestaShop 9 需要 PHP 8.1 或更新版本。为 PHP 5 或 7 编写的代码会遇到更严格的类型检查、已移除的函数以及已变成错误的警告。
- 更新的 Symfony。 PrestaShop 9 运行在 Symfony 6.4 上(PrestaShop 8 在 Symfony 4.4 上)。使用旧版本 Symfony 服务、表单或路由的模块需要进行调整。
- 已移除的核心方法和常量。 多年来一直被弃用的函数,例如
Tools::displayPrice()或ajaxDie(),现已不复存在。仍然调用它们的模块会在该代码运行后立即失效。 - 不再随附的库。 较旧的模块有时依赖于 PrestaShop 自身过去包含的库,例如 Guzzle 5 或 SwiftMailer。在 PrestaShop 9 中,这些库根本不存在。
- 对已更改类的重写(Overrides)。 重写会替换核心类的一部分。当该类更改时,重写可能会破坏店铺或悄悄撤销修复。
请在 PrestaShop 9:新功能有哪些 和 PrestaShop 9.2 中阅读有关更改本身的更多信息。
通常在以下情况下升级就足够了
- 该模块目前可以在 PrestaShop 1.7 或 8 上安装和运行;
- 问题是已移除的方法和常量(例如
Tools::displayPrice()或ajaxDie()); - 该模块在自己的文件中保留自己的逻辑,并且很少有重写;
- 其模板以正常方式使用 Smarty 或 Twig,因此显示层可以保持原样;
- 您对该模块的功能感到满意,只需要它继续工作。
大多数这些修复都是机械性的:模块继续做完全相同的事情,只是更新了它调用的代码。为 PrestaShop 1.5 和 1.6 编写的模块通常也能很好地升级。您的设置和数据保持不变,模块的外观和工作方式与以前相同。
考虑在以下情况下进行重构
- 该模块在 PHP 中构建了大量的 HTML 并未经转义输出:使其安全意味着将整个显示层移动到模板中;
- 它重写了几个在 PrestaShop 9 中其方法发生更改的核心类;
- 它依赖于另一个尚未升级的模块(例如支付基础模块);
- 它捆绑了 PrestaShop 9 不再随附的旧库,例如 Guzzle 5 或 SwiftMailer;
- 它非常庞大,同时还必须通过 PrestaShop 验证器(PrestaShop Validator);
- 您无论如何都想要新功能,因此无论如何都会更改代码很大一部分。
重构并不是旧模块的失败。有时代码多年来的发展方式使得干净的升级比从清晰的设计开始需要更多的工作。
快速自检
| 您看到的内容 | 指向 |
|---|---|
| 该模块在 PrestaShop 8 上运行,仅在 9 上失败 | 升级 |
| 错误提到了已移除的方法或类 | 升级 |
| 该模块没有或只有很少的重写 | 升级 |
| 模块的页面在 PHP 中构建为 HTML 字符串 | 重构或大型升级 |
| 对核心类的多个重写 | 重构或大型升级 |
| 它需要另一个没有 PrestaShop 9 版本的模块 | 首先查看该模块 |
| 您想要更改模块的功能 | 重构 |
这些是征兆,而不是规则。一个模块可能符合重构的一个条件,但仍然可以毫无问题地升级。这就是为什么我们在报价前进行测试。
在您决定之前需要检查的内容
- 首先询问开发者。 检查模块页面或 PrestaShop Addons:可能已经有了 PrestaShop 9 的版本。
- 列出该模块为您所做的事情。 您实际使用的是哪些功能?重构可以省去没人需要的功能。
- 检查依赖项。 该模块是否需要另一个模块、主题功能或外部服务?
- 查看重写。 在后台的 高级参数 > 信息 下,您可以查看重写是否处于活动状态。
- 将其与店铺升级一起计划。 如果您的整个店铺迁移到 PrestaShop 9,请在副本上一起测试所有模块。请阅读我们在 PrestaShop 升级服务 中如何处理此问题。
我们做什么
当您上传模块时,我们会首先在独立的 PrestaShop 9.2 店铺中对其进行测试,并根据我们发现的情况给出价格。如果模块最好重构,我们会在您付款前告知您。让您的模块升级 或 请我们检查它。