Magento 2 アドミンメニューの作成

create-admin-menu-magento-2

この記事では、Magento 2のAdmin Menuページの左サイトに表示されている、Magento 2 Admin Menuにリンクを追加する方法を紹介します。

まず、管理メニューの構造と、それぞれのメニューでのアクションを確認します。メニューの構造はレベルごとに分かれています。左のバーにはレベル0が表示されていて、レベル0のメニューをクリックすると上位のレベルがグループ化されて表示されます。例えば、この画像は「店舗」のメニューです。店舗」はレベル0で、左のバーに表示されているのがわかります。このメニューをクリックすると、以下のようなサブメニューが表示されます。また、そのサブメニューにもいくつかのサブメニューがあります(設定には全店舗、設定、利用規約、注文状況があります)。

フロントエンドでは、{router_name}{controller_folder}{action_name}というフォーマットになります。しかし、管理者メニューでは、管理者のルータ名(これはカスタマイズできます)が表示され、Magentoにバックエンドエリアであることを認識させます。

では、このメニューはどのようにして作られるのでしょうか?前のトピックで作成したシンプルなモジュール「Hello World」を使ってメニューを作成します。

Magento 2では、menu.xmlを使ってメニューを追加します。早速作ってみましょう。

Magento 2で管理者メニューを作成するには

ステップ1:menu.xmlの作成

管理者用メニューファイルの作成:menu.xmlファイル

app/code/Mageplaza/HelloWorld/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>
    </menu>
</config>

ステップ2: 管理メニューの追加

<?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>
        <add id="Mageplaza_HelloWorld::helloworld" title="Hello World" module="Mageplaza_HelloWorld" sortOrder="51" resource="Mageplaza_HelloWorld::helloworld"/>
        <add id="Mageplaza_HelloWorld::post" title="Manage Posts" module="Mageplaza_HelloWorld" sortOrder="10" action="mageplaza_helloworld/post" resource="Mageplaza_HelloWorld::post" parent="Mageplaza_HelloWorld::helloworld"/>
        <add id="Mageplaza_HelloWorld::hello_configuration" title="Configuration" module="Mageplaza_HelloWorld" sortOrder="99" parent="Mageplaza_HelloWorld::helloworld" action="adminhtml/system_config/edit/section/helloworld" resource="Mageplaza_HelloWorld::helloworld_configuration"/>
    </menu>
</config>

この例では、”Hello World “というレベル0のメニューと、”Manage Posts “と “Configuration “という2つのサブメニューを作成します。menu.xmlファイルには、Magentoのバックエンドにメニューアイテムを追加する’add’ノートのコレクションが定義されています。その構造を見てみましょう。

<add id="Mageplaza_HelloWorld::post" title="Manage Posts" module="Mageplaza_HelloWorld" sortOrder="10" action="mageplaza_helloworld/post" resource="Mageplaza_HelloWorld::post" parent="Mageplaza_HelloWorld::helloworld"/>

属性について説明しましょう。

  • id属性は、このノートの識別子です。一意の文字列で、以下のような形式になります。Vendor_ModuleName}::{menu_description}.
  • title 属性は、メニューバーに表示されるテキストです。
  • module属性は、このメニューが属するモジュールを定義します。
  • sortOrder属性は、メニューの位置を定義します。値が小さいほどメニューの上に表示されます。
  • parent 属性は、他のメニューノードの ID です。この属性は、このメニューが他のメニューの子であることをMagentoに伝えます。この例では parent=”Mageplaza_HelloWorld::helloworld” となっているので、このメニュー “Manage Posts” は “Hello World” メニューの子であり、Hello World メニューの中に表示されることがわかります。
  • action属性は、このメニューがリンクするページのURLを定義します。前述の通り、URLは{ルーター名}{controller_folder}{アクション名}という形式で指定します。- この例では、このメニューはモジュールHelloWorld、コントローラPost、アクションIndexにリンクします。
  • resource 属性は、admin ユーザーがこのメニューを見たりアクセスしたりするために必要な ACL ルールを定義するために使用されます。ACL についての詳細は別のトピックで説明します。

さらに子メニューを作ることもでき、上のストアメニューのように表示されます。

今回は、トップメニューレベルのアイコンについてお話したいと思います。レベル0のメニュータイトルの上に表示されています。このアイコンはMagentoの’Admin Icons’フォントで生成されています。

ステップ3:Magentoのキャッシュをフラッシュ

以下のコマンドラインを実行します

php bin/magento cache:clean

さて、Magento 2 Adminに行って、結果を見てみましょう。

「404 Not Found」のメッセージが表示されることがありますが、トラブルシューティングはこちらのチュートリアルに従ってください。

デモを申し込む

弊社の専門家は最適なソリューションをサポートさせて頂きます。

►►►サービスについて