Magento 自定义模块:在 Magento 2 中逐步创建它

已发表: 2020-11-11

Magento 自定义模块是任何 Magento 开发人员的关键开发过程。 如您所知,在某个时间点,开发人员可能需要集成他自己的功能或模块。 在今天的这篇博文中,我们将逐步指导您在 Magento 2 中开发自定义模块

最新更新:我们刚刚发布了 Claue Multipurpose Magento 2 主题的 2.0 版,其中包含一系列性能改进和独家功能。 立即查看此主题:Claue Magento Theme 2. 0

claue2_edited (1)

现场演示

Claue – Clean, Minimal Magento 2&1 Theme是现代和干净的电子商务商店的绝佳模板,具有 40 多种主页布局和大量商店、博客、投资组合、商店定位器布局和其他有用页面的选项。 Claue 版本 2. 0 带有一系列独家功能,包括:

  • 基于 Luma 主题。
  • 满足 Magento 主题的所有标准
  • 显着的性能提升
  • 与大多数第三方扩展兼容。
  • 与 Magento 2.4.x 完全兼容

第二个高级版本与之前的版本完全不同。 因此,如果您使用的是 Claue 版本 1 并想更新到 Claue 版本 2,则只能重建新网站,而不是从旧版本更新。 现在,让我们回到主题。

Magento 是一个非常通用的平台,具有许多有用的功能,并支持免费和付费模块。 它提供了可以在线安装以及可以定制的模块,以满足客户的需求。 定制是通过生成一个模块来实现的,然后可以利用PHP语言的力量根据选择进行修改。 例如,如果我们的网站具有市场上不常见的特定功能或一组功能或要求,则一个模块可以为我们填补这一空白。

Magento 带有 3 种类型的代码池(代码、核心和本地),自定义和核心模块驻留在其中。 本地池(文件夹)是所有自定义模块所在或应该放置的位置。 下面给出的是模块应包含的组件。

  • - 在这里您需要提供用于在我们的模板中显示数据的功能。
  • 模型——所有业务逻辑都包含在这里。
  • 资源——模型包括用于数据库交互的函数。
  • 控制器- 定义页面布局和块文件,并在请求 URL 时加载。
  • ——包括 XML 格式的配置文件,显示 Magento 模块有多少文件以及模块如何交互。
  • 助手——包括用于定义常见业务逻辑的函数(例如图像调整大小、验证)。 这些函数可以在 Magento 应用程序的任何地方使用
  • sql – 包含用于创建、修改或删除 SQL 表的 SQL 脚本。

如何创建 Magento 自定义模块?

在 Magento 2 中创建一个简单的模块

在 Magento 2 中生成一个简单的模块很容易。 您将需要完成以下任务:

  • 为模块创建一个新目录
  • 创建registration.php脚本
  • 创建etc/module.xml信息文件
  • 安装新模块

为模块创建一个新目录

新目录的位置有两个选项可供选择

  • app/code/{vendor}/
  • vendor/{vendor}/

如果您的模块适用于您正在开发的特定在线商店,您可以选择第一个选项。 但是,如果您生成一个模块的目的是在各种网站上使用它,那么选择第二个选项更合适。 现在,我将在此示例中使用第一个选项。

首先,您需要创建一个名为EndPoint (我们的供应商名称)的目录,其中包含一个子目录MyModule

 cd {website_root} mkdir -p app/code/EndPoint/MyModule

创建registration.php脚本

registration.php文件告诉 Magento 以特定名称和位置注册新模块。

使用以下代码生成名为app/code/EndPoint/MyModule/registration.php的文件

<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'EndPoint_MyModule' , __DIR__ );

创建 etc/module.xml 信息文件

在这一步,您需要创建我们的模块信息文件,我们将在其中指定模块版本号。 首先,我们必须在app/code/EndPoint/MyModule中生成etc目录:

 mkdir app/code/EndPoint/MyModule/etc

然后使用以下命令行创建module.xml

 <?xml version="1.0"?> < config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:Module/etc/module.xsd" > < module name = "EndPoint_MyModule" setup_version = "1.0.0" > </ module > </ config >

安装新模块

现在我们需要安装并启用新模块,所以从我们的网站根目录,我们需要运行命令

php bin/magento setup:upgrade

Magento 将取出模块名称和配置更新列表,并且新模块EndPoint_MyModule应列在该列表中

向我们的模块添加自定义路由

现在我们有一个工作的、启用的模块,但它还没有做任何事情! 检查我们的模块是否启用的简单方法是什么? 让我们设置一个自定义路由,所以如果我们点击像https://{our_website}/mymodule/test/helloworld这样的 URL,我们可以从控制器返回自定义响应。

创建自定义路由本身需要一些步骤:

  • 为控制器创建一个新目录
  • 创建一个etc/routes.xml文件
  • 创建控制器
  • 升级新模块

为控制器创建一个新目录

首先,我们需要创建一个新目录,用于自定义路由的新 PHP 控制器将驻留在该目录中。 新的目录路径应该是:

app/code/EndPoint/MyModule/Controller

您可以根据我们所需的路径生成任意数量的目录级别。 例如,如果您在app/code/EndPoint/MyModule/Controller中生成一个名为Index的类,将被路由到该控制器的 URL 将是https://{our_website}/mymodule/index (“控制器”目录是忽略)。

购买 如果您在app/code/EndPoint/MyModule/Controller/Test中生成一个名为HelloWorld的类,则生成的 URL 将为https://{our_website}/mymodule/test/helloworld

创建 etc/routes.xml 文件

routes.xml会告诉 Magento 什么基础 URL 将用于我们的模块。 首先,我们需要创建需要放置 routes.xml 文件的“frontend”目录:

 mkdir app/code/EndPoint/MyModule/etc/frontend

当您需要基本 URL 为MyModule时,您必须在新目录中生成一个 XML 文件,该文件会将向给定 URL 发出的所有请求路由到我们的模块控制器:

 <?xml version="1.0" ?> < config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:App/etc/routes.xsd" > < router id = "standard" > < route frontName = "mymodule" id = "mymodule" > < module name = "EndPoint_MyModule" /> </ route > </ router > </ config >

创建控制器

如果我们想响应对https://{our_website}/mymodule/test/helloworld的请求,您需要生成基本Controller目录和Test子目录:

 mkdir -p app/code/EndPoint/MyModule/Controller/Test

在这个目录下,你需要生成我们自定义的 Magento 控制器。 所有路由控制器都应该扩展\Magento\Framework\App\Action\Action 。 我们还需要一个公共的construct()方法来将上下文传递给我们的祖先和一个execute()一个函数,该函数将在URL 被命中时被调用:

 <?php namespace EndPoint \ MyModule \ Controller \ Test ; class HelloWorld extends \ Magento \ Framework \ App \ Action \ Action { public function __construct ( \Magento\Framework\App\Action\Context $context ) { parent ::__construct( $context ); } public function execute () { echo "Hello world!" ; } }

升级新模块

在这一步,您需要升级我们的 Magento 设置。 但是因为您在构造中包含了一个从依赖注入器获取参数的新控制器。 您还需要编译依赖注入引擎(例如工厂、代理和拦截器)。 最后,您需要清除缓存,以便从我们的自定义 URL 提供新内容:

 php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento cache:flush

就是这样。 在您的浏览器中打开/helloworld/index/index URL,您应该会看到如下内容: 这意味着我们的模块正在运行!

magento 自定义模块

教程到此结束: Magento 自定义模块:在 Magento 2 中逐步创建它。我们希望这是一个对您有用的博客。 如果您想了解更多有关 Magento 的信息,可以阅读我们的 Magento 平台文章以了解更多详细信息,还记得查看我们的 Magento 2 扩展和我们的 Magento 2 主题以支持您的网站。