Comment créer une page CMS Magento non modifiable?


16

Sur une nouvelle installation de Magento, il est livré avec plusieurs pages CMS par défaut que vous pouvez modifier CMS > Pages. Cependant, il est également livré avec quelques pages CMS "non modifiables": Orders and Returnset Contact Us... qui sont toutes deux des pages avec des formulaires, et met en évidence une lacune dans Magento CE: la création et la modification de formulaires.

J'ai réussi à remplacer le formulaire Contactez-nous par défaut avec mon propre formulaire, mais je voudrais ajouter un autre formulaire et je devrais peut-être ajouter d'autres formulaires à l'avenir. Je suis un peu familier avec la création de modules Magento pour remplacer les fonctions et les pages existantes, comme je l'ai fait jusqu'à présent.

J'ai commencé à travailler sur un module qui permettrait de créer des pages de formulaire dans Magento, mais elles doivent être invisibles pour la gestion du CMS comme le sont les formulaires par défaut. J'ai trouvé des réponses à la création par programme d'une page CMS, mais cela l'ajoute à Magento CMS > Pages.

Comment créer une page CMS qui n'est modifiable que par un module Magento?


Bon à savoir! Est-il casher de publier des messages ou quelle est la pratique acceptée depuis que j'ai déjà posté cela ici?
andyjv

Je clique sur le lien "drapeau" et demande à un mod de le déplacer pour vous. D'une manière générale, la publication croisée est mal vue.
John Conde du

Si vous recherchez un formulaire de contact personnalisé dans une page CMS, voir magento.stackexchange.com/questions/79602/… ou stackoverflow.com
Fabian Schmengler

Réponses:


21

En fait, «Contactez-nous» et «Commandes et retours» ne sont pas des pages CMS. Ce sont en fait des pages d'un module distinct. Ils ressemblent plus à la page «Connexion» ou «Inscription» qu'à des pages CMS. Pour créer une page comme celle-ci, vous pouvez créer un module simple avec un contrôleur, un bloc et un modèle. Appelons l'extension Easylife_Customform. Pour cela, vous aurez besoin des fichiers suivants.
app/etc/modules/Easylife_Customform.xml- fichier de déclaration de module

<?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 - fichier de configuration

<?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 - fichier de mise en page 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 - assistant de module par défaut

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - le html réel du formulaire - donnez l'impression que vous avez besoin

<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 - le contrôleur de module

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

Ça devrait être ça. Videz le cache et vous devriez pouvoir accéder au formulaire sur mysite.com/customform
J'espère avoir écrit le code correctement et ne rien manquer


2
vous avez vraiment fait un effort supplémentaire sur cette réponse. +1
philwinkle

@philwinkle: est-ce bon ou mauvais? :)
Marius

Vraiment super guide Marius, merci! J'essaie de définir un titre de page, le <label> dans mon XML de mise en page est ignoré et cela <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> ne fonctionnera pas.
loeffel

@loeffel. Vous avez peut-être autre chose qui remplace le titre. En théorie, le code devrait fonctionner.
Marius

@Marius C'est très pratique, mais comment ajouter des messages d'erreur? J'ai essayé d'ajouter Mage::getSingleton('core/session')->addError("Error");mais pas de chance. Son seul message de succès. De l'aide?
Aamir Siddique
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.