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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top