Вопрос

Мне нужно создать многоязычный статический блок. До сих пор я создал статический блок с id 'Delivery_returns'.

Я называю это в каталоге product view.phtml

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

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

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

Этот метод работает с «mooter_links», а также с другим статическим блоком, который я сделал, называемый «header_links», но, очевидно, он не работает с блоком «Deliver_returns». Изменение языка магазина не загружает соответствующий переведенный блок 'Delivery_returns'

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

Это было полезно?

Решение

  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>

Другие советы

Приведенный ниже ответ рассказывает о установке идентификатора магазина перед загрузкой модели, но, как отмечалось @Benmarks в комментарии ниже, это не нужно, как это происходит в блоке _tohtml ().

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

$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());

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

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

    • копия app/code/core/mage/core/model/email/template/filter.php Для приложения/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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top