Как создать не редактируемую страницу Magento CMS?

16

При новой установке Magento он поставляется с несколькими страницами CMS по умолчанию, которые можно редактировать CMS > Pages. Тем не менее, он также поставляется с парой «нередактируемых» страниц CMS: Orders and Returnsи Contact Us... обе из которых являются страницами с формами на них, и подчеркивает недостаток в Magento CE: создание и редактирование форм.

Мне удалось переопределить контактную информацию по умолчанию своей собственной формой, но я хотел бы добавить другую форму, и, возможно, в будущем потребуется добавить больше форм. Я немного знаком с созданием модулей Magento для переопределения существующих функций и страниц, как я делал до сих пор.

Я начал работать над модулем, который позволял бы создавать страницы форм в Magento, но они должны быть невидимы для управления CMS, как формы по умолчанию. Я нашел ответы на программное создание страницы CMS, но это добавляет ее к Magento CMS > Pages.

Как создать страницу CMS, которую можно редактировать только модулем Magento?

andyjv
источник
Хорошо знать! Это кошерный кросс-пост или какова принятая практика, так как я уже разместил это здесь?
andyjv
Я бы нажал на ссылку "флаг" и попросил мод переместить его для вас. Вообще говоря, кросс-посты осуждаются.
Джон Конде
Если вы ищете настраиваемую контактную форму на странице CMS, см. Magento.stackexchange.com/questions/79602/… или более подробную информацию: stackoverflow.com/q/1066127/664108
Фабиан Шменглер,

Ответы:

21

На самом деле «Свяжитесь с нами» и «Заказы и возвраты» не являются страницами CMS. На самом деле это страницы из отдельного модуля. Они больше похожи на страницу входа или регистрации, чем на страницы CMS. Чтобы создать такую ​​страницу, вы можете создать простой модуль с контроллером, одним блоком и одним шаблоном. Давайте назовем расширение Easylife_Customform. Для этого вам понадобятся следующие файлы.
app/etc/modules/Easylife_Customform.xml- файл декларации модуля

<?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 - файл конфигурации

<?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 - файл макета внешнего интерфейса

<?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 - модуль помощника по умолчанию

<?php
class Easylife_Customform_Helper_Data extends Mage_Core_Helper_Abstract{
}

app/design/frontend/base/default/template/easylife_customform/form.phtml - фактический HTML-код для формы - сделать так, как вам нужно

<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 - модуль контроллера

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

Это должно быть так. Очистите кеш, и вы сможете получить доступ к форме, mysite.com/customform
надеюсь, я написал код правильно и ничего не пропустил

Мариус
источник
2
Вы действительно прошли лишнюю милю на этот ответ. +1
philwinkle
@philwinkle: это хорошо или плохо? :)
Мариус
Действительно отличный гид Мариус, спасибо! Я пытаюсь установить заголовок страницы, <label> в моем макете xml игнорируется, и это <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> не сработает.
Loeffel
@loeffel. Может быть, у вас есть что-то еще, что отменяет название. Теоретически код должен работать.
Мариус
@Marius Это очень удобно, но как мы можем добавить сообщения об ошибках? Я пытался добавить, Mage::getSingleton('core/session')->addError("Error");но не повезло. Это только показывает сообщение об успехе. Любая помощь?
Амир Сиддик