练习:magento2框架后台(前台)新增一个菜单项

想要在magento2框架基础上添加一个自己的菜单项,主要有3步:

1、创建你要新增的菜单项;

2、创建菜单项要链接的模块的后台路由(URL路径);

3、创建模块的控制器和视图

一、创建新增菜单项

        可以参考上一节新增菜单项的内容,这里将上节三级子菜单 Third Level Example的<action>属性修改为Controller下要链接的功能(route文件中起的前名/控制器名/控制器下的php类名),本例为"adminer/index/index"。

二、管理模块路由(URL)的ect目录

        一般来说,etc中需要包含两个文件夹,frontend(前端路由文件夹)和 adminhtml(后台管理路由文件夹),分别在这两个文件夹中创建路由文件routes.xml,用来管理每个模块(前端和后台)。目录结构如下:

        

        routes.xml文件中,由<router id>属性决定是路由到前端还是后台,standard为前端,admin为后台。

                         

        <route id>属性决定URL的第一段内容,也可以理解为这个模块的简称,frontname与其一致。

三、创建模块的控制器和视图

1、控制器(Controller目录)

        Magento 前端控制器使用 [Package]\[Module]\Controller\[Controller Segment]\[Action Segment] 命名约定。 后端控制器使用[Package]\[Module]\Controller\Adminhtml\[Controller Segment]\[Action Segment],多了一个Adminhtml段。

                 

        Controller的Index.php文件

<?php
namespace Bcn\ToDoCrud\Controller\Adminhtml\Index;
class Index extends \Magento\Backend\App\Action
{
    protected \Magento\Framework\View\Result\PageFactory $result_PageFactory;
    public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory)
    {
        $this->result_PageFactory = $resultPageFactory;
        return parent::__construct($context);
    }

    public function execute()
    {
        return $this->result_PageFactory->create();
    }
    protected function _isAllowed()
    {
        return $this->_authorization->isAllowed('Bcn_ToDoCrud::top_level_example');
    }
}

        注意事项:

(1)所有Magento后端控制器类都需要继承\Magento\Backend\App\Action\Action类。 不这样做可能会导致系统不稳定,并造成意外的隐私和安全漏洞;

(2)__construct 方法。 虽然您的控制器中不需要 __construct 方法,但如果您使用该方法,则需要包含一个后端上下文对象参数\Magento\Backend\App\Action\Context $context;

public function __construct(Context $context)
    {
        parent::__construct($context);
    }

(3)后端管理控制器的 _isAllowed 方法(超级用户不受限)。如果 _isAllowed 返回 true,允许该用户访问;如果没有,他们将看到访问被拒绝的屏幕。例子中何被分配了 Pulsestorm_HelloAdminBackend::menu_1 权限的用户(通过system -> permissions)都将能够访问此控制器端点。

protected function _isAllowed()
{
    return $this->_authorization->isAllowed('Bcn_ToDoCrud::top_level_example');
}

2、创建视图文件(view目录放页面展示,Block目录放操作)

        view下的前后台子目录(frontend和adminhtml)中都包含layout和templates目录,layout目录下放布局的xml文件,templates目录下放Block的phtml模板。

        

        本部分包含三个部分,布局的xml文件、Block视图文件和Block的 phtml 模板。

(1)创建布局xml文件

        Bcn/ToDoCrud/view/adminhtml/layout/admin_backend_index_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <referenceBlock name="content">
        <block  template="content.phtml"
                class="Bcn\ToDoCrud\Block\Adminhtml\Main"
                name="bcn_todocrud_adminbackend_block_main" />
    </referenceBlock>
</page>

        其中template属性为对应phtml模板的名称;  class属性为对应Block块中的类(视图文件)。

(2)创建Block的phtml模板

        Bcn/ToDoCrud/view/adminhtml/templates/content.phtml

<h1>This is my template, there are many like it, but this one is mine.</h1>

(3)创建Block块的类

        Bcn/ToDoCrud/Block/Adminhtml/Main.php

<?php

namespace Bcn\ToDoCrud\Block\Adminhtml;

class Main extends \Magento\Backend\Block\Template
{
    function _prepareLayout(){

    }
}

完成后点击Third Level Example,如下,展示了template中的phtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值