العناوين الوصفية الافتراضية لصفحات الفئات

magento.stackexchange https://magento.stackexchange.com//questions/73212

  •  13-12-2019
  •  | 
  •  

سؤال

كيف يمكنني إنشاء عنوان تعريف فئة افتراضي لجميع صفحات الفئات?

أود أن يكون شيئا من هذا القبيل:

<title>{{category name}} - blah blah blah blah</title>

أريد أن يكون الافتراضي فقط لصفحات الفئة.

هل هذا ممكن?

هل كانت مفيدة؟

المحلول

أضف الكود التالي في head.phtml

if (Mage::registry(current_category)) {
    echo '<title> Categoryname- keyword1 keyword2 keyword3"';
}

تحرير

بقدر ما أعرف Mage::registry('current_category') يمكن استخدامها للتحقق ما إذا كنا في فئة.انظر إجابة ألانستورم.الأجزاء المهمة من هذه الإجابة تضيف أدناه كمرجع

الإصدارات الحالية من الماجنتو تسجيل بعض المتغيرات العالمية (وليس فب غلوبالس ، ولكن الأشياء العالمية لنظام الماجنتو) على صفحات معينة.

استدعاء ما يلي

   $category = Mage::registry('current_category');         
   $product  = Mage::registry('current_product');
   $product  = Mage::registry('product');

إما أن تعود فارغة إذا لم يتم تعيين الكائنات (أي.أنت على صفحة بدون فئة أو منتج) ، أو إرجاع كائنات الفئة والمنتج.

إذا تم إرجاع كائن منتج كنت على صفحة المنتج.

إذا لم يتم إرجاع أي كائن منتج ولكن كائن فئة، فأنت في صفحة فئة.

ثم يمكنك طباعة ما تريد.

نصائح أخرى

الطريقة الأكثر نظافة لأداء هذا هو من خلال مراقبة لهذا الحدث controller_action_layout_generate_blocks_after.لذا فإن الأجزاء المهمة من الوحدة الخاصة بك (Namespace_Module) سيكون

ملف : app\code\local\Namespace\Module\etc\config.xml

<config>
    <frontend>
        <events>
            <controller_action_layout_generate_blocks_after>
                <observers>
                    <change_category_page_title>
                        <class>namespace_module/observer</class>
                        <method>setCategoryPageTitle</method>
                    </change_category_page_title>
                </observers>
            </controller_action_layout_generate_blocks_after>
        </events>
    </frontend>
</config>

نحن هنا تسجيل مراقب لهذا الحدث controller_action_layout_generate_blocks_after.سيتم تشغيل هذا الحدث بالذات ، بعد إنشاء كل كتل من التخطيط.لذلك في هذا الوقت بالذات ، يمكننا الوصول إلى كل الكتل في التخطيط.الكتلة التي نحن مهتمون بها هنا هي head كتلة (أي Mage_Page_Block_Html_Head).هذه الكتلة تحمل title عنصر.

ملف : app\code\local\Namespace\Module\Model\Observer.php

<?php
class Namespace_Module_Model_Observer
{

    const CATEGORY_TITLE_CONSTANT = 'blah blah blah blah';

    public function setCategoryPageTitle(Varien_Event_Observer $observer)
    {
        //ensure modification applies only for category page.
        if (Mage::registry('current_category')) {
            //get head block
            $head = $observer->getLayout()->getBlock('head');
            $title = $this->_prepareCategoryTitle();
            //set new title
            $head->setTitle($title);
        }
    }

    protected function _prepareCategoryTitle()
    {
        return Mage::registry('current_category')->getName()
            . '-'
            . self::CATEGORY_TITLE_CONSTANT;
    }
}

هذه هي فئة المراقبين لدينا.الطريقة التي ستغير عنوان الفئة هي setCategoryPageTitle().ما تفعله هذه الوظيفة بسيط.إنه يضمن أننا في صفحة فئة.ثم سوف الاستيلاء على head كتلة وتعيين عنوان جديد.لتعيين عنوان جديد ، نحن نستخدم وظيفة محمية _prepareCategoryTitle().لقد حددت هذه الوظيفة وفقا لحاجة هذا السؤال.حاليا سوف يعود category name + blah blah blah.حتى تتمكن من تغيير هذه الطريقة وتغيير العنوان وفقا لاحتياجاتك.

ملاحظة:هنا لا توجد تعديلات أساسية ، ولا تناوب في القوالب الافتراضية.هذا هو لماذا هذه هي الطريقة الأنظف.

في الأساس ، عنوان الصفحات من حقل العنوان الوصفي للفئة.

لمطلب الخاص بك ، تحتاج إلى إعادة كتابة الطبقة Mage_Catalog_Block_Category_View هناك تحتاج إلى التحقق من العنوان الحالي باستخدام كتلة رأس الشيك getTitle() value و reset it value to default عندما يكون لها أي قيمة.

إعادة كتابة الفصل:

<?php
class Dev_AmitCatalog_Block_Catalog_Category_View extends Mage_Catalog_Block_Category_View
{
   protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $this->getLayout()->createBlock('catalog/breadcrumbs');

        if ($headBlock = $this->getLayout()->getBlock('head')) {
            $category = $this->getCurrentCategory();
    if (!$headBlock->getTitle()) {
                $headBlock->setTitle($category->getName().' - blah blah blah blah');
            }
    }
}

التكوين.شمل:

  <global>
    ....
    <blocks>
      <amitcatalog>
        <class>Dev_AmitCatalog_Block</class>
      </amitcatalog>
            <catalog>
                <rewrite>
                    <category_view>Dev_AmitCatalog_Block_Catalog_Category_View</category_view>
                </rewrite>
            </catalog>
    </blocks>
.....
  </global>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top