як створити багатомовний статичний блок


23

Мені потрібно створити багатомовний статичний блок. Поки що я створив статичний блок з 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. і зберегти статичний ідентифікатор блоку таким же, як оригінал.

Цей метод працює з 'footer_links', а також з іншим статичним блоком, який я зробив, званий 'header_links', але, мабуть, він не працює з блоком 'Delivery_returns'. Зміна мови магазину не завантажує відповідний перекладений блок "доставка_returns"

Що я пропускаю? Чи є кращий спосіб досягти цього?

Відповіді:


25
  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>

1
Я цього не знав. Дивовижно.
philwinkle

Зважаючи на це, виникають деякі проблеми щодо кешування блоків. Не знаєте, як виправити, окрім вимкнення кеш-пам'ятників магенто для цього конкретного блоку ... :(
Joris Kroos

Більш детальну інформацію про проблеми magento chache з блоками з кількома переглядами магазину див. Community.magento.com/t5/Version-Upgrades/…
Joris Kroos,

8

У відповіді нижче йдеться про встановлення ідентифікатора магазину перед завантаженням моделі, але, як @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());

2
Не потрібно - cms/blockробить це під час надання; див. Mage_Cms_Block_Block::_toHtml()(посилання)
орієнтири

Ти правий. Як не дивно, я не помітив. Я навіть вказую ОП на той самий метод, про який ви говорите.
nevvermind

Насправді, отримуючи блок , Mage встановлює ідентифікатор магазину. Тоді як я безпосередньо створив модель , і у неї не було встановлено ідентифікатор магазину. Див Mage_Cms_Block_Block::_toHtml().
nevvermind

Я не впевнений, що ви маєте на увазі - я не бачу нічого, Mage_Core_Model_Blockщо встановлює ідентифікатор магазину.
орієнтири

Це не той блок, про який я говорю, але Mage_Cms_Block_Block .
nevvermind

4

Я це здійснив одним із кількох способів:

  1. Просто скористайтеся іншим статичним іменем блоку, скопіюйте та перекладіть та посилайтеся на нього у своїй темі окремо.
  2. Ви можете використовувати `{{translate text =" text to translate "}} в будь-якій cms, статичній блоковій сторінці, застосувавши наступне вирішення:

    • скопіюйте додаток / код / ​​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


Так, я бачив ці рішення. Але обидва - це обхідні шляхи. За допомогою першого методу я повинен дублювати продукт \ view.phtml для кожного перегляду магазину. Спосіб 2 потребує редагування файлу .csv. Тому обидва НЕ підходять для роботи з клієнтом, який не розробляє. Немає належного способу це зробити? За допомогою мого методу клієнт може створювати та змінювати вміст статичного блоку, і він працює з заголовками_посиланнями та колонтитулами_посилання. Я не розумію, чому б не працювати з доставкою_returns: S
ruuter

Мені б хотілося, щоб був «простіший» спосіб - єдиний інший спосіб обробити це - перетягнути вміст через ajax і завантажити його із зовнішнього джерела.
philwinkle

FWIW - мені пощастило з рішенням 2; Я використовую обидва на регулярній основі.
philwinkle

Я думав про ajax, але це ще більше ускладнює клієнтові зміну вмісту. Я думаю, що я виберу ваш спосіб 1. і створять різні файли view.phtml для кожної мови. Якщо незабаром ніхто не придумає кращого рішення, я позначу вашу відповідь прийнятою. Tnx все одно!
ruuter

1

Ви можете завантажити модуль, створений на основі цієї відповіді, звідси: https://github.com/miguelbalparda/MB_Translate/ Це робить доступним вбудований перекладач Magento на сторінках CMS / Block.


Відповіді на одне посилання - не найкращі. Поясніть, будь ласка, що ви робите з розширенням. Я знаю, що це робить, і рекомендую це, але зробити це трохи зрозумілим для всіх.
Маріус

Звичайно, він робить доступним вбудований перекладач Magento на сторінках CMS / Block.
mbalparda

Додайте йо свою відповідь.
Маріус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.