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:

  1. Debería crear otro.
  2. Elija mi idioma deseado en el campo Store_view
  3. 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?

¿Fue útil?

Solución

  1. Cree un bloque estático para cada idioma, todo con el mismo identificador.
  2. 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:

  1. Simplemente use un nombre de bloque estático diferente, copie y traduzca, y consulte su tema por separado.
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top