Metatítulos predeterminados para páginas de categorías
-
13-12-2019 - |
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?
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>