Come faccio a creare una pagina CMS Magento non modificabile?


16

In una nuova installazione di Magento, viene fornito con diverse pagine CMS predefinite che è possibile modificare CMS > Pages. Tuttavia, viene fornito anche con un paio di pagine CMS "non modificabili: Orders and Returnse Contact Us... entrambe sono pagine con moduli su di esse, ed evidenzia un difetto in Magento CE: creazione e modifica di moduli.

Sono riuscito a sostituire l'impostazione predefinita Contattaci con il mio modulo, ma vorrei aggiungere un altro modulo e potrebbe essere necessario aggiungere altri moduli in futuro. Ho una certa familiarità con la creazione di moduli Magento per sovrascrivere funzioni e pagine esistenti, come ho fatto finora.

Ho iniziato a lavorare su un modulo che consentirebbe la possibilità di creare pagine di moduli in Magento, ma devono essere invisibili alla gestione CMS come i moduli predefiniti. Ho trovato le risposte alla creazione programmatica di una pagina CMS, ma ciò si aggiunge a Magento CMS > Pages.

Come faccio a creare una pagina CMS modificabile solo da un modulo Magento?


Buono a sapersi! È kosher fare il cross-post o qual è la pratica accettata da quando l'ho già pubblicato qui?
Andyjv,

Vorrei fare clic sul link "flag" e chiedere a una mod di spostarlo per te. In generale, il cross-posting è disapprovato.
John Conde,

Se siete alla ricerca di un modulo di contatto personalizzato all'interno di una pagina CMS, vedere magento.stackexchange.com/questions/79602/... o più dettagliate stackoverflow.com/q/1066127/664108
Fabian SCHMENGLER

Risposte:


21

In realtà 'Contattaci' e 'Ordini e resi' non sono pagine CMS. In realtà sono pagine da un modulo separato. Sono più simili alla pagina 'Login' o 'Register' che alle pagine CMS. Per creare una pagina come questa è possibile creare un semplice modulo con un controller, un blocco e un modello. Chiamiamo l'estensione Easylife_Customform. Per questo avrai bisogno dei seguenti file.
app/etc/modules/Easylife_Customform.xml- file di dichiarazione del modulo

<?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 - file di configurazione

<?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 - file di layout frontend

<?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 - helper del modulo predefinito

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - l'html effettivo per il modulo - fai sembrare questo di cui hai bisogno

<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 - il controller del modulo

<?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
    }
}

Questo dovrebbe essere. Svuota la cache e dovresti essere in grado di accedere al modulo mysite.com/customform
sperando di aver scritto correttamente il codice e di non aver perso qualcosa


2
hai davvero fatto il possibile per questa risposta. +1
Filwinkle,

@philwinkle: è buono o cattivo? :)
Marius

Davvero un'ottima guida Marius, grazie! Sto cercando di impostare un titolo di pagina, il <label> nel mio layout xml viene ignorato e questo <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> non funzionerà.
loeffel,

@loeffel. Forse hai qualcos'altro che sovrascrive il titolo. In teoria il codice dovrebbe funzionare.
Marius

@Marius È molto utile, ma come possiamo aggiungere messaggi di errore? Ho provato ad aggiungere Mage::getSingleton('core/session')->addError("Error");ma senza fortuna. Mostra solo un messaggio di successo. Qualsiasi aiuto?
Aamir Siddique,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.