Wie erstelle ich einen mehrsprachigen statischen Block?

23

Ich muss einen mehrsprachigen statischen Block erstellen. Bisher habe ich einen statischen Block mit der ID 'delivery_returns' erstellt.

Ich rufe es im Katalog \ product \ view.phtml folgendermaßen auf:

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

Ich verstehe das, um diesen Block zu übersetzen:

  1. Ich sollte nur einen anderen erstellen.
  2. Wählen Sie im Feld store_view die gewünschte Sprache aus
  3. und halten Sie die statische Blockkennung wie das Original.

Diese Methode funktioniert mit 'footer_links' und auch mit einem anderen statischen Block namens 'header_links', aber anscheinend funktioniert sie nicht mit dem Block 'delivery_returns'. Durch Ändern der Geschäftssprache wird der entsprechende übersetzte Block "delivery_returns" nicht geladen

Was vermisse ich? Gibt es einen besseren Weg, dies zu erreichen?

ruuter
quelle

Antworten:

25
  1. Erstellen Sie für jede Sprache einen statischen Block mit demselben Bezeichner.
  2. Rendern Sie den Block mit dem cms/blockBlock. Die Geschäfts-ID wird automatisch hinzugefügt, um die richtige Version des Blocks zu laden.

So können Sie den Block einfach laden und direkt in der Vorlagendatei rendern:

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

Alternativ deklarieren Sie den Block in einer Layoutdatei 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>
Anders Thirsgaard Rasmussen
quelle
1
Das wusste ich nicht. Genial.
Philwinkle
Beachten Sie, dass dies einige Probleme in Bezug auf das Block-Caching verursacht. Ich weiß noch nicht, wie ich das Problem beheben soll, außer den Magento-Cache für diesen bestimmten Block auszuschalten ... :(
Joris Kroos
Weitere Informationen zu Problemen mit Magento-Chaches bei Blöcken mit mehreren Speicheransichten finden Sie unter community.magento.com/t5/Version-Upgrades/…
Joris Kroos,
8

Die folgende Antwort befasst sich mit dem Festlegen der Geschäfts-ID vor dem Laden des Modells. Wie im Kommentar unten angegeben, ist dies jedoch nicht erforderlich, da dies im _toHtml () des Blocks geschieht.

Versuchen Sie, wie bei vielen anderen Magier-Modellen, die gewünschte Geschäfts-ID festzulegen, bevor Sie das Modell laden:

$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());
vergiss es
quelle
2
Nicht notwendig - das cms/blockmacht das beim Rendern; siehe Mage_Cms_Block_Block::_toHtml()(link)
benmarks
Du hast recht. Merkwürdigerweise habe ich es nicht bemerkt. Ich weise das OP sogar auf genau diese Methode hin, von der Sie sprechen.
Nevvermind
Tatsächlich legt Mage beim Abrufen des Blocks die Store-ID fest. Wobei ich das Modell direkt instanziiert habe und die Store-ID nicht festgelegt war. Sehen Mage_Cms_Block_Block::_toHtml().
Nevvermind
Ich bin nicht sicher, was Sie meinen - ich sehe nichts, in Mage_Core_Model_Blockdem die Geschäfts-ID festgelegt ist.
Benmarks
Das ist nicht der Block, von dem ich spreche, sondern Mage_Cms_Block_Block .
Nevvermind
4

Ich habe dies auf eine der folgenden Arten erreicht:

  1. Verwenden Sie einfach einen anderen statischen Blocknamen, kopieren und übersetzen Sie ihn und verweisen Sie in Ihrem Thema separat darauf.
  2. Sie können `{{translate text =" text to translate "}} in jeder statischen Cms-Blockseite verwenden, indem Sie die folgende Problemumgehung implementieren:

    • Kopieren Sie app / code / core / Mage / Core / Model / Email / Template / Filter.php nach app / code / local / Mage / Core / Model / Email / Template / 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

Philwinkle
quelle
Ja, ich habe diese Lösungen gesehen. Aber beide sind Workarounds. Mit Methode eins muss ich dann product \ view.phtml für jede Storeview duplizieren. Für Methode 2 muss die CSV-Datei bearbeitet werden. Daher sind beide NICHT für Nicht-Entwickler-Clients geeignet. Gibt es nicht einen richtigen Weg, dies zu tun? Mit meiner Methode kann der Client statische Blockinhalte erstellen und ändern und funktioniert mit Header_links und Footer_links. Ich verstehe nicht, warum nicht mit delivery_returns arbeiten: S
ruuter
Ich wünschte, es gäbe eine "einfachere" Möglichkeit - die einzige andere Möglichkeit wäre, den Inhalt über Ajax abzurufen und von einer externen Quelle zu laden.
Philwinkle
FWIW - Ich hatte großes Glück mit Lösung 2; Ich benutze beide regelmäßig.
Philwinkle
Ich habe über Ajax nachgedacht, aber das macht es für den Kunden noch schwieriger, Inhalte zu ändern. Ich schätze, ich wähle Ihre Methode 1. und erstelle für jede Sprache unterschiedliche view.phtml-Dateien. Wenn sich niemand eine bessere Lösung einfallen lässt, markiere ich Ihre Antwort als akzeptiert. Tnx sowieso!
Ruuter
1

Sie können ein Modul herunterladen, das ich basierend auf dieser Antwort erstellt habe: https://github.com/miguelbalparda/MB_Translate/ Es stellt den Inline-Übersetzer von Magento in CMS / Block-Seiten zur Verfügung.

mbalparda
quelle
Single-Link-Antworten sind nicht die besten. Bitte erläutern Sie, was Ihre Erweiterung bewirkt. Ich weiß, was es tut und empfehle es, mache es aber ein wenig klar für alle.
Marius
Klar, es stellt den Inline-Übersetzer von Magento in CMS / Block-Seiten zur Verfügung.
mbalparda
Fügen Sie es Ihrer Antwort hinzu.
Marius