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.
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:
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
Solved! Go to Solution.
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
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>
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
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