রুট টেম্পলেট পরিবর্তন করা কেন কাজ করে না
উভয়
Mage_Cms_IndexController::indexAction()
এবং
Mage_Cms_IndexController::viewAction()
যা যথাক্রমে ডিফল্ট হোমপেজ এবং একটি সিএমএস পৃষ্ঠা প্রদর্শনের জন্য দায়ী যারা কোনও সহায়ককে কল করুন:
Mage::helper('cms/page')->renderPage($this, $pageId)
আপনি যদি সহায়তায় ঝাঁপিয়ে পড়ে থাকেন (অ্যাপ্লিকেশন / কোড / কোর / ম্যাজ / সেমি / হেল্পার / পেজ.এফপিতে অবস্থিত) এবং renderPage()
সুরক্ষিত পদ্ধতি অনুসরণ করেন তবে _renderPage()
আপনি দেখতে পাবেন ম্যাগেন্টো রুট টেম্পলেটটির জন্য দুবার পরীক্ষা করছে (ম্যাজেন্টো সিই 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_render
যা আপনি সিএমএস পৃষ্ঠাগুলিতে আপনার নিজস্ব এক্সএমএল লেআউট হ্যান্ডেল যুক্ত করার জন্য ব্যবহার করতে পারেন। আপনার নিজস্ব এক্সটেনশন তৈরি করুন (আমি এখানে কিছু বিশদ ছাড়ব) এবং ইভেন্ট পর্যবেক্ষককে আপনারটিতে কনফিগার করুন 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;
}
}
শেষ পর্যন্ত, আপনার নতুন লেআউটটি এক্সএমএল হ্যান্ডেল যুক্ত করুন (যেমন আপনার মধ্যে 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()
যুক্তি ছাড়াই কলগুলি বা সমস্ত শিশু ব্লক প্রতিধ্বনিত করার জন্য অন্য কিছু করে।
আরও বিশদ ছাড়াই, আমি আপনাকে বলতে পারি না যে কেন আপনার ব্লকগুলি বাম বা ডান কলামে প্রতিধ্বনিত হচ্ছে না।