Es ist wieder soweit. Magento (Ebay) hat einen neuen Release der Community Edition 2 Version veröffentlicht. Ein ausgewählter Kreis von Partnern hatte bereits das Vergnügen ein paar Tage vorher in Chicago exklusiv einen Einblick in die neuen Funktionen zu erlangen und seine Meinung dazu zu äußern. Ich persönlich finde das sehr unschön. Gerade in Deutschland gibt es viele Entwickler die sicherlich gerne etwas mehr in die Entwicklung involviert wären. Nicht, dass in der Vergangenheit Varien (Magento) mehr Wert auf den aktiven Austausch mit der Community wert gelegt hätte… Schade, hier hat Ebay mal wieder eine Change vertan.
Aber jetzt zu den Neuerungen…
Übersetzungen
Hier wurden alle __()
Methoden aus den Models und Helpern entfernt und durch eine neue globale Funktion ersetzt. Diese findet man nun unter app/code/Magento/Core/functions.php Ein passendes neues i18n Tool wurde unter dev/tools/Magento/Tools/I18n breitgestellt. Bei mir war das Tool allerdings defekt.
Für Javascript Übersetzungen gab es bisher die Datei jstranslate.xml. Diese wurde nun entfernt und die Standard-Übersetzungen in den Helper “app/code/Magento/Core/Helper/Js.php” gezogen. Hier muss man mal schauen wie man nun JS Übersetzungen pflegen kann.
Konfigurationen
Hier wurden einige Wünsche aus der Vergangenheit umgesetzt. Es existieren nun XSD-Dateien um die Daten zu validieren. Sehr schön. In diesem Zug mussten die Konfigurationsdateien allerdings syntaktisch etwas angepasst werden. Wer die XSDs mal anschauen möchte, findet einige z.B. im Core Modul. Dort ist auch die neue XSD für die Layout XML Dateien. Wirklich sehr praktisch.
Beispiele:
- app/code/Magento/Core/etc/cache.xsd
- app/code/Magento/Core/etc/layouts.xsd
Prototype durch jQuery Ersetzt
Prototype wurde laut Changelog nun komplett ersetzt. Das war sicherlich eine der aufwendigsten Änderungen.
Module die eine spezielle Konfiguration über eine eigene Datei unter “etc” bereitstellen wollen, können nun die Klasse “\Magento\Core\Model\Config\Modules\Reader” nutzen, welche in allen Modulen nach der entsprechenden Datei sucht und eine gesammelte Konfiguration bereitstellt. Der Reader kann über Dependency Injection direkt verfügbar gemacht werden.
Mage Klasse entfernt
Die Gott-Klasse Mage wurde entfernt. Wer es bisher gewohnt war mittels Mage::getModel
seine Objekte zu erzeugen muss sich nun umgstellen. Hier werden jetzt moderne Mittel wie Depdendecy Injection genutzt. Wer das bisher nicht wirklich gewohnt ist, wird sich hier einiges an Wissen aneignen müssen. Die Anforderungen an die Entwickler steigen damit deutlich. Der Vorteil ist sicherlich ein gut testbarer Code.
Die 4640 Unittests der Magento 2 Suite laufen bei mir in unter 2 Minuten da alles über Mockobjekte leicht testbar ist und somit keine unnötigen DB-Queries gefahren werden müssen um die Funktionalität von z.B. einem Produkttyp zu testen.
Mage wird zu \Magento
Alle Klassen die mit “Mage” beginnen wurden in “Magento” umbenannt. Das betrifft alle Core-Module. Ebenso wurden die langen Klassennamen zu kurzen Klassen in Verbindung mit PHP Namespaces. Das ist für mich eine lange überfällige Änderung.
Beispiel:
Mage_Catalog_Model_Product wird zu Magento\Catalog\Model\Product
Problem bei der Umbenennung gibt es z.B. bei Klassen wie Mage_Core_Block_Abstract da es PHP nicht gestattet die Klasse einfach “Abstract” zu nenen da dies ein reserviertes Wort ist. Gleiches gilt für einige Interfaces.
Beispiel:
Mage_Core_Block_Abstract wird zu \Magento\Core\Block\AbstractBlock
Die Klassen orientieren sich jetzt alle am PSR-1 und PSR-2 Standard.
Entfernte Funktionalität
Es wurde das Poll Modul entfernt. Ich weine dem Modul keine Tränen nach da ich es sowieso in jedem Projekt über die local.xml des Themes rausoperiert habe.
Folgende Events wurden entfernt:
- adminhtml_widget_container_html_before
- admin_session_user_logout
- model_config_data_save_before
- admin_system_config_section_save_after
- backend_menu_load_after
- catalog_controller_category_init_before
- catalog_helper_output_construct
- catalog_controller_product_init
- catalog_category_tree_move_before
- catalog_category_tree_move_after
- catalog_product_website_update_before
- catalog_product_website_update
- catalog_product_media_save_before
- catalog_product_media_add_image
- catalog_product_type_grouped_price
- catalog_product_collection_load_before
- catalogsearch_index_process_start
- catalogsearch_index_process_complete
- cms_page_get_available_statuses
- cms_wysiwyg_config_prepare
- application_clean_cache
- theme_copy_after
- customer_registration_is_allowed
- log_log_clean_before
- log_log_clean_after
- sales_convert_quote_payment_to_order_payment
- sales_convert_quote_item_to_order_item
- sales_quote_config_get_product_attributes
Hier können nun Plugins genutzt werden.
Webservices
Die Webservices wurde refactored und in das Magento\Webapi Modul gezogen. Es gibt jetzt einen OData Authentifizierung auf die SOAP Schnittstelle. Für die REST Schnitstelle war man das schon gewohnt.
Layouts
Die Layouts wurden wie oben schon erwähnt überarbeitet um sie entsprechend via XSD zu validieren. Das betrifft dann auch die Syntax. Handles sind seit dem letzten Release in einzelnen Dateien ausgelagert worden. Hier definiert der Name der Datei den Namen des Handles (Prinzip: Convention over Configuration). Eine grobe Änderung ist jetzt das entfernen der <action>
Elemente. Parameter müssen nun direkt im <block>
Element angegeben werden. Das ist sicherlich mit der Umstellung auf “Konstruktor Dependeny Injection” nur konsequent.
PHP 5.4 und PHP 5.5. Kompatibilität
Der Source ist jetzt mit der aktuellen PHP Version 5.5 kompatibel. Ein guter Schritt der einiges an Performance-Vorteilen bietet. Die modernen Linux Distributionen haben sowieso schon lange neuere Versionen wie PHP 5.3 im Angebot. Ich denke die meisten Entwickler habe mindestens PHP 5.4 installiert.
So, das war mein erster Einblick. Da es diesmal sehr viele Dateiänderungen gab, ist es sehr schwierig diese alle zu sichten. Vielleicht habt ihr ja etwas tolles entdeckt. Ich freue mich auf eure Kommentare zu Magento 2.