ทำไมการเปลี่ยนเทมเพลตรูทจึงไม่ทำงาน
ทั้งสอง
Mage_Cms_IndexController::indexAction()
และ
Mage_Cms_IndexController::viewAction()
ซึ่งมีหน้าที่รับผิดชอบในการแสดงหน้าแรกเริ่มต้นและหน้า CMS ตามลำดับเรียกผู้ช่วย:
Mage::helper('cms/page')->renderPage($this, $pageId)
ถ้าคุณกระโดดเข้าไปในผู้ช่วยเหลือ (อยู่ที่แอพ / รหัส / core / Mage / Cms / Helper / Page.php) และทำตามrenderPage()
วิธีที่ได้รับการป้องกัน_renderPage()
คุณจะเห็นว่า Magento กำลังตรวจสอบเทมเพลตรูทสองครั้ง (Magento CE 1.7 0.2):
if ($page->getRootTemplate()) {
$handle = ($page->getCustomRootTemplate()
&& $page->getCustomRootTemplate() != 'empty'
&& $inRange) ? $page->getCustomRootTemplate() : $page->getRootTemplate();
$action->getLayout()->helper('page/layout')->applyHandle($handle);
}
และ
if ($page->getRootTemplate()) {
$action->getLayout()->helper('page/layout')
->applyTemplate($page->getRootTemplate());
}
การโทรทั้งสองเกิดขึ้นหลังจากการจัดการเลย์เอาต์เช่น "cms_page" และสิ่งที่คล้ายกันได้รับการประมวลผลดังนั้นคุณจึงไม่โชคดี
คุณสามารถทำอะไรเพื่อเปลี่ยนเทมเพลตรูท
มีเหตุการณ์cms_page_render
ที่คุณสามารถใช้สำหรับเพิ่มการจัดการเค้าโครง XML ของคุณเองในหน้า CMS สร้างส่วนขยายของคุณเอง (ฉันจะสำรองรายละเอียดไว้ที่นี่) และกำหนดค่าตัวสังเกตเหตุการณ์ในของคุณconfig.xml
:
<?xml version="1.0"?>
<config>
<modules>
<Emzee_Cms>
<version>0.0.1</version>
</Emzee_Cms>
</modules>
<global>
<events>
<cms_page_render>
<observers>
<emzee_cms_page_render>
<class>emzee_cms/observer</class>
<method>cms_page_render</method>
</emzee_cms_page_render>
</observers>
</cms_page_render>
</events>
<models>
<emzee_cms>
<class>Emzee_Cms_Model</class>
</emzee_cms>
</models>
</global>
</config>
เพิ่มผู้สังเกตการณ์กิจกรรมของคุณ:
<?php
class Emzee_Cms_Model_Observer
{
public function cms_page_render(Varien_Event_Observer $observer)
{
$action = $observer->getEvent()->getControllerAction();
$actionName = strtolower($action->getFullActionName());
$action->getLayout()->getUpdate()
->addHandle($actionName . '_after');
return $this;
}
}
สุดท้ายเพิ่มการจัดการ XML เค้าโครงใหม่ของคุณ (เช่นในของคุณlocal.xml
):
<?xml version="1.0"?>
<layout version="0.1.0">
<cms_index_index_after>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</cms_index_index_after>
</layout>
คุณสามารถใช้วิธีนี้เช่นกันเพื่อเพิ่มการcms_page_view_after
จัดการหรือสร้างการจัดการที่เฉพาะเจาะจงของหน้าเป็นวัตถุcms_page_render
ผ่าน$page
ไปยังผู้สังเกตการณ์ของคุณ
ทำไมคุณไม่สามารถเพิ่มบล็อกใน 'อ้างอิงซ้าย'
คุณแน่ใจหรือว่าแม่แบบที่คุณใช้มีคอลัมน์ด้านซ้าย คำถามนี้อาจฟังดูไร้สาระ แต่โครงร่าง "2 คอลัมน์ที่มีแถบด้านขวา" เป็นค่าเริ่มต้นมีเฉพาะพื้นที่ 'เนื้อหา' และ 'ขวา' ฉันสามารถเพิ่มบล็อกในคอลัมน์ด้านขวาโดยใช้cms_page
โดยไม่มีปัญหาดังนั้นนี่อาจเป็นปัญหา
โดยทั่วไปคุณสามารถเพิ่มบล็อกในการอ้างอิงและสะท้อนได้อย่างง่ายดายหาก
- เทมเพลตรูทที่เลือกใช้บล็อกที่คุณอ้างอิง (ดู
app/design/frontend/base/default/template/page/*.phtml
) และ
- บล็อกที่คุณอ้างถึงเป็นประเภทการ
core/text_list
โทร$this->getChildhtml()
โดยไม่มีข้อโต้แย้งหรือทำอย่างอื่นเพื่อแสดงบล็อกลูกทั้งหมด
หากไม่มีรายละเอียดเพิ่มเติมฉันไม่สามารถบอกคุณได้ว่าเหตุใดบล็อกของคุณจึงไม่สะท้อนในคอลัมน์ซ้ายหรือขวา