आपके "के बारे में <reference name="left
/> का उपयोग करके कोई ब्लॉक नहीं जोड़ा जा सकता है , क्या आप सुनिश्चित हैं कि आपके सीएमएस पृष्ठ में एक ब्लॉक है जिसका नाम बाएं है। उदाहरण के लिए, यदि आप डिफ़ॉल्ट होम पेज पर विचार करते हैं जो मैगेंटो नमूना डेटा के साथ जहाज करता है, तो यह ब्लॉक नाम का प्रतीत होता है बाएं।
हालाँकि, यदि आप बैकएंड में पृष्ठ को देखते हैं, तो आप देख सकते हैं कि यह रूट टेम्पलेट का उपयोग करने के लिए सेट है
`2 columns with right bar`
और फिर इसके कंटेंट एरिया में, लेफ्ट कॉलम को HTML मार्कअप (WYSIWYG से सोर्स व्यू के लिए टॉगल) का उपयोग करके जोड़ा जाता है
<div class="col-left side-col">
<p class="home-callout"><a href="{{store direct_url="apparel/shoes/womens/anashria-womens-premier-leather-sandal.html"}}"><img src="{{skin url='images/ph_callout_left_top.gif'}}" alt="" border="0" /></a></p>
<p class="home-callout"><img src="{{skin url='images/ph_callout_left_rebel.jpg'}}" alt="" border="0" /></p>
{{block type="tag/popular" template="tag/popular.phtml"}}</div>
यह निर्देशित ग्राफ़ यह स्पष्ट करता है कि इसमें left
हुक करने के लिए कोई ब्लॉक नहीं है ( पूर्ण आकार की छवि के लिए क्लिक करें )
टेम्पलेट सेट करने के संबंध में, यदि आप "लेआउट" ड्रॉप डाउन के स्रोत को देखते हैं
<select id="page_root_template" name="root_template" class=" required-entry select">
<option value="empty">Empty</option>
<option value="one_column">1 column</option>
<option value="two_columns_left">2 columns with left bar</option>
<option value="two_columns_right" selected="selected">2 columns with right bar</option>
<option value="three_columns">3 columns</option>
</select>
जब आप इस क्षेत्र को स्थापित कर रहे हैं आप देख सकते हैं, वास्तविक मूल्य को बचाया जा रहा है की तरह कुछ है one_column
, two_columns_left
आदि एक ही नाम के लेआउट हैंडल करने के लिए इन मूल्यों corespond।
#File: app/design/frontend/default/modern/layout/page.xml
<page_one_column translate="label">
<label>All One-Column Layout Pages</label>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="setLayoutCode"><name>one_column</name></action>
</reference>
</page_one_column>
...
<page_two_columns_left translate="label">
<label>All Two-Column Layout Pages (Left Column)</label>
<reference name="root">
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="setLayoutCode"><name>two_columns_left</name></action>
</reference>
</page_two_columns_left>
जब Magento एक CMS पृष्ठ प्रदान कर रहा है, तो यह सहेजे गए मानों को संदर्भित करता है, और पृष्ठ पर उपयुक्त लेआउट हैंडल जोड़ता है। हालांकि यह प्रश्न के लिए ठोस है, कि हैंडल को यहां जोड़ा गया है
#File: app/code/core/Mage/Cms/Helper/Page.php
protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true)
{
//...
$action->addActionLayoutHandles();
if ($page->getRootTemplate()) {
$handle = ($page->getCustomRootTemplate()
&& $page->getCustomRootTemplate() != 'empty'
&& $inRange) ? $page->getCustomRootTemplate() : $page->getRootTemplate();
$action->getLayout()->helper('page/layout')->applyHandle($handle);
}
//...
}
अधिक महत्वपूर्ण बात यह है कि लेआउट के हैंडल को क्रम में जोड़ने का क्रम है
जैसा कि आप ऊपर स्क्रीनशॉट में देख सकते हैं, page_two_columns_right
हैंडल के बादcms_index_index
हैंडल जोड़ा गया है। इसका मतलब है कि अगर आप लेआउट xml अपडेट कोड जोड़ते हैं तो cms_index_index
आपके कोड में टेम्पलेट बदल जाएगा, लेकिन फिर लेआउट अपडेट xml कोड page_two_columns_right
इसके साथ चलेगा।
मुझे हमेशा संदेह है कि यह डिज़ाइन द्वारा यह सुनिश्चित करने के लिए है कि उपयोगकर्ता इंटरफ़ेस में सेट टेम्पलेट हमेशा सही हो। मैगेंटो के पिछले संस्करण में <action method="setIsHandle"><applied>1</applied></action>
विधि कॉल उन्हीं कारणों से मौजूद है।
तो, शुद्ध लेआउट xml कोड का उपयोग करके आप क्या करना चाहते हैं, इसका कोई तरीका नहीं है। यदि आप कस्टम मॉड्यूल और ऑब्जर्वर कोड बनाने में सहज हैं, तो cms_page_render
ईवेंट देखें। यह आग बुझने से ठीक पहले लगी loadLayoutUpdates
है, और आपको अतिरिक्त हैंडल नाम को स्लाइड करने देगा या मौजूदा हैंडल नामों को हटा देगा।