как создать многоязычный статический блок


Мне нужно создать многоязычный статический блок. До сих пор я создавал статический блок с идентификатором "delivery_returns".

Я вызываю его в каталоге\product\view.phtml следующим образом:

$deliveryBlock = Mage::getModel('cms/block')->load('delivery_returns');
echo $deliveryBlock->getTitle();
echo $deliveryBlock->getContent();

Я понимаю, что для перевода этого блока:

  1. Я должен просто создать еще один.
  2. Выберите нужный мне язык в поле store_view
  3. и сохраняйте идентификатор статического блока таким же, как у оригинала.

Этот метод работает с "нижними ссылками" а также с другим статическим блоком, который я создал, под названием "header_links", но, по-видимому, он не работает с блоком "delivery_returns". Изменение языка магазина не загружает соответствующий переведенный блок "delivery_returns"

Чего мне не хватает? Есть ли лучший способ достичь этого?

Author: ruuter, 2013-02-09

4 answers

  1. Создайте статический блок для каждого языка, все с одинаковым идентификатором.
  2. Визуализируйте блок с помощью блока cms/block. Он автоматически добавит идентификатор магазина, чтобы загрузить правильную версию блока.

Вот простой способ загрузить и отобразить блок непосредственно в файле шаблона:

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('delivery_returns')->toHtml() ?>

В качестве альтернативы, объявите блок в файле макета и отобразите его с помощью <?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>
 25
Author: Anders Thirsgaard Rasmussen, 2013-02-10 10:17:09

В приведенном ниже ответе говорится об установке идентификатора хранилища перед загрузкой модели, но, как отметил @benmarks в комментарии ниже, в этом нет необходимости, так как это происходит в блоке _toHtml().

Как и во многих других моделях mage, попробуйте установить желаемый идентификатор магазина перед загрузкой модели:

$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());
 8
Author: nevvermind, 2013-02-11 18:37:15

Я добился этого одним из нескольких способов:

  1. Просто используйте другое имя статического блока, скопируйте и переведите, и обратитесь к нему в своей теме отдельно.
  2. Вы можете использовать `{{перевести текст= "текст для перевода"}} на любой странице статического блока cms, реализовав следующий обходной путь:

    • копия app/code/core/Mage/Core/Model/Email/Template/Filter.php к app/code/local/Mage/Core/Model/Email/Template/Filter.php и изменить следующее:

--

public function translateDirective($construction)
{
    $params = $this->_getIncludeParameters($construction[2]);
    $text = $params['text'];
    return Mage::helper('page')->__($text);
} 

Дополнительная информация/источник:

Http://jagdeepbanga.com/blog/magento_how_add_translation_ability_into_cms_page_or_static_block.html

 4
Author: philwinkle, 2013-02-09 21:40:25

Вы можете загрузить модуль, который я создал на основе этого ответа, отсюда: https://github.com/miguelbalparda/MB_Translate / Это делает доступным встроенный переводчик Magento на страницах CMS/блоков.

 2
Author: mbalparda, 2014-02-13 12:01:58