cancel
Showing results for 
Search instead for 
Did you mean: 

Adminmenü ergänzen; Magento 2

SOLVED

Adminmenü ergänzen; Magento 2

Hallo Gemeinde,

um die eigenen Module im Adminbereich zu strukturieren, befolgte ich die Anleitung der Magento-Dokumentation und erweiterte das Menü um unseren Einträge.

 

Menüansicht

 

Führt man den Mauszeiger auf "Eigenanlieferung", erscheint der Link

"DOMAIN/ADMIN_SYNONYM/eigenanlieferung/eigen/index/key/..."

nach dem Schema <frontname><controller><action>, allerdings erscheint bei Klick das Dashboard.

 

Das Modul ist erfolgreich nach folgender Struktur unter app/code/dfprojects installiert und aktiviert:

 

Modulstruktur

 

app/code/dfprojects/module-eigenanlieferung/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="DfProjects_EigenAnlieferung" setup_version="2.1.8" />
</config>

 

app/code/dfprojects/module-eigenanlieferung/composer.json

{
  "name": "dfprojects/module-eigenanlieferung",
  "description": "Versandmethode Anlieferung durch Fliesen-Schotte selbst",
  "require": {
    "magento/magento-composer-installer": "*"
  },
  "type": "magento2-module",
  "version": "0.0.1",
  "autoload": {
    "files": [ "registration.php" ],
      "psr-4": {
        "DfProjects\\EigenAnlieferung\\": ""
    }
  }
}

 

app/code/dfprojects/module-eigenanlieferung/registration.php

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

app/code/dfprojects/module-eigenanlieferung/Controller/Adminhtml/Eigen/Index.php

<?php
      namespace DfProjects\EigenAnlieferung\Controller\Adminhtml\Eigen;

      class Index extends \Magento\Backend\App\Action
      {
        /**
        * @var \Magento\Framework\View\Result\PageFactory
        */
        protected $resultPageFactory;

        /**
         * Constructor
         *
         * @param \Magento\Backend\App\Action\Context $context
         * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
         */
        public function __construct(
            \Magento\Backend\App\Action\Context $context,
            \Magento\Framework\View\Result\PageFactory $resultPageFactory
        ) {
             parent::__construct($context);
             $this->resultPageFactory = $resultPageFactory;
        }

        /**
         * Load the page defined in view/adminhtml/layout/exampleadminnewpage_helloworld_index.xml
         *
         * @return \Magento\Framework\View\Result\Page
         */
        public function execute()
        {
             return  $resultPage = $this->resultPageFactory->create();
        }
      }
    ?>
  

 

app/code/dfprojects/module-eigenanlieferung/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>
          <add id="DfProjects_EigenAnlieferung::dfp" title="Fliesen-Schotte" translate="title" module="DfProjects_EigenAnlieferung" sortOrder="11" dependsOnModule="DfProjects_EigenAnlieferung" resource="DfProjects_EigenAnlieferung::dfp"/>
          <add id="DfProjects_EigenAnlieferung::shipping" title="Versandmodule" translate="title" module="DfProjects_EigenAnlieferung" parent="DfProjects_EigenAnlieferung::dfp" sortOrder="10" dependsOnModule="DfProjects_EigenAnlieferung" resource="DfProjects_EigenAnlieferung::shipping"/>          
		  <add id="DfProjects_EigenAnlieferung::shipping_eigen" title="Eigenanlieferung" translate="title" module="DfProjects_EigenAnlieferung" parent="DfProjects_EigenAnlieferung::shipping" sortOrder="10" dependsOnModule="DfProjects_EigenAnlieferung" action="eigenanlieferung/eigen" resource="DfProjects_EigenAnlieferung::shipping"/>
        </menu>
    </config>
  

 

app/code/dfprojects/module-eigenanlieferung/view/adminhtml/layout/eigenanlieferung_eigen_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">
        <head>
            <title>
                Versandmodule
            </title>
        </head>
        <body>
            <referenceContainer name="content">
                <block class="Magento\Backend\Block\Template" template="DfProjects_EigenAnlieferung::eigen.phtml"/>
            </referenceContainer>
        </body>
    </page>
  

 

app/code/dfprojects/module-eigenanlieferung/view/adminhtml/templates/eigen.phtml

<p>Aha!</p>

 

Auffällig war bei Änderung des sortOrder-Attributes des ersten add-Eintrages (id="DfProjects_EigenAnlieferung::dfp") in der menu.xml auf <10, dass sich die Administration nicht mehr aufrufen liess und in einer Endlosschleife aufhing. Nur am Rande...

 

Trotz sorgfältiger Überprüfung aller erforderlichen Dateien auf korrekte Schreibweisen gelingt es mir nicht, die Seite des Moduls über den Link im Adminmenü zu erreichen.

(Für das Frontend gilt das Gleiche)

 

Hat einer der Backendexperten einen Tip? Müsste grundlegend am Routing der Magento-Installation etwas geändert/ergänzt werden?

 

MfG George

3 REPLIES

Re: Adminmenü ergänzen; Magento 2

app/code/dfprojects/module-eigenanlieferung/etc/adminhtml/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="admin">
        <route id="eigenanlieferung" frontName="eigenanlieferung">
            <module name="DfProjects_EigenAnlieferung" />
        </route>
    </router>
</config>

Re: Adminmenü ergänzen; Magento 2

Bei der Recherche zu dieser Problematik tauchen noch einige Fragen auf, welche durch die offizielle Magento-Dokomentation nicht erschliessend beantwortet werden. Ursächlich vermute ich einen Fehler in meiner menu.xml oder routes.xml.

 

Betrachtet man einen add-Eintrag, z.B.

 

 <add id="DfProjects_DfpEa::shipping_eigen" title="Eigenanlieferung" translate="title" module="DfProjects_DfpEa" parent="DfProjects_DfpEa::shipping" sortOrder="10" dependsOnModule="DfProjects_DfpEa" action="dfpea/eigenan/index/" resource="DfProjects_DfpEa::eigenan"/>

stellte ich fest, dass die Werte zu den Attributen wie folgt zu setzen sind:

 

 

id --> willkürlich, optimal <VENDORNAME>_<MODULENAME>::aussagekräftig, aber nach eigenem Ermessen

title --> was ich im Menü sehen will

translate --> "title"? Steht überall so, belassen wir es mal so

module --> erklärt sich mit <VENDORNAME>_<MODULENAME>

parent --> natürlich die übergeordnete Rubrik, wenn nicht angegeben, ein Punkt im linken Hauptmenü

depenceOnModule --> <VENDORNAME>_<MODULENAME> , der Menüeintrag erfolgt nur bei Vorhandensein des angegebenen Moduls

action --> der Knackpunkt, wie ich glaube, laut Docu <frontname>/<controller>/<action>/, bei  Modulen wie Magento_Config aber doch abweichend (adminhtml/system_config/edit/section/dev/)

resource -->optimal <VENDORNAME>_<MODULENAME>::wie id, dient zur Identifizierung ind der acl-Datei zur Freischaltung über den Adminbereich User-Roles

 

Ich suche hier keine fertige Lösung meines Problems, lediglich Erklärungen für initiale Denkanstösse...

 

MfG George

Re: Adminmenü ergänzen; Magento 2

Problem gelöst!

 

Nach freundlicher Unterstützung durch die Agentur Tudock Hamburg, insbesondere Regine, welche mir Valentina an die Seite setzte, kamen wir dem Problem auf die Schliche.

 

Für die Installation und Aktivierung eines Moduls spielt es scheinbar keine Rolle, ob bei Vendor- und Modulname auf die Gross- und Kleinschreibung in Verbindung zu den Verzeichnisordnern geachtet wird. Für die Generation der Links ist es nunmehr offensichtlich von entscheidender Relevanz. Dies ging leider aus den DevDocs nicht eindeutig hervor.

 

MfG George