Hinzufügen von benutzerdefinierten Feldern in cms - Magento

7

Ich bin neu in Magento und habe einige statische Seiten, die ich in das CMS integrieren möchte.

Ich habe seit Tagen nach einer Möglichkeit gesucht, dem CMS benutzerdefinierte Felder hinzuzufügen, ähnlich wie Wordpress diese Funktion hat.

Ich habe ein paar Links gefunden:

http://www.atwix.com/magento/adding-custom-attribute-to-a-cms-page/ <- Zu verwirrend / nicht klar, was ich in diesem Tutorial tun muss.

http://mrpalvinder.wordpress.com/2014/05/30/how-to-add-custom-fields-in-cms-edit-page-admin-panel/ <- Nicht hilfreich

Ich benötige diese Funktion, da sich einige meiner Inhalte an verschiedenen Stellen auf der Website befinden und das Hinzufügen aller Inhalte in einem Inhaltseditor es mir nicht ermöglicht, den Inhalt so aufzuteilen, wie ich es möchte. Ich möchte diesen Inhalt dann in meinen Vorlagendateien aufrufen können.

Ob ich dies programmgesteuert oder mit einer Erweiterung tun kann, jede Hilfe wäre willkommen.

Vielen Dank.

fnk
quelle
Der Artikel in atwix ist sinnvoll, aber Sie müssen die Grundlagen der Modulerstellung lernen, um dies zu erreichen.
Dexter
Danke @Dexter Ich wusste nicht einmal über Module Bescheid, weshalb ich wahrscheinlich mit dem atwix-Tutorial zu kämpfen habe. Ich werde mich mit der Modulerstellung befassen.
Fnk

Antworten:

16

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_formdamit 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.phpund 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 -> DesignSie 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.phtmlnach 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.phtmlund 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.

David Manners
quelle
Ha. StackExchange_Example. Das ist ein wirklich guter Name für Beispiele. Ich werde dies von nun an hier verwenden (wenn ich Ihre Erlaubnis habe). Auf diese Weise erkennen Leute, die an Projekten arbeiten, nach denen, die hier Fragen stellen, vielleicht den Wert von SE :).
Marius
@ Marius natürlich hast du meine Erlaubnis, ich denke es ist besser als einfaches Leben zu sehen;)
David Manners
1
Danke für die Erlaubnis. aber ich muss nicht zustimmen ... nichts ist besser als ein einfaches Leben :).
Marius
2
War wirklich hilfreich, sogar besser als atwix. Nur eine Korrektur: Sie haben den Pfad zu Ihren Observer- und SQL-Installationsdateien in App / Code / Community erwähnt, während Ihre XML-Datei für das Modul ihn im 'lokalen' Codepool definiert. Ich habe es gerade für Neulinge erwähnt, falls sie verwirrt werden.
Ajay Bisht
@ DavidManners vielleicht ist es etwas spät / veraltet, aber ich kann es nicht bekommen, um den Wert zu speichern! Ich habe es dreimal gemacht und obwohl ich es auf der CMS-Seite anzeigen lasse, kann ich seinen Wert nicht speichern! Was vermisse ich!
hahaha