Wie erstelle ich eine nicht bearbeitbare Magento CMS-Seite?

16

Bei einer Neuinstallation von Magento sind mehrere Standard-CMS-Seiten enthalten, auf denen Sie Änderungen vornehmen können CMS > Pages. Es enthält jedoch auch ein paar "nicht bearbeitbare" CMS-Seiten: Orders and Returnsund Contact Us... beide sind Seiten mit Formularen und heben einen Nachteil in Magento CE hervor: das Erstellen und Bearbeiten von Formularen.

Ich habe es geschafft, das Standardformular "Kontakt" mit meinem eigenen Formular zu überschreiben, möchte jedoch ein anderes Formular hinzufügen und muss möglicherweise in Zukunft weitere Formulare hinzufügen. Ich bin einigermaßen vertraut mit der Erstellung von Magento-Modulen, um vorhandene Funktionen und Seiten zu überschreiben, wie ich es bisher getan habe.

Ich habe begonnen, an einem Modul zu arbeiten, mit dem Formularseiten in Magento erstellt werden können, sie müssen jedoch für die CMS-Verwaltung unsichtbar sein, wie dies bei den Standardformularen der Fall ist. Ich habe Antworten zum programmgesteuerten Erstellen einer CMS-Seite gefunden, aber das fügt sie Magento hinzu CMS > Pages.

Wie erstelle ich eine CMS-Seite, die nur von einem Magento-Modul bearbeitet werden kann?

andyjv
quelle
Gut zu wissen! Ist es koscher zu posten oder was ist die akzeptierte Praxis, da ich dies hier bereits gepostet habe?
Andyjv
Ich würde auf den Link "Flagge" klicken und einen Mod bitten, ihn für Sie zu verschieben. Crossposting wird generell verpönt.
John Conde
Wenn Sie ein benutzerdefiniertes Kontaktformular auf einer CMS-Seite suchen , lesen Sie magento.stackexchange.com/questions/79602/… oder genauer stackoverflow.com/q/1066127/664108
Fabian Schmengler

Antworten:

21

Tatsächlich handelt es sich bei "Kontakt" und "Bestellungen und Rücksendungen" nicht um CMS-Seiten. Sie sind eigentlich Seiten aus einem separaten Modul. Sie ähneln eher der "Login" - oder "Register" -Seite als den CMS-Seiten. Um eine solche Seite zu erstellen, können Sie ein einfaches Modul mit einem Controller, einem Block und einer Vorlage erstellen. Nennen wir die Erweiterung Easylife_Customform. Dazu benötigen Sie folgende Dateien.
app/etc/modules/Easylife_Customform.xml- Moduldeklarationsdatei

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Customform>
            <active>true</active>
            <codePool>local</codePool>
        </Easylife_Customform>
    </modules>
</config>

app/code/local/Easylife/Customform/etc/config.xml - Konfigurationsdatei

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Customform>
            <version>0.0.1</version>
        </Easylife_Customform>
    </modules>
    <global>
        <blocks>
            <customform><!-- block alias -->
                <class>Easylife_Customform_Block</class>
            </customform>
        </blocks>
        <helpers>
            <customform><!-- helper alias -->
                <class>Easylife_Customform_Helper</class>
            </customform>
        </helpers>
    </global>
    <frontend>
        <routers>
            <customform>
                <use>standard</use>
                <args>
                    <module>Easylife_Customform</module>
                    <frontName>customform</frontName><!-- url key for module -->
                </args>
            </customform>
        </routers>
        <layout>
            <updates>
                <easylife_customform>
                    <file>easylife_customform.xml</file><!-- frontend layout file -->
                </easylife_customform>
            </updates>
        </layout>
        <translate>
            <modules>
                <Easylife_Customform>
                    <files>
                        <default>Easylife_Customform.csv</default><!-- translation file (not mandatory) -->
                    </files>
                </Easylife_Customform>
            </modules>
        </translate>
    </frontend>
</config>

app/design/frontend/base/default/layout/easylife_customform.xml - Frontend-Layout-Datei

<?xml version="1.0"?>
<layout>
    <customform_index_index translate="label" module="customform">
        <label>Custom form</label>
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-right.phtml</template></action><!-- can be different -->
        </reference>        
        <reference name="content">
            <block type="core/template" name="customform" template="easylife_customform/form.phtml" /><!-- content of page -->
        </reference>
    </customform_index_index>
</layout>

app/code/local/Easylife/Customform/Helper/Data.php - Standardmodulhilfe

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - das eigentliche HTML für das Formular - lassen Sie es so aussehen, wie Sie es brauchen

<form action="<?php echo $this->getUrl('customform/index/send')?>">
    <input type="text" name="name" />
    <input type="submit" />
</form>

app/code/local/Easylife/Customform/controllers/IndexController.php - die Modulsteuerung

<?php 
class Easylife_Customform_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){ //this will display the form
        $this->loadLayout();
        $this->_initLayoutMessages('core/session'); //this will allow flash messages
        $this->renderLayout();
    }
    public function sendAction(){ //handles the form submit
        $post = $this->getRequest()->getPost();
        //do something with the posted data
        Mage::getSingleton('core/session')->addSuccess($this->__('Your message was sent'));//add success message.
        $this->_redirect('*/*');//will redirect to form page
    }
}

Das sollte es sein. Leeren Sie den Cache und Sie sollten in der Lage sein, auf das Formular zuzugreifen. mysite.com/customform
Ich hoffe, dass ich den Code richtig geschrieben habe und nichts verpasst habe

Marius
quelle
2
Mit dieser Antwort haben Sie wirklich einen draufgängerischen Schritt gemacht. +1
Philwinkle
@philwinkle: ist das gut oder schlecht? :)
Marius
Wirklich super Guide Marius, danke! Ich versuche, einen Seitentitel festzulegen, das <label> in meiner Layout-XML wird ignoriert und dies <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> funktioniert nicht.
Loeffel
@loeffel. Vielleicht haben Sie etwas anderes, das den Titel überschreibt. Theoretisch sollte der Code funktionieren.
Marius
@Marius Das ist sehr praktisch, aber wie können wir Fehlermeldungen hinzufügen? Ich habe versucht, Mage::getSingleton('core/session')->addError("Error");aber kein Glück hinzuzufügen . Es wird nur die Erfolgsmeldung angezeigt. Irgendeine Hilfe?
Aamir Siddique