Wie bereits erwähnt, ist der atwix-Blog dafür sehr gut geeignet, aber ich werde ihn auch um die Hauptmodulteile erweitern.
Modul erstellen
Um ein Modul zu erstellen, benötigen wir zunächst eine Modul-XML-Datei. Erstellen Sie also die Datei unter app/etc/modules/StackExchange_Example.xml
. Es sollte wie folgt aussehen.
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Example>
<active>true</active>
<codePool>local</codePool>
<depends/>
</StackExchange_Example>
</modules>
</config>
Im Grunde lässt dies Magento wissen, dass die Erweiterung im lokalen Codepool gefunden werden sollte. Jetzt müssen wir die eigentliche Modulkonfiguration erstellen und diese sollte sich unter dem Ordner befinden app/code/local/StackExchange/Example/etc/config.xml
. Was diese Datei nun tut, sagt Magento, was diese Erweiterung tatsächlich tut und welche Elemente sie hat, wie Modelle, Blöcke und Controller.
In unserem Fall benötigen wir derzeit nur eine Modelldefinition für einen Beobachter, um ein Ereignis abzuhören, adminhtml_cms_page_edit_tab_content_prepare_form
damit wir der Registerkarte cms ein neues Feld hinzufügen können, und um eine Ressource zu haben, damit wir der Datenbank eine Spalte hinzufügen können.
Die Datei config.xml wird also wie folgt angezeigt.
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Example>
<version>0.1.0</version>
</StackExchange_Example>
</modules>
<global>
<models>
<stackexchange_example>
<class>StackExchange_Example_Model</class>
</stackexchange_example>
</models>
<events>
<adminhtml_cms_page_edit_tab_content_prepare_form>
<observers>
<stackexchange_example_page_edit_tab_content>
<type>singleton</type>
<class>stackexchange_example/observer</class>
<method>addNewCmsField</method>
</stackexchange_example_page_edit_tab_content>
</observers>
</adminhtml_cms_page_edit_tab_content_prepare_form>
</events>
<resources>
<stackexchange_example_setup>
<setup>
<module>StackExchange_Example</module>
</setup>
</stackexchange_example_setup>
</resources>
</global>
</config>
Feld zur Tabelle hinzufügen
Jetzt müssen wir das Feld zur Datenbanktabelle hinzufügen, damit es gleichzeitig mit dem Rest des Inhalts der CMS-Seite gespeichert werden kann. Dazu müssen Sie eine PHP-Datei unter erstellen app/code/community/StackExchange/Example/sql/stackexchange_example_setup/install-0.1.0.php
. Diese Datei lädt einfach die Tabelle und fügt eine neue Spalte hinzu.
<?php
$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
$installer->startSetup();
$conn = $installer->getConnection();
$table = $installer->getTable('cms_page');
$conn->addColumn(
$table,
'your_column',
Varien_Db_Ddl_Table::TYPE_TEXT,
'255',
array(
'nullable' => false
),
'Your Column Desc'
);
$installer->endSetup();
Jetzt können Sie hier natürlich Ihre Spalte mit allen Anforderungen hinzufügen, die Sie benötigen.
Spalte zum Admin-Bereich hinzufügen
Jetzt haben wir bereits das Ereignis zum Anhören, um die Spalte hinzuzufügen. Jetzt erstellen wir den Beobachter und die Funktion. So können wir die Datei erstellen app/code/community/StackExchange/Example/Model/Observer.php
und die Datei sieht wie folgt aus.
<?php
class StackExchange_Example_Model_Observer
{
public function addNewCmsField($observer)
{
//get CMS model with data
$model = Mage::registry('cms_page');
//get form instance
$form = $observer->getForm();
//create new custom fieldset 'stackexchange_content_fieldset'
$fieldset = $form->addFieldset('stackexchange_content_fieldset', array('legend'=>Mage::helper('cms')->__('Custom'),'class'=>'fieldset-wide'));
//add new field
$fieldset->addField('your_column', 'text', array(
'name' => 'your_column',
'label' => Mage::helper('cms')->__('Your Column'),
'title' => Mage::helper('cms')->__('Your Column'),
'disabled' => false,
//set field value
'value' => $model->getYourColumn()
));
}
}
Dies sollte nun ausreichen, damit beim Speichern der CMS-Seite das Element auch in der Datenbank gespeichert wird, sodass Sie auf halbem Weg sind. Jetzt müssen wir es nur noch im Frontend anzeigen lassen.
Frontend-Anzeige
Nun ist der zweite Weg, den atwix beschreibt, eigentlich sehr schön. Grundsätzlich müssen Sie der cms-Seite über den Administrator ein Kundenlayout "layout.xml" hinzufügen und dann einfach eine Vorlagendatei erstellen.
Unter der CMS-Seite im Administrator finden CMS -> Pages -> Your page -> Design
Sie also eine Möglichkeit, eine bestimmte Layout-XML hinzuzufügen, die nur für diese CMS-Seite ausgeführt wird.
<reference name="content">
<block type="core/template" name="home" template="stackexchange/example/cmsattribute.phtml"/>
</reference>
Dieses Layout fügt stackexchange/example/cmsattribute.phtml
nach dem Hauptinhalt Ihrer Seite einen neuen Block mit der Vorlage hinzu .
Erstellen Sie nun einfach die Vorlage app/design/frontend/base/default/template/stackexchange/example/cmsattribute.phtml
und in dieser Vorlage müssen Sie lediglich die aktuelle CMS-Seite laden und die Attributdaten abrufen.
<?php echo Mage::getBlockSingleton('cms/page')->getPage()->getContentCustom(); ?>
Wie gesagt, der atwix-Blog ist sehr gut. Alles, was ich hier getan habe, ist, die beiden Beiträge zu kombinieren und den Teil über das Datenbank-Update hinzuzufügen.