ฉันจะสร้างหน้า Magento CMS ที่แก้ไขไม่ได้ได้อย่างไร


16

ในการติดตั้ง Magento แบบใหม่นั้นมาพร้อมกับหน้า CMS เริ่มต้นหลายหน้าที่คุณสามารถแก้ไขCMS > Pagesได้ อย่างไรก็ตามมันยังมาพร้อมกับหน้า CMS สอง "ที่ไม่สามารถแก้ไขได้": Orders and ReturnsและContact Us ... ซึ่งทั้งสองเป็นหน้าเว็บที่มีแบบฟอร์มบนหน้าเว็บเหล่านี้และไฮไลต์ข้อบกพร่องของ Magento CE: การสร้างและแก้ไขแบบฟอร์ม

ฉันจัดการเพื่อแทนที่ค่าเริ่มต้นติดต่อเราด้วยฟอร์มของฉันเอง แต่ฉันต้องการเพิ่มฟอร์มอื่นและอาจจำเป็นต้องเพิ่มฟอร์มเพิ่มเติมในอนาคต ฉันค่อนข้างคุ้นเคยกับการสร้าง Magento Modules เพื่อแทนที่ฟังก์ชั่นและหน้าเว็บที่มีอยู่อย่างที่ฉันเคยทำมาแล้ว

ฉันได้เริ่มทำงานกับโมดูลที่จะช่วยให้ความสามารถในการสร้างแบบฟอร์มหน้าใน Magento แต่พวกเขาจะต้องมองไม่เห็นการจัดการ CMS เช่นรูปแบบเริ่มต้นคือ ฉันได้พบคำตอบสำหรับการสร้างหน้า CMS โดยทางโปรแกรม แต่เพิ่มไปยัง Magento ของCMS > Pagesแต่ที่เพิ่มไปยังวีโอไอพี

ฉันจะสร้างหน้า CMS ที่สามารถแก้ไขได้โดย Magento Module เท่านั้นได้อย่างไร


ดีแล้วที่รู้! มันเป็นการเสี่ยงต่อการข้ามโพสต์หรือสิ่งที่เป็นที่ยอมรับตั้งแต่ฉันโพสต์ที่นี่แล้ว?
andyjv

ฉันจะคลิกที่ลิงก์ "ตั้งค่าสถานะ" และขอให้ mod ย้ายมันให้คุณ โดยทั่วไปการพูดข้ามโพสต์จะขมวดคิ้วเมื่อ
John Conde

หากคุณกำลังมองหารูปแบบการติดต่อที่กำหนดเองภายในหน้า 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: ดีหรือไม่ดี? :)
Marius

มัคคุเทศก์ที่ดีจริงๆขอบคุณ! ฉันกำลังพยายามตั้งชื่อหน้า <label> ในเลย์เอาต์ xml ของฉันจะถูกละเว้นและสิ่งนี้ <reference name="head"> <action method="setTitle" translate="title"><title>Subscribe to our Newsletter</title></action> </reference> จะไม่ทำงาน
loeffel

@loeffel บางทีคุณอาจมีอย่างอื่นที่แทนที่ชื่อ ในทางทฤษฎีรหัสควรทำงาน
Marius

@Marius นี่มีประโยชน์มาก แต่เราจะเพิ่มข้อความแสดงข้อผิดพลาดได้อย่างไร ฉันพยายามเพิ่มMage::getSingleton('core/session')->addError("Error");แต่ไม่มีโชค มันแสดงข้อความสำเร็จเท่านั้น ความช่วยเหลือใด ๆ
Aamir Siddique
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.