Wie programmiere Ich ein Modul? Erste Schritte

Preview:

DESCRIPTION

Eine Einführung in die Modulentwicklung mit Magento.

Citation preview

Wie programmiere ich ein Magento-Modul? Erste Schritte.

David Fuhr, Flagbit GmbH & Co. KG Leipzig, 05.11.2010

Agenda

•  Darstellung: Blocks, Templates und Layout XML •  Internationalisierung / Lokalisierung •  Datenhaltung: Models und Resource-Models •  Konfiguration: Widgets

Verzeichnisse

•  app/code/<codepool>/<namespace>/<modulname> – z.B app/code/community/Flagbit/FeedReader

•  app/etc/modules – Zentrale Stelle um Module zu registrieren

app/etc/modules/Flagbit_FeedReader.xml <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Flagbit_FeedReader> <active>true</active> <codePool>community</codePool> </Flagbit_FeedReader> </modules> </config>

app/code/community/Flagbit/ FeedReader/etc/config.xml <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Flagbit_FeedReader> <version>0.0.1</version> </Flagbit_FeedReader> </modules> </config>

Was bisher geschah...

Blocks...

.../Flagbit/FeedReader/etc/config.xml <?xml version="1.0" encoding="UTF-8"?> <config> <!-- ... --> <global> <blocks> <flagbit_feedreader> <class>Flagbit_FeedReader_Block</class> </flagbit_feedreader> </blocks> </global> </config>

.../Flagbit/FeedReader/Block/View.php <?php /** * php doc here */ class Flagbit_FeedReader_Block_View

extends Mage_Core_Block_Template

{ public function getFeed() { /* ... */ } }

Was bisher geschah...

... und Layout XML

•  Erstellen •  Einfügen •  Entfernen •  Verschieben von Blöcken im Layout

.../Flagbit/FeedReader/etc/config.xml <?xml version="1.0" encoding="UTF-8"?> <config> <!-- ... --> <frontend> <layout> <updates> <flagbit_feedreader> <file>flagbit_feedreader.xml</file> </flagbit_feedreader> </updates> </layout> </frontend> </config>

.../design/frontend/base/default/layout/flagbit_feedreader.xml <?xml version="1.0" encoding="UTF-8"?> <layout version="0.1.0"> <default> <reference name=“right"> <block type="flagbit_feedreader/view"

name=“right.flagbit_feedreader.rightcol" template="flagbit_feedreader/right_col.phtml“ />

</reference> </default> </layout>

.../base/default/template/flagbit_feedreader/right_col.phtml <?php /* @var $this Flagbit_FeedReader_Block_View */ ?> <div class="block"> <div class="block-title“><strong><span> <?php echo $this->escapeHtml($this->__(‘News from out

Feed')); ?>

</span></strong></div> <div class="block-content"> <p><?php echo $this->escapeHtml($this->__(‘Hm... what

Feed?')); ?></p>

</div> </div> <?php endif; ?>

Was bisher geschah...

Awsum!

.../design/frontend/base/default/layout/flagbit_feedreader.xml <?xml version="1.0" encoding="UTF-8"?> <layout version="0.1.0"> <default> <reference name=“right"> <block type="flagbit_feedreader/view"

name=“right.flagbit_feedreader.rightcol" template="flagbit_feedreader/right_col.phtml“ />

</reference> </default> </layout>

Mehr mit Layout XML

•  Layout Handles (Beispiele) – catalog_product_view – checkout_cart_index – customer_account – customer_logged_in – PRODUCT_TYPE_configurable –  ...

i18n / l10n

•  Internationalisation – Schaffen der Vorraussetzungen für die...

•  Localisation – Die Umsetzung für eine Ziel-Locale

.../base/default/template/flagbit_feedreader/right_col.phtml <?php /* @var $this Flagbit_FeedReader_Block_View */ ?> <div class="block"> <div class="block-title“><strong><span> <?php echo $this->escapeHtml($this->__(‘News from out

Feed')); ?>

</span></strong></div> <div class="block-content"> <p><?php echo $this->escapeHtml($this->__(‘Hm... what

Feed?')); ?></p>

</div> </div> <?php endif; ?>

.../Flagbit/FeedReader/etc/config.xml (schon wieder) <?xml version="1.0" encoding="UTF-8"?> <config> <!-- ... --> <frontend> <!-- ... --> <translate> <modules> <Flagbit_FeedReader> <files> <default>Flagbit_FeedReader.csv</default> </files> </Flagbit_FeedReader> </modules> </translate> </frontend> </config>

app/locale/de_DE/Flagbit_FeedReader.csv "News from our Feed","Letzte Neuigkeiten" "Hm... what Feed?","Hm... welche Neuigkeiten?"

Was bisher geschah...

Awsum!

Models...

•  Datenhaltung /-speicherung •  Enthalten Berechnungen, interne Logik,

Geschäftslogik, etc. •  z.B. Mage_Catalog_Model_Product,

Mage_Sales_Model_Order

.../Flagbit/Faq/etc/config.xml (wieder mal) <?xml version="1.0" encoding="UTF-8"?> <config> <!-- ... --> <global> <!-- ... --> <models> <flagbit_feedreader> <class>Flagbit_FeedReader_Model</class> </flagbit_feedreader> </models> </global> <!-- ... --> </config>

.../Flagbit/FeedReader/Model/Feed.php <?php

class Flagbit_FeedReader_Model_Feed extends Mage_Core_Model_Abstract

{ public function getFeed() { return Zend_Feed::import($this->getUri()); } }

Was bisher geschah...

Ein bisschen Demo-Voodoo...

•  Block/View.php public function getTitle() { return Mage::getModel('flagbit_feedreader/feed') ->setUri('http://feeds.feedburner.com/MageBlog') ->title(); }

•  template/flagbit_feedreader/right_col.phtml <?php echo $this->escapeHtml($this->__('News from ') . $this->getTitle()); ?>

Awsum!

Resource-Models...

•  Persistenz-Schicht zwischen Models und Datenbank

•  DBMS-spezifisch (Oracle und MSSQL-Support sind geplant): Enthalten SQL

Widgets

.../Flagbit/FeedReader/etc/widget.xml <?xml version="1.0" encoding="UTF-8"?> <widgets> <flagbit_feedreader_sidebar type="flagbit_feedreader/view"

translate="name description">

<name>FeedReader: Sidebar</name> <description type="desc">Adds a FeedReader block</description> <parameters> <uri translate="label"> <required>1</required> <visible>1</visible> <label>Feed URI</label> <type>text</type> </uri> </parameters> </flagbit_feedreader_sidebar> </widgets>

Insert Widget...

Was bisher geschah...

Awsum!

https://github.com/Flagbit/Magento-FeedReader http://www.mageblog.de/ http://www.flagbit.de/

Fragen?

Recommended