Magento Developer Certification Preparation Study Group

Session Two

Andreas Mautz || @mautz_et_tong

webvisum GmbH

Was?

Basics, Request Flow

Wer?

  • Andreas Mautz
  • programmiert seit 16 Jahren
  • macht magento seit 2008
  • beschäftigt sich mit Deployment-Prozessen, Entwicklungsinfrastrukturen und Wissensmanagement seit 2011
  • Vorbereitung Zertifizierung
  • Lehren und Lernen Stoff zusammenzufassen

Location

Gebäude Cerberus

Next: brandung, Hansaring 78

Vorstellungsrunde :)

Ablauf

Was machen wir denn heute Schönes?

  • Basics
  • Request Flow
  • Besprechung der Aufgaben für die Woche
  • Sonstiges
  • Grillen?

Basics | Architektur

Basics | Architektur

Codepool

Basics | Architektur

Modulstruktur

Basics | Architektur

Templates Struktur

Basics | Architektur

Template Datein

Basics | Architektur

Layout Datein

Basics | Architektur

Skin Struktur

Basics | Architektur

JavaScript

Basics | Architektur

Namenskonventionen für Klassen

  • Dateien sind vom magento root ausgehend gespeichert
  • alphanumerisch, keine Zahlen
  • Unterstriche im Dateinamen "ersetzen" Slashes im Pfad: Foo/Bar.php -> class Foo_Bar
  • Jedes Wort Wird Am Anfang Groß Geschrieben

Basics | Architektur

Autoloader

Mage::register('original_include_path', get_include_path());

if (defined('COMPILER_INCLUDE_PATH')) {
    $appPath = COMPILER_INCLUDE_PATH;
    set_include_path($appPath . PS . Mage::registry('original_include_path'));
    include_once "Mage_Core_functions.php";
    include_once "Varien_Autoload.php";
} else {
    /**
     * Set include path
     */
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
    $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
    $paths[] = BP . DS . 'lib';

    $appPath = implode(PS, $paths);
    set_include_path($appPath . PS . Mage::registry('original_include_path'));
    include_once "Mage/Core/functions.php";
    include_once "Varien/Autoload.php";
}

Varien_Autoload::register();
                        

Basics | Konfiguration

Basics | Konfiguration

Laden und Manipulieren

  • #File: app/code/core/Mage/Core/Model/App.php
  • _initModules()
  • $this->_config->loadModules()
  • Mage_Core_Model_Resource_Setup::applyAllUpdates()
  • $this->_config->loadDb()
  • #File: app/code/core/Mage/Core/Model/Config.php
  • $dbConf->loadToXml($this);

Basics | Konfiguration

Klassen-Gruppen und Factory Methods

  • #File: app/code/core/Mage/Core/Model/Config.php
  • Namespace_Modulename_Model|Helper|...
  • $product = Mage::getModel(‘catalog/product’);
  • getModel() --> getModelInstance() --> getModelClassName()
  • getGroupedClassName('group', $className);

Basics | Konfiguration

Klassen überschreiben

  • define, init, autoload -> path -> pool
  • First in -> first load
  • möglich aber "unsauber" cp core -> local
  • sauber:
    
        
             Namespace_Modulename_Model_Foo_Bar
        
    
  • Modulkonflikte aufspürbar, getGroupedClassName findet rewrites

Basics | Konfiguration

Observer

Basics | Konfiguration

Events

Basics | Konfiguration

Cron Setup

Basics | Internationalisierung

Basics | Internationalisierung

Planen

Basics | Internationalisierung

Übersetzung - Klassen und Tabellen

  • System->Config->Locale
  • #File app/code/core/Mage/Core/Helper/Abstract.php
  • public function __(){
        $args = func_get_args();
        $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName());
        array_unshift($args, $expr);
        return Mage::app()->getTranslator()->translate($args);
    }
  • Fallback
  • translate.csv

Basics | Internationalisierung

Subdomains und Subdirectories

Basics | Internationalisierung

Subdirectories foo.com/bar

Vorteile

  • Targeting möglich
  • Verlinkung ist einfach
  • SEO geht auf die Domain
  • Einfach zu verwalten

Nachteile

  • SERP Limitierung
  • Kann schnell unordentlich und unüberschaubar werden
  • Keine Boni bei verteiltem Hosting

Basics | Internationalisierung

Subdomains bar.foo.com

Vorteile

  • Kosten -> eine Domain
  • Subdomains können in verschiedenen Ländern gehostet werden. (SEO foo)
  • Usibility: Ländererkennung in der domain (de.amd.com)

Nachteile

  • Link Builiding erforderlich
  • Subdomins sind schwieriger in der Wartung

Request Flow

Request Flow | Initialisierung

  1. index.php
  2. app/Mage.php (autoloader)
  3. Mage.php run($code = '', $type = 'store', $options = array())
  4. app/code/core/Mage/Core/Model/App.php run($params)
  5. Config.php loadBase() (xml-Files)
  6. $this->_initCurrentStore($scopeCode, $scopeType)
  7. $this->getFrontController()->dispatch()

Request Flow | Front Controller

Sorgt dafür, das die richtige Datei mit der richtigen Funktion erwischt wird

  1. admin (Mage_Core_Controller_Varien_Router_Admin)
  2. standard (Mage_Core_Controller_Varien_Router_Standard)
  3. cms (Mage_Cms_Controller_Router)
  4. default (Mage_Core_Controller_Varien_Router_Default)
  5. dispatch -> rewrite -> sendResponse

Request Flow | URL Rewrites

URL Struktur

  • catalog/category/view/id/10
  • url.com/foo/bar.html

Request Flow | URL Rewrites

URL Rewriting

Mage_Core_Model_Resource_Url_Rewrite

  1. Database
  2. Configuration

302 - P oder 301 - RP

Request Flow | Request Routing

Request Flow

Wir erinnern uns:

  1. admin (Mage_Core_Controller_Varien_Router_Admin)
  2. standard (Mage_Core_Controller_Varien_Router_Standard)
  3. cms (Mage_Cms_Controller_Router)
  4. default (Mage_Core_Controller_Varien_Router_Default)
  5. dispatch -> rewrite -> sendResponse


In dieser Reihenfolge wird versucht, den Request zu übergeben

Request Flow | Routing

Registrieren eines Routers

benötigt Controller

Request Flow | Module

Registrieren eines Moduls

  • Modul Deklaration: Foo_Bar.xml
  • Block
  • Controller
  • controllers
  • etc
  • Helper
  • Model
  • sql
  • Test

Request Flow | Module

Abhängigkeiten

  • config.xml

Request Flow | Module

Konfiguration

  • Bekanntmachen der Grouppen-Klassen
  • Setup-Skripte
  • ACL
  • Layout-Updates
  • Events
  • Router
  • Default-Werte
  • ...

Request Flow | Design und Layout

Flow

  • parsen
  • kompilieren
  • rendern

Request Flow | Design und Layout

Output

  • Rendering
  • Front Controller

Hausaufgaben!

Session 3:

===========================================

Erstelle ein Rewrite für das sales/order Model, so dass die Kundengruppe als Email-variablein der sendNewOrderEmail() Methode mittels {{var customer_group.getCode()}} verfügbar ist.

Erstelle einen Observer, der den Besucher auf die Startseite umleitet, falls ein URL key benutzt wird (zB /home -> /).

Erstelle ein dynamisches Rewrite für das Modul payment/data für den helper. Dieser darf nur aktiv werden, wenn die magento Version älter als 1.4 ist und die Bezahlart ccsave für den derzeitgen Store aktiviert ist.

Fragen?

  • Sorgen
  • Nöte
  • Beschimpfungen

Sonstiges

Quellen && nützliche Links

Magento


Infrastruktur

Danke!