magento创建模块

Magento团队创建了一个更为抽象的MVC模式,大概的运行过程是,

URL地址首先被一个PHP文件解析
该PHP文件会根据解析情况实例化一个Magento应用
这个Magento应用会实例化一个前端控制器对象
接着,前端控制器实例化路由对象
路由对象检查请求的URL地址,并作出相应的匹配
如果匹配成功,相应的控制器和动作会被分发
该控制器会被实例化,并且与动作同名的方法会被调用
被调用的方法根据请求的类型,对相应的模型调用相应的方法以获取数据
结束方法调用之后,控制器会实例化布局对象
根据请求中包含的变量及系统属性(通常叫做句柄),布局对象会为该请求创建一系列的Block对象
布局还会在相应的Block对象中调用输出方法,开始套嵌输出(Blocks之间的套嵌)
每个Block都有相关联的模板文件,Blocks包含PHP逻辑代码,模板文件则负责生成HTML文件
Block从模型中获取相关数据,换句话说,控制器并不用来传递数据到视图中

1. 禁用magento缓存
Admin → System → Cache Management → select all cache types 禁用它们。
2. 设置为开发者模式
php bin/magento deploy:mode:set developer

3. 模块主要文件夹在/app/code。
a 首先需要确定命名空间和模块名称。
即需要创建如下文件夹
/app/code/命名空间
/app/code/命名空间/模块名称
/app/code/命名空间/模块名称/etc
b 创建模块xml文件
即在/app/code/命名空间/模块名称/etc下创建module.xml文件,内容为(主要填写正确的module name,格式为"命名空间_模块名称")

<?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="Magease_Helloworld" setup_version="1.0.0">
    </module>
</config>
c   注册模块
    即在/app/code/命名空间/模块名称下创建registration.php文件,内容为(主要填写正确的module name,格式为"命名空间_模块名称")
<?php
 
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Magease_Helloworld',
    __DIR__
);
d. 安装模块
    php bin/magento setup:upgrade
    
    如果要确保模块已安装,可以转到Admin_Stores_Configuration_Advanced_Advanced并检查模块是否存在于列表中,或者可以打开app/etc/config.php并检查数组中的“Magease_Helloworld”键,该键的值应该设置为1。

e. 创建控制器
    (1) 首先定义路由。
        在 etc/frontend 或 etc/adminhtml 文件夹中创建routes.xml(第一个用于前端,第二个用于后端)。
		在routes.xml中为控制器添加自定义配置,例如:
		- router:id - standard (frontend)/admin
		- route:id - 您的唯一路由ID 
		- route:frontName - url中的唯一名称,这是基础路由url的第一部分
		- 模块名称 - 您的模块名称
		按照上面的url结构创建action类:Controller/Actionpath/Actionclass.php
        即在/app/code/命名空间/模块名称/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="Magease_Helloworld" />
        </route>
    </router>
</config>

在这里,我们使用id为“helloworld”定义我们的前端路由器和路由。该frontName属性将是我们的URL的第一部分。在Magento 2中,URL以这种方式构造:

<front_Name>/<controler_folder_name>/<controller_class_name>

  (2)  创建控制器。
       即在/app/code/命名空间/模块名称/Controller/Index文件夹下创建index.php文件,主要修改命名空间(在Magento 2中,每个action都有自己的类,它执行了execute()方法):
<?php
 
namespace Magease\Helloworld\Controller\Index;
 
use Magento\Framework\App\Action\Context;
 
class Index extends \Magento\Framework\App\Action\Action
{
    protected $_resultPageFactory;
 
    public function __construct(Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory)
    {
        $this->_resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }
 
    public function execute()
    {
        $resultPage = $this->_resultPageFactory->create();
        return $resultPage;
    }
}
 (3) 创建一个块
      即在/app/code/命名空间/模块名称/Block文件夹中创建Helloworld.php文件。
<?php
namespace Magease\Helloworld\Block;
 
class Helloworld extends \Magento\Framework\View\Element\Template
{
    public function getHelloWorldTxt()
    {
        return 'Hello world!';
    }
}
(4) 创建布局和模板文件
在Magento 2中,布局文件和模板放置在模块内的视图文件夹中。在视图文件夹中,我们可以有三个子文件夹:adminhtml,base和frontend。adminhtml文件夹用于admin,frontend文件夹用于前端,base文件夹用于admin和frontend文件。
首先,我们将在app/code/Magease/Helloworld/view/frontend/layout文件夹中创建helloworld_index_index.xml文件,添加以下代码:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd" layout="1column">
    <body>
        <referenceContainer name="content">
            <block class="Magease\Helloworld\Block\Helloworld" name="helloworld" template="helloworld.phtml" />
        </referenceContainer>
    </body>
</page>

每个页面都有一个布局,对于我们的控制器action,布局句柄是helloworld_index_index。您可以为每个布局句柄创建布局配置文件

在我们的布局文件中,我们向content容器中添加了一个块,并将块的模板设置为helloworld.phtml,我们将在下一步中创建它。

在app/code/Magease/Helloworld/view/frontend/templates文件夹中创建helloworld.phtml文件并添加以下内容($this变量正在对block类进行重新设置,执行getHelloWorldTxt()方法将返回字符串“Hello world!”):

<h1><?php echo $this->getHelloWorldTxt(); ?></h1>

后台菜单添加

  1. 创建基本模块(见上)。
  2. 创建新菜单项,它由配置和菜单节点以及添加指令组成。
    如:Magease/MenuItem/etc/adminhtml/menu.xml。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
       //唯一节点标识符,应遵循以下格式:Vendor_Module :: menu_item_description
        <add id="Magease_MenuItem::first_level_demo"   
            //菜单中显示的文本
             title="Magease First Level Item"
             //当前模块
             module="Magease_MenuItem"
             //放置菜单项的位置
             sortOrder="9999"
             //定义admin用户必须具有的ACL规则才能查看和访问此菜单,它在acl.xml中定义。否则,将不会呈现菜单项。为简单起见,使用了Magento_Backend :: content。
             resource="Magento_Backend::content" />
 
        <add id="Magease_MenuItem::second_level_demo"
             title="Magease Second Level Item"
             module="Magease_MenuItem"
             sortOrder="0"
             //告诉Magento生成指向某个后端控制器的链接
             action="menuitem/index/index"
             // 定义菜单项所依赖的第一级
             parent="Magease_MenuItem::first_level_demo"
             resource="Magento_Backend::content" />
    </menu>
</config>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值