如何修改从市场安装的模块?

How to modify a module installed from marketplace?

我从 Marketplace 安装的模块中有一些行为我想稍微改变一下,比如添加更多配置、覆盖模板文件并添加更多 Javascript、样式等。我我看不到任何可以从 Marketplace 安装的第三方模块扩展的地方,处理这个问题的最佳做法是什么?因为我真的不想修改扩展程序的代码。我正在使用 Magento 2.

编辑: 这是我试过的:

我检查了 registration.php 中的模块名称,例如名称是 Mynamespace_Mymodule 然后我创建了 app/code/Mynamespace/Mymodule/

我尝试在 app/code/Mynamespace/Mymodule/view/frontend/templates/viewfile.phtml 添加模板文件

viewfile.phtml 在 vendor/ 中也可用,路径相同,我还应该添加什么以使其使用我的 viewfile.phtml 而不是模块的?

您可以覆盖任何您喜欢的模块(无论它们是 Magento 核心模块,还是通过 composer/第 3 方安装的)。

覆盖类

要覆盖模块的行为,您必须使用您喜欢的任何名称空间创建自己的自定义模块。 Testing_Extension 例如。为了让您的 Magento 2 安装能够识别它,至少需要一些文件来创建模块:

  1. 模块根目录中的 registration.php 文件 (Testing/Extension/registration.php) 用于定义模块名称。没有这个你将无法从 CLI 启用你的扩展,这是 Magento 2 所必需的。
  2. 用于定义模块安装版本和名称的 etc/module.xml 文件。

如果您以正确的格式创建了这些文件并将它们放在 app\code 目录中,您将能够使用命令 php bin/magento module:enable Testing_Extension 启用它,然后使用 php bin/magento setup:upgrade 命令将您的模块注册到 Magento 商店。这将在数​​据库 table setup_modules 中添加一个您可以参考的条目。

现在您已准备好让您的模块执行某些操作。要让它优先于您的第 3 方扩展,您需要创建所谓的 "class preference" 以便 Magento 知道选择哪个代码(您的或第 3 方)。没有这个首选项,Magento 将不知道你想做什么。

要创建首选项,您需要在 etc 目录中创建一个如下所示的 di.xml 文件:

<config>
   <preference for="Example\Extension\Class\Name" type="Testing\Extension\Class\Name" />
</config>

现在只需创建 class 即可。这将允许覆盖任何你想要的 class。编写代码后,您需要使用 php bin/magento setup:di:compile 重新编译。

覆盖视图

您提到要覆盖 viewfile.phtml 文件,这非常简单。您需要在 app/design/Theme/Name 中创建一个子主题,其中包含必要的文件 (you can read more about theme inheritance here)。完成后,您可以通过简单地在其中创建目录名称来覆盖任何 .phtml 模板。以下是您的操作方式:

  1. 导航到 app/design/Child/Theme
  2. 创建目录 Example_Extension 以直接覆盖 Magento 通常加载的默认值 viewfile.phtml。
  3. 在该目录内创建另一个目录templates
  4. 创建 viewfile.phtml 并进行您想要的编辑。
  5. 查看呈现该模板的页面,您将在那里看到您的更改,而不是第 3 方模块的默认设置。

完成!您可以覆盖主题本身中的任何前端模板,以及具有 class 首选项的任何其他后端代码。如果您有任何后续评论或问题,请务必post,我们很乐意为您解决这些问题。祝你好运!