Magento: Block inkl. Caching in eigenem Modul (Magento Block Howto)

Magento bietet die Möglichkeit s.g. Blöcke zu definieren, die an bestimmten Stellen der Website angezeigt werden können.

Als Beispiel fügen wir einen Block in statische CMS Seiten ein.

Wir gehen wieder von einem eigenen Modul mit folgender Verzichnisstruktur aus:

app/code/local/Mycompany/Mymodule/
+ Block/
+ Helper/
+ Model/
+ ...
+ etc/

Zuerst legen wir ein neues Verzeichnis Cms/ in Block/ an.

In diesem Verzeichnis legen wir eine neue Datei Content.php an.
Hier eine recht simple Klasse:

<?php
class Mycompany_Mymodule_Block_Cms_Content extends Mage_Core_Block_Abstract {

 protected function _construct() {
  parent::_construct();

  try {
    $this->addData(array(
      'cache_lifetime' => 86400,
      'cache_key' => Mage::getSingleton('cms/page')->getIdentifier()
    ));
  } catch (Exception $e) {
    Mage::logException($e);
  }
 }

 protected function _toHtml() {
   $html = 'Hello Magento world!';

   return $html;
 }
}

Mit der Angabe von cache_lifetime und cache_key (der ID der aktuellen CMS Seite) ist auch schon automatisch das Caching aktiv. Die Methode _toHtml gibt den HTML Inhalt für den Block zurück. Mehr dazu findet man in der Basisklasse Mage_Core_Block_Abstract.

Als nächstes teilen wir Magento mit, dass es hier einen neuen Block gibt. Dazu bearbeiten wir Mymodule/etc/config.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
 <global>
   <blocks>
     <mycompany_mymodule>
       <class>Mycompany_Mymodule_Block</class>
     </mycompany_mymodule>
   </blocks>
 </global>
</config>

Jetzt wechseln wir in unser Template Layout Verzeichnis, z.B. app/design/frontend/default/mycompany/layout/ und kopieren uns die cms.xml aus dem Base Template Verzeichnis app/design/frontend/base/default/layout/cms.xml um sie „lokal“ anzupassen. Wir ersetzen den cms_page Abschnitt mit folgendem XML:

<cms_page translate="label">
  <label>CMS Pages (All)</label>
  <reference name="content">
    <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
    <block type="page/html_wrapper" name="cms.wrapper">
      <action method="setElementClass"><value>std</value></action>
      <block type="cms/page" name="cms_page"/>
      <block type="mycompany_mymodule/cms_content" name="cms_content"/>
    </block>
  </reference>
</cms_page>

Magento Cache leeren und z.B. die Startseite aufrufen bringt uns das Magento Hello World und damit ist die Aufgabe für heute auch schon wieder gelöst. :-)

Entscheidend war auch hier wieder die korrekte Groß- und Kleinschreibung (Klasse versus XML Konfiguration).

Comments are closed.

Anfrage