So erstellen Sie mehrsprachige statische Blocke
-
16-10-2019 - |
Frage
Ich muss mehrsprachiger statischer Block erstellen. Bisher habe ich einen statischen Block mit id 'lieferung_returns' erstellt.
Ich nenne es in Catalog product view.phtml wie folgt:
$deliveryBlock = Mage::getModel('cms/block')->load('delivery_returns');
echo $deliveryBlock->getTitle();
echo $deliveryBlock->getContent();
Ich verstehe das, um diesen Block zu übersetzen:
- Ich sollte nur noch einen erstellen.
- Wählen Sie meine gewünschte Sprache aus dem Feld Store_view aus
- und behalten Sie den statischen Blockkennung wie original.
Diese Methode funktioniert mit 'footer_links' und auch mit einem anderen statischen Block, den ich hergestellt habe, der "Header_Links" genannt wird, aber anscheinend funktioniert sie nicht mit 'lieferung_returns' Block. Das Ändern der Geschäftssprache lädt nicht die entsprechende übersetzte "lieferung_returns" -Blocke nicht
Was vermisse ich? Gibt es einen besseren Weg, dies zu erreichen?
Lösung
- Erstellen Sie für jede Sprache einen statischen Block, alle mit demselben Kennung.
- Den Block mit dem rendern
cms/block
Block. Die Store -ID wird automatisch hinzugefügt, um die richtige Version des Blocks zu laden.
Hier ist eine einfache Möglichkeit, den Block direkt in der Vorlagendatei zu laden und zu rendern:
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('delivery_returns')->toHtml() ?>
Alternativ deklarieren Sie den Block in einer Layout -Datei und rendern Sie ihn mit <?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>
Andere Tipps
In der folgenden Antwort geht es darum, die Store -ID vor dem Laden des Modells festzulegen. Wie @Benmarks im Kommentar unten erwähnt, ist dies jedoch unnötig, da dies im _tohtml () des Blocks passiert.
Stellen Sie wie bei vielen anderen Magiermodellen die gewünschte Store -ID fest Vor Laden des Modells:
$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());
Ich habe dies auf ein paar Arten erreicht:
- Verwenden Sie einfach einen anderen statischen Blocknamen, kopieren Sie und übersetzen Sie ihn in Ihrem Thema separat.
Sie können `{{übersetzt text =" text to übersetzt "}} auf einer beliebigen CMS -Seite, statische Blockseite, indem Sie die folgende Problemumgehung implementieren:
- Kopieren app/code/core/mage/core/model/modell/semplate/filter.php an app/code/local/mage/core/model/modell/memeplate/filter.php und ändern Sie Folgendes:
--
public function translateDirective($construction)
{
$params = $this->_getIncludeParameters($construction[2]);
$text = $params['text'];
return Mage::helper('page')->__($text);
}
Weitere Informationen/Quelle:
http://jagdeepbanga.com/blog/magento_how_add_translation_ability_into_cms_page_or_static_block.html
Sie können ein Modul herunterladen, das ich basierend auf dieser Antwort von hier erstellt habe: https://github.com/melauelbalparda/mb_translate/Es stellt den Inline -Übersetzer von Magento auf CMS/Blockseiten zur Verfügung.