質問

すべてのカテゴリページのデフォルトカテゴリメタタイトルを作成する方法は?

私はそれがこのようなものであることを望みます:

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

カテゴリページのみのデフォルトになるようにしたいです。

これは可能ですか?

他のヒント

これを実行する最もきれいな方法は、イベント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をそこに書き換える必要があります。

書き換えクラス:

<?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');
            }
    }
}
.

config.xml:

  <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