Pergunta

Eu tenho um cms bloco é adicionado a uma página através de um esquema xml.

<block type="cms/block" name="my_cms_block" as="my_cms_block">
    <action method="setBlockId">
        <block_id>my_cms_block</block_id>
    </action>
</block>

Ele é usado em uma página com o seguinte fragmento de código.

<?php echo $this->getChildHtml('my_cms_block'); ?>

Agora, o que eu gostaria de fazer é ser capaz de passar variáveis para este bloco de página que pode ser usado no cms bloco a si mesmo através de {{var something}}

Por exemplo, temos um cms bloco que se deseja utilizar através de uma seleção de páginas de produto, mas neste bloco queremos ser capaz de usar um produto atributo dizer o nome ou qualquer coisa realmente.

Foi útil?

Solução

Eu não tenho uma solução para passar variáveis para o bloco, mas eu tenho uma outra solução envolvendo personalizado {{...}} directivas.

Aqui está uma maneira de conseguir o que você precisa em seu cenário real.

Você precisa colocar isso no bloco de conteúdo

{{attribute attribute="name"}}

mudança name para que nunca atributo de código que você precisa.

Agora você precisa criar a attribute directiva.Basicamente você pode usar qualquer coisa como o nome directiva, mas certifique-se de que é um trabalho sem nenhum tipo de letras maiúsculas.Então, {{attr}} é ok {{productAttr}} não funciona.

O cms blocos são analisados usando o Mage_Widget_Model_Template_Filter, então você precisa reescrever a classe e adicionar um novo método:

public function attributeDirective($construction) //handles {{attribute ....}}
{
    if (!isset($construction[2])) { //if no parameters are passed ({{attribute}}) do nothing
        return '';
    }
    if (!Mage::registry('current_product')) { //if not on product context
        return '';
    }
    $params = $this->_getIncludeParameters($construction[2]);
    if (!isset($params['attribute'])) { //if no attribute code is passed
        return '';
    }
    $attributeCode = $params['attribute']; //get the attribute code
    $product = Mage::registry('current_product'); //get the current product
    $value = $product->getData($attributeCode); //get the value of the attribute
    /** @var Mage_Catalog_Helper_Output $helper */
    $helper = Mage::helper('catalog/output'); //get the output helper. The attribute might allow HTML so that needs to be parsed also.
    return $helper->productAttribute($product, $value, $attributeCode); //return the processed attribute value
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top