Як створити сторінку 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

Я б натиснув на посилання "прапор" і попросив мода перемістити його для вас. Взагалі перехресне опублікування нахмуриться.
Джон Конде

Якщо ви шукаєте для користувача контактну форму всередині сторінки CMS см magento.stackexchange.com/questions/79602 / ... або більш детальну stackoverflow.com/q/1066127/664108
Fabian Schmengler

Відповіді:


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");але не пощастило. Єдине повідомлення про успіх Будь-яка допомога?
Аамір Сіддіке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.