Pregunta

¿Cómo creo un metatítulo de categoría predeterminado para todas las páginas de categorías?

Me gustaría que fuera algo como esto:

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

Quiero que sea el predeterminado sólo para las páginas de categorías.

es posible?

¿Fue útil?

Solución

Añade el siguiente código en tu head.phtml

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

EDITAR

Por lo que yo sé Mage::registry('current_category') Se puede utilizar para comprobar si estamos en una categoría.Ver La respuesta de Alanstorm.Las partes importantes de esa respuesta se agregan a continuación como referencia.

Las versiones actuales de Magento registran ciertas variables globales (no globales de PHP, sino cosas globales para el sistema Magento) en ciertas páginas.

llamando a lo siguiente

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

devolverá nulo si los objetos no se han configurado (es decir,estás en una página sin una categoría o un producto), o devolver objetos de categoría y producto.

Si se devuelve un objeto de producto, estás en la página de un producto.

Si no se devuelve ningún objeto de producto pero sí un objeto de categoría, estás en una página de categoría.

Entonces puedes imprimir lo que quieras.

Otros consejos

La forma más limpia de realizar esto es observando el evento. controller_action_layout_generate_blocks_after.Entonces las partes importantes de su módulo (Namespace_Module) sería

Archivo : 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>

Aquí estamos registrando un observador al evento. controller_action_layout_generate_blocks_after.Este evento en particular se activará después de que se generen todos los bloques a partir del diseño.Entonces, en este momento en particular, podemos acceder a todos los bloques del Diseño.El bloque que nos interesa aquí es head bloquear (es decir Mage_Page_Block_Html_Head).Este bloque contiene el title elemento.

Archivo : 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;
    }
}

Esta es nuestra clase de observador.El método que alterará el título de la categoría es setCategoryPageTitle().Lo que hace esta función es simple.Garantiza que estemos en una página de categoría.Entonces agarrará el head bloquear y establecer un nuevo título.Para establecer un nuevo título, estamos usando una función protegida. _prepareCategoryTitle().Definí esta función de acuerdo con la necesidad de esta pregunta.Actualmente regresará category name + blah blah blah.Entonces puedes modificar este método y cambiar el título según tus necesidades.

Nota:Aquí NO HAY EDICIONES PRINCIPALES, NO HAY ALTERNACIÓN EN PLANTILLAS PREDETERMINADAS.Es por eso que este es el método más limpio.

Básicamente, el título de las páginas del campo de metatítulo de la categoría.

Para su requisito, necesita reescribir la clase. Mage_Catalog_Block_Category_View allí necesita verificar el título actual usando el bloque de encabezado getTitle() value y reset it value to default cuando tiene algún valor.

Reescribir clase:

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

configuración.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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top