Padrão de meta títulos para páginas de categoria
-
13-12-2019 - |
Pergunta
Como faço para criar uma categoria padrão do meta título para todas as páginas da categoria?
Eu gostaria de ser algo como isto:
<title>{{category name}} - blah blah blah blah</title>
Eu quero ser o padrão apenas para páginas de categoria.
Isso é possível?
Solução
Adicione o seguinte código na sua head.phtml
if (Mage::registry(current_category)) {
echo '<title> Categoryname- keyword1 keyword2 keyword3"';
}
EDITAR
Tanto quanto eu sei Mage::registry('current_category')
pode ser usado para verificar se estamos em uma categoria.Ver Alanstorm Resposta.As partes importantes de que a resposta é a adição abaixo para referência
As atuais versões do Magento registrar certas variáveis globais (e não o PHP as variáveis globais, mas as coisas globais para o sistema Magento) em determinadas páginas.
Chamar o seguinte
$category = Mage::registry('current_category');
$product = Mage::registry('current_product');
$product = Mage::registry('product');
retorna null se os objetos ainda não foi definido (por exemplo,você está em uma página sem uma categoria ou um produto), ou retornam a categoria de produto e de objetos.
Se um objeto de produto é retornado você está em uma página de produto.
Se nenhum objeto de produto é devolvido, mas uma categoria de objeto é, você está em uma página de categoria.
em seguida, você pode imprimir o que você quiser.
Outras dicas
A maior forma de limpeza para executar este é observar para o evento controller_action_layout_generate_blocks_after
.Para as partes importantes de seu módulo (Namespace_Module
) seria
Arquivo : 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>
Aqui estamos registrando um observador para o evento controller_action_layout_generate_blocks_after
.Este evento em particular terá disparado, depois de todos os blocos é gerado a partir do layout.Assim, neste momento em particular, podemos ter acesso a todos os blocos no Layout.O bloco que nos interessa aqui é head
bloco (ie Mage_Page_Block_Html_Head
).Este bloco contém o title
elemento.
Arquivo : 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;
}
}
Este é o nosso observador de classe.O método que irá alterar o título da categoria é setCategoryPageTitle()
.O que esta função faz é simples.Ele garante que estamos em uma página de categoria.Em seguida, ele vai pegar o head
bloco e definir um novo título.Para definir um novo título, estamos usando uma função protegida _prepareCategoryTitle()
.Eu definida esta função de acordo com esta questão da necessidade.Atualmente ele vai voltar category name + blah blah blah
.Assim você pode alterar esse método e alterar o título, de acordo com as suas necessidades.
Nota:Aqui no NÚCLEO de EDIÇÕES, SEM ALTERNÂNCIA NO PADRÃO de MODELOS.Que é por que este é o método de limpeza.
Basicamente, título das páginas, a partir do meta título do campo de categoria.
Para sua exigência,você precisa reescrever classe Mage_Catalog_Block_Category_View
lá você precisar verificar o título atual usando de seleção de bloco de Cabeça getTitle() value
e reset it value to default
quando ele tem qualquer valor.
Reescrever classe:
<?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>