Cómo crear un bloque estático multilingüe
-
16-10-2019 - |
Pregunta
Necesito crear un bloque estático multilingüe. Hasta ahora he creado un bloque estático con ID 'entrega_returns'.
Lo llamo en Catálogo Product View.phtml así:
$deliveryBlock = Mage::getModel('cms/block')->load('delivery_returns');
echo $deliveryBlock->getTitle();
echo $deliveryBlock->getContent();
Entiendo que para traducir este bloque:
- Debería crear otro.
- Elija mi idioma deseado en el campo Store_view
- y mantenga el identificador de bloque estático igual que el original.
Este método funciona con 'Footer_links' y también con otro bloque estático que hice, llamado 'Header_Links', pero aparentemente no funciona con el bloque 'entrega_returns'. Cambiar el lenguaje de la tienda no carga el bloque traducido 'entrega_tread_returns' traducido correspondiente
¿Qué me estoy perdiendo? ¿Hay una mejor manera de lograr esto?
Solución
- Cree un bloque estático para cada idioma, todo con el mismo identificador.
- Renderizar el bloque con el
cms/block
bloquear. Agregará automáticamente la ID de almacenamiento para cargar la versión correcta del bloque.
Aquí hay una manera fácil de cargar y renderizar el bloque directamente en el archivo de plantilla:
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('delivery_returns')->toHtml() ?>
Alternativamente, declare el bloque en un archivo de diseño y renderizarlo con <?php echo $this->getChildHtml('delivery_returns') ?>
:
<block type="cms/block" name="product.delivery_returns" as="delivery_returns">
<action method="setBlockId"><block_id>delivery_returns</block_id></action>
</block>
Otros consejos
La respuesta a continuación habla sobre la configuración de la ID de la tienda antes de cargar el modelo, pero, como se observó @Benmarks en el comentario a continuación, esto es innecesario, como eso sucede en el _ToHtml () del bloque.
Al igual que con muchos otros modelos de mago, intente configurar la identificación de la tienda deseada antes de Cargando el modelo:
$deliveryBlock = Mage::getModel('cms/block')
->setStoreId(Mage::app()->getStore()->getId())
->load('delivery_returns');
echo $deliveryBlock->getTitle();
/**
* You shouldn't print the content directly (although I'm assuming it's for debugging purposes only).
* Use the code below, so as the possible content directives (the "{{ }}" thingies) would be interpreted.
* Check out Mage_Cms_Block_Block::_toHtml().
*/
echo Mage::helper('cms')->getBlockTemplateProcessor()
->filter($deliveryBlock->getContent());
He logrado esto en una de las pocas maneras:
- Simplemente use un nombre de bloque estático diferente, copie y traduzca, y consulte su tema por separado.
Puede usar `{{traducir text =" texto para traducir "}} en cualquier página de bloque estática CMS implementando la siguiente solución:
- Copiar App/Code/Core/Mage/Core/Model/Correo electrónico/Template/Filter.php a App/Code/Local/Mage/Core/Model/Correo electrónico/Template/Filter.php y modifique lo siguiente:
--
public function translateDirective($construction)
{
$params = $this->_getIncludeParameters($construction[2]);
$text = $params['text'];
return Mage::helper('page')->__($text);
}
Más información/fuente:
http://jagdeepbanga.com/blog/magento_how_add_translation_ability_into_cms_page_or_static_block.html
Puede descargar un módulo que creé en función de esta respuesta desde aquí: https://github.com/miguelbalparda/mb_translate/Pone a disposición el traductor en línea de Magento en páginas CMS/Block.