カテゴリページのデフォルトメタタイトル
-
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')
を使用してカテゴリに入っているかどうかを確認できます。 aranstormの答えを参照してください。その答えの重要な部分は参照のために以下に追加されています
マゼントの現在のバージョン特定のページで特定のグローバル変数(PHPグローバルではなくマゼントシステムにグローバル)を登録します。
を呼び出す $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
をそこに書き換える必要があります。
書き換えクラス:
<?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>
.