Use uma variável personalizada na descrição de uma categoria
-
13-12-2019 - |
Pergunta
Recentemente criei uma variável personalizada chamada storecount
- que aumentarei programaticamente para cada loja adicionada ao meu plugin localizador de lojas.
Gostaria de mostrar isso em vários locais, incluindo descrições de produtos e categorias, para que, quando adicionarmos uma nova loja, não tenhamos que encontrar todas as ocorrências da contagem de lojas e aumentá-la manualmente em 1.
Usando {{customVar code=storecount}}
não funciona em descrições de categorias.Existe alguma maneira de obter essa variável sem quebrar o núcleo do Magento em pedaços?
Solução
A maneira mais fácil de fazer isso é usar o mesmo processador de modelo para descrição de categoria usado para blocos cms e conteúdo de páginas.Aquele do módulo widget.
Para isso você precisa de uma extensão.Vamos chamá-lo StackExchange_Catalog
.
Você precisará dos seguintes arquivos.
app/etc/modules/StackExchange_Catalog.xml
- o arquivo de declaração
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Catalog>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
<Mage_Cms />
<Mage_Widget />
</depends>
</StackExchange_Catalog>
</modules>
</config>
app/code/local/StackExchange/Catalog/etc/config.xml
- o arquivo de configuração
<?xml version="1.0"?>
<config>
<global>
<catalog>
<content>
<tempate_filter>widget/template_filter</tempate_filter>
</content>
</catalog>
</global>
</config>
limpe o cache e tente novamente.
Outras dicas
Sem hackear o núcleo do Magento, sim;sem código, não.
Você pode escrever um observador que ouça o evento catalog_category_load_after e manipule a descrição da categoria nele.
/Editar:Quando a categoria com a descrição alterada for salva, a variável customizada também será salva, portanto esta não é uma boa solução.
Outra maneira seria adicionar seu storecount
variável para um arquivo de modelo com:
// To get the TEXT value of the custom variable:
Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('text');
// To get the HTML value of the custom variable:
Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('html');
Se você está se perguntando qual modelo, ative Dicas de caminho do modelo e você poderá descobrir onde adicioná-lo em um arquivo de modelo.Não substitua um modelo principal, copie-o para o diretório do seu tema, então faça uma cópia dele em algum lugar como app/design/frontend/[Your Design Package]/[Your Theme]/template/catalog/category/view.phtml
.Se você não seguir esta prática você perderá seu trabalho ao atualizar o Magento.
É provável melhor prática para crie blocos CMS e adicione-os aos seus arquivos de modelo para que seja mais fácil editar e desativar.
crie seu bloco CMS com seu conteúdo incluindo {{customVar code=storecount}}
e adicione-o onde for necessário em seus arquivos de modelo com:
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('your_cms_block_identifier')->toHtml() ?>
ATUALIZARAcabei de dar uma boa olhada A resposta de Mário - a solução dele parece muito legal e adiciona a constitucionalidade que você precisa ao Magento.