Jak utworzyć nieedytowalną stronę CMS Magento?

16

W nowej instalacji Magento zawiera kilka domyślnych stron CMS, które można edytować CMS > Pages. Zawiera jednak także kilka „nieedytowalnych” stron CMS: Orders and Returnsi Contact Us… obie są stronami zawierającymi formularze, i podkreśla niedociągnięcie Magento CE: tworzenie i edytowanie formularzy.

Udało mi się zastąpić domyślny formularz Kontakt z własnym formularzem, ale chciałbym dodać inny formularz i być może w przyszłości będę musiał dodać więcej formularzy. Jak do tej pory mam dość tworzenia modułów Magento w celu zastąpienia istniejących funkcji i stron.

Zacząłem pracować nad modułem, który umożliwiłby tworzenie stron formularzy w Magento, ale muszą one być niewidoczne dla zarządzania CMS, tak jak formularze domyślne. Znalazłem odpowiedzi na programowe tworzenie strony CMS, ale to dodaje ją do Magento CMS > Pages.

Jak utworzyć stronę CMS, którą można edytować tylko za pomocą modułu Magento?

andyjv
źródło
Dobrze wiedzieć! Czy koszernie jest przesyłać pocztą czy jaka jest przyjęta praktyka, skoro już tu to opublikowałem?
andyjv
Chciałbym kliknąć link „flag” i poprosić mod, aby go dla ciebie przenieść. Ogólnie rzecz biorąc, krzywo ocenia się.
John Conde,
Jeśli szukasz niestandardowego formularza kontaktowego na stronie CMS, zobacz magento.stackexchange.com/questions/79602/... lub bardziej szczegółowy stackoverflow.com/q/1066127/664108
Fabian Schmengler

Odpowiedzi:

21

W rzeczywistości „Kontakt” i „Zamówienia i zwroty” nie są stronami CMS. W rzeczywistości są to strony z oddzielnego modułu. Są bardziej podobne do strony „Zaloguj się” lub „Zarejestruj się” niż do stron CMS. Aby utworzyć taką stronę, możesz utworzyć prosty moduł ze sterownikiem, jednym blokiem i jednym szablonem. Nazwijmy rozszerzenie Easylife_Customform. Do tego potrzebne będą następujące pliki.
app/etc/modules/Easylife_Customform.xml- plik deklaracji modułu

<?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 - plik konfiguracyjny

<?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 - plik układu interfejsu

<?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 - domyślny pomocnik modułu

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - rzeczywisty HTML dla formularza - spraw, aby wyglądał tak, jak potrzebujesz

<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 - kontroler modułu

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

To powinno być to. Wyczyść pamięć podręczną i powinieneś mieć dostęp do formularza, mysite.com/customform
mam nadzieję, że poprawnie napisałem kod i niczego nie przeoczyłem

Marius
źródło
2
naprawdę postarałeś się o tę odpowiedź. +1
philwinkle
@philwinkle: czy to dobrze, czy źle? :)
Marius
Naprawdę świetny przewodnik Marius, dziękuję! Próbuję ustawić tytuł strony, <etykieta> w moim układzie xml jest ignorowana i to <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> nie zadziała.
loeffel
@loeffel. Może masz coś innego niż tytuł. Teoretycznie kod powinien działać.
Marius
@Marius Jest to bardzo przydatne, ale jak możemy dodać komunikaty o błędach? Próbowałem dodać, Mage::getSingleton('core/session')->addError("Error");ale bez powodzenia. To jedyny komunikat o sukcesie. Jakaś pomoc?
Aamir Siddique,