如何为所有类别页面创建默认类别元标题?

我希望它是这样的:

<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')可用于检查我们是否在类别中。请参阅 Alanstorm的答案 。该答案的重要部分是在下面添加参考文献

Magento的当前版本在某些页面上注册了某些全局变量(不是PHP全局,而是全局到Magento System的东西)。

调用以下

   $category = Mage::registry('current_category');         
   $product  = Mage::registry('current_product');
   $product  = Mage::registry('product');
. 如果尚未设置对象(即,您在没有类别或产品的页面上,则将返回null,或者返回类别和产品对象。

如果将产品对象返回,则在产品页面上。

如果没有返回产品对象,但类别对象是,您在类别页面上。

然后您可以打印您想要的内容。

其他提示

执行此操作的最干净的方法是观察事件 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() valuereset 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');
            }
    }
}

配置。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归因
scroll top