문제

모든 카테고리 페이지에 대한 기본 카테고리 메타 제목을 어떻게 생성합니까?

나는 이것이 다음과 같기를 바랍니다 :

<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 시스템의 전역 변수)를 등록합니다.

다음을 호출

   $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() 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');
            }
    }
}

구성.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