¿Cómo creo una página de Magento CMS no editable?


16

En una nueva instalación de Magento, viene con varias páginas CMS predeterminadas en las que puede editar CMS > Pages. Sin embargo, también viene con un par de páginas CMS "no editables": Orders and Returnsy Contact Us... ambas son páginas con formularios, y resalta una deficiencia en Magento CE: crear y editar formularios.

Me las arreglé para anular el contacto predeterminado con mi propio formulario, pero me gustaría agregar otro formulario y es posible que necesite agregar más formularios en el futuro. Estoy algo familiarizado con la creación de módulos de Magento para anular las funciones y páginas existentes, como lo he hecho hasta ahora.

He comenzado a trabajar en un módulo que permitiría la capacidad de crear páginas de formulario en Magento, pero tienen que ser invisibles para la administración del CMS, como lo son los formularios predeterminados. He encontrado respuestas para crear mediante programación una página de CMS, pero eso la agrega a la de Magento CMS > Pages.

¿Cómo creo una página CMS que solo es editable por un módulo de Magento?


¡Bueno saber! ¿Es kosher hacer publicaciones cruzadas o cuál es la práctica aceptada ya que ya publiqué esto aquí?
andyjv

Me gustaría hacer clic en el enlace "bandera" y pedirle a un mod que lo mueva por usted. En general, la publicación cruzada está mal vista.
John Conde

Si está buscando un formulario de contacto personalizado dentro de una página de CMS, consulte magento.stackexchange.com/questions/79602/… o stackoverflow.com/q/1066127/664108
Fabian Schmengler

Respuestas:


21

En realidad, 'Contáctenos' y 'Pedidos y devoluciones' no son páginas de CMS. En realidad son páginas de un módulo separado. Se parecen más a la página 'Iniciar sesión' o 'Registrarse' que a las páginas CMS. Para crear una página como esta, puede crear un módulo simple con un controlador, un bloque y una plantilla. Llamemos a la extensión Easylife_Customform. Para esto necesitará los siguientes archivos.
app/etc/modules/Easylife_Customform.xml- archivo de declaración del módulo

<?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 - archivo de configuración

<?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 - archivo de diseño de interfaz

<?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 - ayudante de módulo predeterminado

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - el html real para el formulario - haga que parezca que necesita

<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 - el controlador del módulo

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

Esto debería ser. Borre el caché y debería poder acceder al formulario en mysite.com/customform
Espero haber escrito el código correctamente y no me haya perdido algo


2
Realmente hiciste un esfuerzo adicional en esta respuesta. +1
philwinkle

@philwinkle: ¿eso es bueno o malo? :)
Marius

Realmente genial guía Marius, gracias! Estoy tratando de establecer un título de página, el <label> en mi diseño xml se ignora y esto <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> no funcionará.
loeffel

@loeffel. Quizás tengas algo más que anule el título. En teoría, el código debería funcionar.
Marius

@ Mario Esto es muy útil, pero ¿cómo podemos agregar mensajes de error? Intenté agregar Mage::getSingleton('core/session')->addError("Error");pero no tuve suerte. Solo muestra un mensaje de éxito. ¿Alguna ayuda?
Aamir Siddique
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.