Magento 2 Modulentwicklung - Teil 1: Vorbereitung

Nachdem ich in meinem letzten Blogartikel die wichtigsten Neuerungen unter Magento 2 vorgestellt habe, wird es jetzt endlich Zeit: Wir entwickeln zusammen ein Magento 2 Modul.

In meiner Blogserie geht es darum, alles Wichtige zu lernen, um als Magento 1 Entwickler ein neues Magento 2 Modul schreiben oder ein bestehendes Magento 1 Modul portieren zu können.

Aufbau der Magento 2-Serie

Hier erstmal ein kurzer Überblick über die einzelnen Kapitel in der Blogserie:

  1. Vorbereitung
  2. Frontend - Templates, Layouts, Blöcke
  3. Controller und Actions
  4. Models, Service Layer, Einführung Dependency Injection
  5. Wichtige Objekte in Magento 2
  6. Install-Scripts und Observer
  7. Backend: Templates, XML Dateien und Layouts
  8. Javascript

Im heutigen Beitrag stelle ich das Grundgerüst für Magento 2 Module vor.

Installation von Magento 2

Bevor wir mit der Entwicklung von unserem neuen Modul starten können, brauchen wir natürlich eine Magento-Installation. Magento 2 lässt sich vollständig über Composer installieren und verwalten. Man sollte daher zunächst Composer installieren. Wir werden das Tool später auch nutzen, um unser Modul zu installieren und zu aktualisieren.

Danach folgenden Befehl ausführen um Magento 2 über Composer herunterzuladen:

composer create-project magento/community-edition magento2 -s dev --prefer-dist

Der Befehl erstellt ein neues Composer Projekt auf Basis des aktuellen CE Releases. Dieser Shop dient als Test-Shop für unser neues Modul.

Wir werden während des Herunterladens eventuell nach zwei Dingen gefragt:

  • Magento Connect Zugang
    Um einige der Magento Pakete herunterladen zu können, wird ein Magento Connect Key benötigt. Dafür bei Magento Connect anmelden und unter "My Account" → Developers → Secure Keys ein neues Schlüsselpaar generieren. Der Public Key dient als Benutzername, der Private Key als Passwort.
  • github OAuth Key
    Github hat beim Klonen der einzelnen Pakete eine Zugangsbeschränkung. Um diese zu umgehen, in den Einstellungen ein Token generieren.

Sobald der Shop heruntergeladen ist, können wir mit der Installation starten. Dafür wechseln wir in das Shop-Verzeichnis und führen diese Befehle aus:

find . -type d -exec chmod 775 {} \; && find . -type f -exec chmod 664 {} \;
chmod +x bin/magento

bin/magento setup:install \
   --db-host=mysql \
    --db-name=magento2 \
    --db-user=magento2 \
    --db-password=magento2 \
    --backend-frontname=admin \
    --admin-user=admin \
    --admin-password=admin123 \
    --admin-email=magento2@example.org \
    --admin-firstname=Admin \
    --admin-lastname=Admin \
    --base-url="http://magento2.local" \
    --base-url-secure="https://magento2.local" \
    --language=en_US \
    --currency=EUR \
    --use-rewrites=1 \
    --use-secure=0 \
    --use-secure-admin=0 \
    --cleanup-database

Hinweis:

Zuerst die Datenbank anlegen!

Zuerst werden die Berechtigungen im Verzeichnis korrigiert und danach führen wir das neue Magento CLI Tool aus, um den Shop zu installieren. Die einzelnen Parameter lassen sich natürlich alle anpassen und sind selbsterklärend.

Sobald die Installation abgeschlossen ist, können wir noch die Beispiel-Daten installieren, um den Shop mit ein wenig Leben zu füllen. Dafür stellt Magento jetzt einen einfachen Befehl zur Verfügung:

bin/magento sampledata:deploy
bin/magento setup:upgrade

Der Befehl lädt alle Beispiel-Module herunter und installiert sie. Der zweite Befehl führt danach alle Install- und Upgradescripte durch.

Der Beispiel-Shop ist somit eingerichtet und wir können mit der Modulentwicklung starten!


Unser neues Magento 2 Modul

Das neue Modul lässt sich am einfachsten direkt über Composer einrichten. Das Modul direkt im Shop zu entwickeln ist eher umständlich und wird nicht empfohlen.

Wir generieren also außerhalb des Shops ein neues Verzeichnis. In diesem Verzeichnis wird unser neues Modul liegen. Um das Modul nachher einfach mit Composer installieren zu können, sollte eine Versionsverwaltung benutzt werden. An dieser Stelle verwende ich dafür git.

Um unser Modul installieren zu können, müssen wir jetzt drei Dateien erstellen, die jedes Modul benötigt.

Als Erstes wird die composer.json angelegt:

{
  "name": "tudock/helloworld",
  "description": "Tutorial Modul für die Magento 2 Blogserie.",
  "require": {
    "magento/magento-composer-installer": "*"
  },
  "type": "magento2-module",
  "version": "0.0.1",
  "autoload": {
    "files": [ "registration.php" ],
      "psr-4": {
        "Tudock\\HelloWorld\\": ""
    }
  }
}

Diese Datei ist die Paketdatei für Composer. Unter "name" befindet sich der Name des Paketes. Dieser besteht nur aus Kleinbuchstaben und hat das Format (package)/(modulname).

Unter "version" können wir die aktuelle Version unseres Moduls eintragen. Wichtig zu wissen ist, dass diese Version für Magento selbst keine Bedeutung hat (auch nicht für Upgrade-Scripts). Composer verwendet sie allerdings um festzustellen, wann eine neue Version des Moduls verfügbar ist.

Der Eintrag unter "autoload" teilt Composer mit, unser Modul unter "vendor/" im Shop zu installieren. Es wird nicht nach app/code kopiert, sondern bleibt direkt unter vendor/tudock/helloworld, dort können wir damit entwickeln.

Als Nächstes braucht Magento eine PHP-Datei, um das Modul zu entdecken. Magento scannt den Shop an einigen Schlüsseldateien nach Scripts mit dem Namen registration.php. Diese Datei legen wir jetzt für unser Modul an:  

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

Der Befehl in der Datei weist Magento an, das Modul "Tudock_HelloWorld" im aktuellen Ordner zu registrieren. Der Name muss mit dem Pfad, der in der composer.json angegeben wurde, übereinstimmen.

Als Letztes fehlt noch die gute alte 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="Tudock_HelloWorld" setup_version="0.0.1" />
</config>

Wie man sieht, ist diese stark abgespeckt worden. Unter "name" einfach wieder den Modulnamen eintragen. Unter "setup_version" folgt dann noch einmal die Version des Moduls.

Tipp:

Magento 2 benutzt XML Schema Definitionen für die verschiedenen XML Dateien. Der Link zur Schema-Datei steht unter "xsi:noNamespaceSchemaLocation".

Dieser Link wird von Magento aufgelöst und vom eigenen IDE meist nicht verstanden. Um für phpstorm eine Datei zu erstellen, die die Pfade auflöst, bringt Magento direkt einen Befehl mit:

cd <SHOP>
bin/magento dev:urn-catalog:generate <modul_ordner>/.idea/misc.xml

Dieser Befehl speichert die Datei gleich am richtigen Ort für phpstorm. Support für weitere IDEs soll in Zukunft folgen.

Das Magento 2 Modul installieren

Unser kleines Demo-Modul ist jetzt schon bereit für die Installation. Um das Modul zu installieren, müssen wir die composer.json im Shop anpassen. Dafür "repositories" um einen Eintrag erweitern:

    "repositories": [
        {
            "type": "composer",
            "url": "https://repo.magento.com/"
        },
        {
            "type": "vcs",
            "url": "/pfad/zum/Modul/"
        }
    ],

Wir tragen unser Paket als Composer Repository via Version Control System ein. So eingerichtet wird Composer mit jedem Commit eine neue Version des Moduls registrieren, das heißt, wir können mit jedem Commit updaten. Es ist auch möglich, Commits mit Versionen zu taggen. Wer mehr über das Zusammenspiel von Composer und git wissen möchte – eine Recherche zu diesem Thema ist lohnenswert.

Um unser Modul zum Shop hinzuzufügen, müssen wir jetzt folgende Befehle eingeben:

cd <SHOP>
# Installiere das Modul via Composer
composer require tudock/helloworld @dev # Name des Paketes in der composer.json unseres Moduls
# @dev zwingt Composer das Modul zu installieren obwohl es als zu instabil eingestuft wird

# Aktiviere das Modul
bin/magento module:enable Tudock_HelloWorld

# Upgrade Magento (richte Datenbanken etc. ein)
bin/magento setup:upgrade

Der letzte Befehl ist notwendig, da Magento Install- und Upgrade Logik nicht mehr automatisch ausführt. Wenn ein Modul aktiviert wird ohne den letzten Befehl auszuführen, kann dies den ganzen Shop lahmlegen.

Die Warnung am Ende darf im Entwicklungsmodus (Standard) ignoriert werden. Was sie genau bedeutet, erläutere ich in den nächsten Teilen der Blogserie.

Als Letztes ist es gut, den Cache zu leeren:

bin/magento cache:flush

Damit sind wir fertig! Um das Modul in Zukunft zu updaten (das geht mit jedem neuen Commit) folgende Befehle ausführen:

composer update
bin/magento setup:upgrade

Jetzt können wir sehen, ob unser Modul wirklich installiert wurde.

Hinweis:

Sollte beim Shop-Aufruf ein Fehler angezeigt werden, ist das wahrscheinlich ein Berechtigungsproblem. Dieses kann auftreten, wenn bin/magento über einen anderen Benutzer ausgeführt wird als der Webserver. Um das Problem zu lösen, müssen die Berechtigungen am var/generation Ordner korrigiert werden.


Testen

Wenn der Shop läuft, loggen wir uns ins Backend ein. Das Backend findet sich unter /admin.

Dort angemeldet finden wir unter STORES/Configuration (bzw. Konfiguration) die altbekannten Einstellungen wieder.

Unter Erweitert/Erweitert liegt – wie in Magento 1 auch – eine Liste von Modulen, um die Ausgabe von Blöcken der Module abzuschalten. Wenn wir in dieser Liste den Namen unseres Moduls finden, haben wir es geschafft:

Also, der erste Schritt ist abgeschlossen! Wir haben jetzt eine solide Grundlage, um einen Shop und ein Modul aufzusetzen.

Wer sich den Code der einzelnen Teile von diesem Tutorial noch einmal ansehen will, findet das HelloWorld Modul bei github. Die einzelnen Kapitel aus der Blogserie sind getaggt.

Im nächsten Beitrag gehe ich auf die Veränderungen in der Frontend-Entwicklung (Templates/Layouts) ein, ehe wir uns dann auf Models und Dependency Injection stürzen...

Update 20.04.2016:

Ich habe die composer.json für das Modul etwas an die "neue" Art, Module in Magento 2 zu laden, angepasst. Statt wie vorher über "extra/map" die Module nach "app/code" zu kopieren, wird das Modul jetzt dank "autoload" direkt aus dem vendor Verzeichnis geladen. Will man das Modul also im Shop bearbeiten, macht man dies direkt im vendor-Verzeichnis. Vorteil: Die Git-Versionierung bleibt vorhanden und es kann direkt im Shop entwickelt werden.
Der Unteschied zur alten Methode findet sich in diesem Commit.

Außerdem habe ich bei der Gelegenheit das "Inhaltsverzeichnis" etwas aktualisiert.

Autor: Kategorie: E-Commerce
Schlagwörter: Magento, Wissen, Magento2
YTo2OntzOjY6ImZldXNlciI7aTowO3M6MzoicGlkIjtpOjk2O3M6MzoiY2lkIjtpOjEwOTYxMjQyMzA7czo0OiJjb25mIjthOjEwOntzOjEwOiJzdG9yYWdlUGlkIjtpOjEyNDtzOjE0OiJleHRlcm5hbFByZWZpeCI7czoxMToidHhfbmV3c19waTEiO3M6MTM6IlVzZXJJbWFnZVNpemUiO2k6MTg7czo5OiJhZHZhbmNlZC4iO2E6MTp7czoyMToic2hvd0NvdW50Q29tbWVudFZpZXdzIjtpOjA7fXM6ODoic2hhcmluZy4iO2E6MTp7czoxMjoidXNlU2hhcmVJY29uIjtOO31zOjg6InJhdGluZ3MuIjthOjM6e3M6MTY6InJhdGluZ0ltYWdlV2lkdGgiO2k6MTE7czoxNjoicmV2aWV3SW1hZ2VXaWR0aCI7aToxNjtzOjg6Im1vZGVwbHVzIjtzOjQ6ImF1dG8iO31zOjY6InRoZW1lLiI7YTo3OntzOjI2OiJib3htb2RlbFRleHRhcmVhTGluZUhlaWdodCI7aTozMDtzOjI0OiJib3htb2RlbFRleHRhcmVhTmJyTGluZXMiO2k6NDtzOjE1OiJib3htb2RlbFNwYWNpbmciO2k6MTA7czoxODoiYm94bW9kZWxMaW5lSGVpZ2h0IjtpOjIwO3M6MTg6ImJveG1vZGVsTGFiZWxXaWR0aCI7aToxMzQ7czoyNjoiYm94bW9kZWxMYWJlbElucHV0UHJlc2VydmUiO2k6MTtzOjIyOiJib3htb2RlbElucHV0RmllbGRTaXplIjtpOjM1O31zOjE3OiJwcmVmaXhUb1RhYmxlTWFwLiI7YToxMDp7czoxNDoidHhfYWxidW0zeF9waTEiO3M6MTc6InR4X2FsYnVtM3hfaW1hZ2VzIjtzOjE1OiJ0eF9jb21tZXJjZV9waTEiO3M6MjA6InR4X2NvbW1lcmNlX3Byb2R1Y3RzIjtzOjEyOiJ0eF9pcmZhcV9waTEiO3M6MTA6InR4X2lyZmFxX3EiO3M6MTU6InR4X21pbmluZXdzX3BpMSI7czoxNjoidHhfbWluaW5ld3NfbmV3cyI7czo5OiJ0eF90dG5ld3MiO3M6NzoidHRfbmV3cyI7czoxMToidHRfcHJvZHVjdHMiO3M6MTE6InR0X3Byb2R1Y3RzIjtzOjI0OiJ0eF93ZWNzdGFmZmRpcmVjdG9yeV9waTEiO3M6MjU6InR4X3dlY3N0YWZmZGlyZWN0b3J5X2luZm8iO3M6MTI6InR4X2NvbW11bml0eSI7czo4OiJmZV91c2VycyI7czoxOToidHhfY3d0Y29tbXVuaXR5X3BpMSI7czo4OiJmZV91c2VycyI7czoxMToidHhfbmV3c19waTEiO3M6MjU6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3MiO31zOjExOiJzaG93VWlkTWFwLiI7YTo1OntzOjk6InR4X3R0bmV3cyI7czo3OiJ0dF9uZXdzIjtzOjExOiJ0dF9wcm9kdWN0cyI7czo3OiJwcm9kdWN0IjtzOjEyOiJ0eF9jb21tdW5pdHkiO3M6NDoidXNlciI7czoxOToidHhfY3d0Y29tbXVuaXR5X3BpMSI7czoyNToiYWN0aW9uPWdldHZpZXdwcm9maWxlJnVpZCI7czoxMToidHhfbmV3c19waTEiO3M6NDoibmV3cyI7fXM6MTI6IlJlcXVpcmVkTWFyayI7czoxOiIqIjt9czo0OiJsYW5nIjtzOjI6ImRlIjtzOjM6InJlZiI7czoyOToidHhfbmV3c19kb21haW5fbW9kZWxfbmV3c18yMzAiO30%3DYTo0OntzOjQ6ImNvbmYiO2E6MzU6e3M6MTc6InVzZVdlYnBhZ2VQcmV2aWV3IjtzOjE6IjEiO3M6MjI6InVzZVdlYnBhZ2VWaWRlb1ByZXZpZXciO3M6MToiMSI7czoyMDoid2VicGFnZVByZXZpZXdIZWlnaHQiO3M6MjoiNzAiO3M6MjA6Im1heENoYXJzUHJldmlld1RpdGxlIjtzOjI6IjcwIjtzOjMxOiJ3ZWJwYWdlUHJldmlld0Rlc2NyaXB0aW9uTGVuZ3RoIjtzOjM6IjE2MCI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvbk1pbmltYWxMZW5ndGgiO3M6MjoiNjAiO3M6Mjc6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lUGFnZSI7czozOiIxODAiO3M6MzM6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lVGVtcEltYWdlcyI7czoyOiI2MCI7czozMDoid2VicGFnZVByZXZpZXdDYWNoZUNsZWFyTWFudWFsIjtzOjE6IjAiO3M6Mjg6IndlYnBhZ2VQcmV2aWV3TnVtYmVyT2ZJbWFnZXMiO3M6MjoiMTAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbmltYWxJbWFnZUZpbGVTaXplIjtzOjQ6IjE1MDAiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbkltYWdlU2l6ZSI7czoyOiI0MCI7czozMDoid2VicGFnZVByZXZpZXdTY2FuTWF4SW1hZ2VTaXplIjtzOjM6IjQ1MCI7czoyOToid2VicGFnZVByZXZpZXdTY2FuTWluTG9nb1NpemUiO3M6MjoiMzAiO3M6MzE6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnMiO3M6MjoiNDAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnNGb3JMb2dvIjtzOjI6IjU1IjtzOjQwOiJ3ZWJwYWdlUHJldmlld1NjYW5NYXhIb3J6aXpvbnRhbFJlbGF0aW9uIjtzOjI6IjU7IjtzOjM3OiJ3ZWJwYWdlUHJldmlld1NjYW5tYXh2ZXJ0aWNhbHJlbGF0aW9uIjtzOjE6IjMiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2NhbkxvZ29QYXR0ZXJucyI7czoxMDoibG9nbyxjcmdodCI7czozODoid2VicGFnZVByZXZpZXdTY2FuRXhjbHVkZUltYWdlUGF0dGVybnMiO3M6NTc6InBpeGVsdHJhbnMsc3BhY2VyLHlvdXR1YmUscmNsb2dvcyx3aGl0ZSx0cmFuc3BhLGJnX3RlYXNlciI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvblBvcnRpb25MZW5ndGgiO3M6MjoiNDAiO3M6MjU6IndlYnBhZ2VQcmV2aWV3Q3VybFRpbWVvdXQiO3M6NDoiNzAwMCI7czoxMjoidXNlUGljVXBsb2FkIjtzOjE6IjAiO3M6MTI6InVzZVBkZlVwbG9hZCI7czoxOiIwIjtzOjEzOiJwaWNVcGxvYWREaW1zIjtzOjM6IjEwMCI7czoxNjoicGljVXBsb2FkTWF4RGltWCI7czozOiI4MDAiO3M6MTY6InBpY1VwbG9hZE1heERpbVkiO3M6MzoiOTAwIjtzOjIyOiJwaWNVcGxvYWRNYXhEaW1XZWJwYWdlIjtzOjM6IjQ3MCI7czoyMzoicGljVXBsb2FkTWF4RGltWVdlYnBhZ2UiO3M6MzoiMzAwIjtzOjIwOiJwaWNVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIyNTAwIjtzOjIwOiJwZGZVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIzMDAwIjtzOjE4OiJzb3VuZGNsb3VkQ2xpZW50SUQiO3M6MDoiIjtzOjIyOiJzb3VuZGNsb3VkQ2xpZW50U2VjcmV0IjtzOjA6IiI7czoyMDoidXNlVG9wV2VicGFnZVByZXZpZXciO3M6MDoiIjtzOjI0OiJ0b3BXZWJwYWdlUHJldmlld1BpY3R1cmUiO2k6MDt9czoxMToiYXdhaXRnb29nbGUiO3M6Mjg6IldhcnRlIGF1ZiBBbnR3b3J0IHZvbiBHb29nbGUiO3M6ODoidHh0aW1hZ2UiO3M6MTM6IkJpbGQgZ2VmdW5kZW4iO3M6OToidHh0aW1hZ2VzIjtzOjE1OiJCaWxkZXIgZ2VmdW5kZW4iO30%3DYTowOnt9YTowOnt9YTo3OntzOjE2OiJjb21tZW50TGlzdEluZGV4IjthOjE6e3M6MzI6ImNpZHR4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjMwIjthOjE6e3M6MTA6InN0YXJ0SW5kZXgiO2k6MTU7fX1zOjE0OiJjb21tZW50c1BhZ2VJZCI7aTo5NjtzOjE2OiJjb21tZW50TGlzdENvdW50IjtpOjEwOTYxMjQyMzA7czoxMjoiYWN0aXZlbGFuZ2lkIjtpOjA7czoxNzoiY29tbWVudExpc3RSZWNvcmQiO3M6Mjk6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjMwIjtzOjEyOiJmaW5kYW5jaG9yb2siO3M6MToiMCI7czoxMjoibmV3Y29tbWVudGlkIjtOO30%3D YTo1OntzOjExOiJleHRlcm5hbFVpZCI7aToyMzA7czoxMjoic2hvd1VpZFBhcmFtIjtzOjQ6Im5ld3MiO3M6MTY6ImZvcmVpZ25UYWJsZU5hbWUiO3M6MjU6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3MiO3M6NToid2hlcmUiO3M6MTcwOiJhcHByb3ZlZD0xIEFORCBleHRlcm5hbF9yZWY9J3R4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjMwJyBBTkQgcGlkPTEyNCBBTkQgdHhfdG9jdG9jX2NvbW1lbnRzX2NvbW1lbnRzLmRlbGV0ZWQ9MCBBTkQgdHhfdG9jdG9jX2NvbW1lbnRzX2NvbW1lbnRzLmhpZGRlbj0wIEFORCBwYXJlbnR1aWQ9MCI7czoxMDoid2hlcmVfZHBjayI7czoxMzk6ImV4dGVybmFsX3JlZj0ndHhfbmV3c19kb21haW5fbW9kZWxfbmV3c18yMzAnIEFORCBwaWQ9MTI0IEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuZGVsZXRlZD0wIEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuaGlkZGVuPTAiO30%3D YToyOntpOjA7czoxNDk6IjxpbWcgc3JjPSIvdHlwbzNjb25mL2V4dC90b2N0b2NfY29tbWVudHMvcmVzL2Nzcy90aGVtZXMvdHVkb2NrL2ltZy9wcm9maWxlLnBuZyIgY2xhc3M9InR4LXRjLXVzZXJwaWMgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjtpOjk5OTk5O3M6MTUxOiI8aW1nIHNyYz0iL3R5cG8zY29uZi9leHQvdG9jdG9jX2NvbW1lbnRzL3Jlcy9jc3MvdGhlbWVzL3R1ZG9jay9pbWcvcHJvZmlsZWYucG5nIiBjbGFzcz0idHgtdGMtdXNlcnBpY2YgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjt9
5 Kommentare verfügbar
Bitte bestätigen Sie
Nein
Ja
Information
Ok
Vorschau wird geladen ...
* Pflichtfeld
Ihr Kommentar ist eine Antwort auf den folgenden Kommentar

Sebastian Wichmann (http://strickermann.com) schrieb am 08.08.2018  

Wundervoll!
Ich habe bis hierher einfach mal alles nachempfunden und es hat auf Anhieb geklappt. Dafür meinen Dank!
Ich frage mich nur, wie es am Besten ist, sich grundsätzlich durch die Magento Code Materie zu fuchsen. Ich durchforste das Netz seit Wochen
mehr anzeigen ...
und finde keinen Einstieg. Das hier könnte ein Licht sein.

Das Key Problem im letzten Kommentar kann ich bestätigen. Das funktioniert bestens mit der Antwort. Hierbei noch ein kleiner aber haarschonender Tipp:

NICHT den copy Button benutzen!!! Der setzt ein Leerzeichen vor seine Fracht und der Key funktioniert dann nicht!!! Da bin ich auch mal in die Knie gegangen. Besser mit der Maus vom ersten, bis zum letzten Zeichen markieren und händisch kopieren..

Antworten
Vorschau wird geladen ...
* Pflichtfeld

Regine Voigt (https://www.tudock.de/) schrieb am 09.08.2018  

Hallo Sebastian,
danke für den positiven Kommentar! Ein paar Tipps zum Einstieg in Magento 2 haben wir im Blogbeitrag "https://www.tudock.de/blog/e-co...n-lernen/" festgehalten. Generell empfehlen wir,
mehr anzeigen ...
die erlernte Theorie gleich in der Praxis anzuwenden. Also z.B. Testshop aufsetzen, Magento 2 Frontend DevDocs und Tutorial durchgehen und in der M2 Installation durchspielen, Modul inklusive FE programmieren. Aber da bist du ja schon auf dem Weg :-)

Antworten
Vorschau wird geladen ...
* Pflichtfeld

Tobias Mesch () schrieb am 22.12.2017  

Hallo Herr Köpcke,

wenn ich versuche mein Modul über den Composer zu installieren, werde ich nach einem Benutzernamen und einem Passwort gefragt. Mit den Zugangsdaten für den Magento Marketplace komme ich nicht weiter und mir wird eine Fehlermeldung ausgegeben:
Invalid
mehr anzeigen ...
credentials for 'https://repo.magento.com/packages.json', aborting

Habe mich sicherheitshalber mit den Zugangsdaten nochmal im Marketplace angemeldet. Das funktioniert problemlos. Es sieht in der Anleitung nicht so aus, als hätten Sie Zugangsdaten eingeben müssen, oder?

Herzlichen Dank und schöne Weihnachten.
LG Tobias

Antworten
Vorschau wird geladen ...
* Pflichtfeld

Marco Köpcke (https://www.tudock.de) schrieb am 22.12.2017  

Hallo Tobias,
das stimmt mittlerweile tatsächlich, dass dort Zugangsdaten benötigt werden.
Die Zugangsdaten sind allerdings nicht die normalen Login-Daten für Ihren Magento Marketplace Account, sondern ein spezieller API Key, den Sie über Ihren Account
mehr anzeigen ...
generieren können.

Sie finden dies nach dem Login unter "My Account -> Developer Portal -> My Access Keys" (https://developer.magento.com/c...cessKeys/list/).

Dort können Sie neue Keys generieren. Der Public Key ist dabei Ihr Benutzername für Composer und der Private Key das Passwort. Geben Sie diese ein, und alles sollte funktionieren.

Viele Grüße und frohes Fest
Marco

Antworten
Vorschau wird geladen ...
* Pflichtfeld

olidev olidev () schrieb am 03.05.2017  

Once the module is created, you also need to check its status to see if it's enabled or no (as mentioned here: https://www.cloudways.com/blog/...e-in-magento-2/ ). You can do that by entering the command for status.

Antworten
Vorschau wird geladen ...
* Pflichtfeld

Wir behalten uns vor, Kommentare zu löschen, beispielsweise wenn sich diese nicht auf den Beitrag beziehen, zur Eigenwerbung missbraucht werden, persönliche Daten anderer enthalten, diskriminieren, beleidigen oder Rechte verletzen.

Datenschutzhinweis: Wenn Sie einen Kommentar oder sonstigen Beitrag in unserem Blog hinterlassen, speichern wir neben Ihren Angaben Ihre IP-Adresse. Darüber hinaus können Sie die Beiträge und Kommentare unseres Blogs abonnieren. Das Kommentarabonnement können Sie jederzeit abbestellen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.

E-Commerce & Webentwicklung: Wir realisieren und optimieren Internetprojekte. Unser Fachgebiet sind Onlineshops, Rich Internet Applications und anspruchsvolle Onlineauftritte. Über unsere Arbeit schreiben wir. Hier im Blog von TUDOCK.