Passando variáveis em um CMS bloco
-
12-12-2019 - |
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.
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
}