如何在magento 2中创建简单的模块


Answers:


8

好吧,这是一个广泛的问题,但是我最好的建议是检查Magento 2的官方样本。

您可以在这里找到它们:https : //github.com/magento/magento2-samples

该项目是一个示例集合,用于演示Magento 2中引入的技术。您将找到最简单的扩展以及示例,这些示例会逐步添加功能以引导您进行Magento 2平台的探索和教育。

最重要的是,如果您在Google中搜索“ magento 2创建模块”,则可以找到许多教程。


10

让我们命名模块StackExchange_HelloWorld
您将需要以下文件:

app/code/StackExchange/HelloWorld/registration.php -注册文件

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

app/code/StackExchange/HelloWorld/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="StackExchange_HelloWorld" setup_version="2.0.0" />
</config>

app/code/StackExchange/HelloWorld/etc/frontend/routes.xml -前端路由文件

<?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 id="helloworld" frontName="helloworld">
            <module name="StackExchange_HelloWorld" />
        </route>
    </router>
</config>

app/code/StackExchange/HelloWorld/Controller/Index/Index.php -索引控制器

<?php 
namespace StackExchange\HelloWorld\Controller\Index;

use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class Index extends \Magento\Framework\App\Action\Action
{
     protected $resultPageFactory;
     public function __construct(
        Context $context,
        PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }
    public function execute()
    {
         $resultPage = $this->resultPageFactory->create();
         $resultPage->getConfig()->getTitle()->set(__('Hello World'));
         return $resultPage;
    }
}

app/code/StackExchange/HelloWorld/view/frontend/layout/helloworld_index_index.xml -布局文件

<?xml version="1.0"?>
<page layout="2columns-left" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="Magento\Framework\View\Element\Template" template="StackExchange_HelloWorld::index.phtml" />
        </referenceContainer>
    </body>
</page>

app/code/StackExchange/HelloWorld/view/frontend/templates/index.phtml -块的模板

 <h2>Hello World</h2>

完成后,在控制台中运行

php bin / magento设置:升级

您应该可以在网址上看到结果 [ROOT]/helloworld


谢谢@Marius。我已经试过了。它不起作用。显示404错误。
Saravanan DS

您的模块启用了吗?它是否出现在system-> configuration中?
Marius

是。启用并显示在系统->配置中。
Saravanan DS 2016年

好。我将再试一次,并根据需要编辑答案。
Marius

1
我想我找到了问题。该routes.xml文件不应放在app/code/StackExchange/HelloWorld/etc/frontendapp/code/StackExchange/HelloWorld/frontend。有一个etc缺失。而且我忘记use了控制器文件中的2个子句。看到我的更新答案。
Marius

1

我昨天也尝试过,成功制作了自己的hello world magento 2模块。我按照本教程创建了一个简单的Magento 2模块,共有6个步骤,如下所示

=>步骤1:制作模块文件夹:

应用程序/代码/ Magentoexplorer / Helloworld

=>第2步:添加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="Magentoexplorer_Helloworld" setup_version="1.0.0" />
</config>

=>步骤3:创建registration.php来注册模块

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Magentoexplorer_Helloworld',
    __DIR__
);

=>步骤4:如何安装,启用或禁用/删除模块

cd [magento_directory]
php bin/magento setup:upgrade

=>步骤5:模块的路线。创建app/code/Magentoexplorer/Helloworld/etc/frontend/routes.xml

<?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 id="magentoexplorer" frontName="helloworld">
            <module name="Magentoexplorer_Helloworld" />
        </route>
    </router>
</config>

=>步骤6:控制器和动作。

应用程序/代码/Magentoexplorer/Helloworld/Index/Index.php

<?php
namespace Magentoexplorer\Helloworld\Controller\Index;

class Display extends \Magento\Framework\App\Action\Action
{
  public function __construct(
\Magento\Framework\App\Action\Context $context)
  {
    return parent::__construct($context);
  }

  public function execute()
  {
    echo 'Hello World';
    exit;
  }
}


0

最简单的模块很容易:

  • 在内部app/code为供应商和模块创建文件夹。即app/code/MyCompany/FirstModule
  • FirstModule文件夹内添加一个registration.php

    DIR);

  • 在同一文件夹内,创建一个etc文件夹,例如app/code/MyCompany/FirstModule/etc

  • etc文件夹中创建一个module.xml

和瞧。而已。现在,您可以使用以下bin/magento module:enable MyCompany_FirstModule命令通过SSH激活模块。



0

要在Magento 2中创建模块,需要执行以下步骤:

  1. 创建目录。
  2. 模块配置
  3. 模块注册
  4. 前端路由器文件
  5. 创建控制器
  6. 创建块
  7. 前端布局文件
  8. 前端模板文件
  9. 模块激活

0

在Magento 2中创建Hello World模块。

最佳使用PHP Storm

要创建Hello World模块,您需要完成以下高级步骤:

最佳实践使用PHP Storm

步骤1:创建Hello World模块的文件夹

步骤2:建立模组

步骤3:注册创建的模块

步骤4:启用模块

步骤1:创建HelloWorld文件夹

模块的名称定义为“ VendorName_ModuleName”。第一部分是供应商的名称,最后一部分是模块的名称:例如:Sathya_HelloWorld。

##### 创建文件目录为

Magento2/app/code/Sathya/HelloWorld

步骤2:建立模组

有必要创建etc文件夹并添加module.xml文件
app/code/Sathya/HelloWorld/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="Sathya_HelloWorld" setup_version="1.0.0">
   </module>
</config>

步骤3:注册创建的模块

创建Registration.php文件

 app/code/Sathya/HelloWorld/registration.php

内容将是:

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

步骤4:启用模块

在启用模块之前,请确保是否已创建模块。为此,从Magento根目录运行命令as。

 php bin/magento module:status

它列出了所有禁用的模块

###### Sathya_HelloWorld

要启用该模块,请运行以下命令:

 php bin/magento module:enable Sathya_HelloWorld
还有另一种启用它的方法。稍后将对此进行说明。

请升级您的数据库:从Magento根目录运行“ bin / magento setup:upgrade”。

让我们运行命令:

  php bin/magento setup:upgrade

请跑

  php bin/magento setup:static-content:deploy

然后运行(可选)

  php bin/magento setup:static-content:deploy -f

要添加路由,必须创建routes.xml文件

app/code/Sathya/HelloWorld/etc/frontend/routes.xml

内容将是:

<?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="helloworld" id="helloworld">
            <module name="Sathya_HelloWorld"/>
        </route>
    </router>
</config>

您需要创建的目录和文件是:

app/code/Sathya/HelloWorld/Controller/Index/Test.php

内容将是:

<?php
namespace Sathya\HelloWorld\Controller\Index;

class Test extends \Magento\Framework\App\Action\Action
{
    protected $_pageFactory;

    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $pageFactory)
    {
        $this->_pageFactory = $pageFactory;
        return parent::__construct($context);
    }

    public function execute()
    {
        echo "Hello World";
        exit;
    }
}

完成后,请运行命令清除缓存

php bin/magento c:f

通过输入URL检查模块,现在应为:

 http://< YourDomain.com >/helloworld/index/test
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.