如何修改从市场安装的模块?
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 安装能够识别它,至少需要一些文件来创建模块:
- 模块根目录中的
registration.php
文件 (Testing/Extension/registration.php
) 用于定义模块名称。没有这个你将无法从 CLI 启用你的扩展,这是 Magento 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
模板。以下是您的操作方式:
- 导航到
app/design/Child/Theme
- 创建目录
Example_Extension
以直接覆盖 Magento 通常加载的默认值 viewfile.phtml。
- 在该目录内创建另一个目录
templates
- 创建
viewfile.phtml
并进行您想要的编辑。
- 查看呈现该模板的页面,您将在那里看到您的更改,而不是第 3 方模块的默认设置。
完成!您可以覆盖主题本身中的任何前端模板,以及具有 class 首选项的任何其他后端代码。如果您有任何后续评论或问题,请务必post,我们很乐意为您解决这些问题。祝你好运!
我从 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 安装能够识别它,至少需要一些文件来创建模块:
- 模块根目录中的
registration.php
文件 (Testing/Extension/registration.php
) 用于定义模块名称。没有这个你将无法从 CLI 启用你的扩展,这是 Magento 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
模板。以下是您的操作方式:
- 导航到
app/design/Child/Theme
- 创建目录
Example_Extension
以直接覆盖 Magento 通常加载的默认值 viewfile.phtml。 - 在该目录内创建另一个目录
templates
- 创建
viewfile.phtml
并进行您想要的编辑。 - 查看呈现该模板的页面,您将在那里看到您的更改,而不是第 3 方模块的默认设置。
完成!您可以覆盖主题本身中的任何前端模板,以及具有 class 首选项的任何其他后端代码。如果您有任何后续评论或问题,请务必post,我们很乐意为您解决这些问题。祝你好运!