comment créer un bloc statique multilingue


23

J'ai besoin de créer un bloc statique multilingue. Jusqu'à présent, j'ai créé un bloc statique avec l'ID 'delivery_returns'.

Je l'appelle dans le catalogue \ product \ view.phtml comme ceci:

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

Je comprends que pour traduire ce bloc:

  1. Je devrais juste en créer un autre.
  2. Choisissez ma langue souhaitée dans le champ store_view
  3. et conservez l'identifiant de bloc statique identique à l'original.

Cette méthode fonctionne avec 'footer_links' et aussi avec un autre bloc statique que j'ai créé, appelé 'header_links', mais apparemment cela ne fonctionne pas avec le bloc 'delivery_returns'. La modification de la langue du magasin ne charge pas le bloc «delivery_returns» traduit correspondant

Qu'est-ce que je rate? Existe-t-il un meilleur moyen d'y parvenir?

Réponses:


25
  1. Créez un bloc statique pour chaque langue, tous avec le même identifiant.
  2. Rendez le bloc avec le cms/blockbloc. Il ajoutera automatiquement l'ID de magasin pour charger la version correcte du bloc.

Voici un moyen simple de charger et de rendre le bloc directement dans le fichier de modèle:

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

Vous pouvez également déclarer le bloc dans un fichier de mise en page et le rendre avec <?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
Je ne le savais pas. Impressionnant.
philwinkle

Attention, cela donne quelques problèmes concernant la mise en cache des blocs. Je ne sais pas encore comment y remédier en plus de désactiver le cache magento pour ce bloc spécifique ... :(
Joris Kroos

Plus d'informations concernant les problèmes de chache de Magento avec des blocs avec plusieurs vues de magasin, voir community.magento.com/t5/Version-Upgrades/…
Joris Kroos

8

La réponse ci-dessous parle de la définition de l'ID de magasin avant de charger le modèle, mais, comme @benmarks l'a noté dans le commentaire ci-dessous, cela n'est pas nécessaire, car cela se produit dans le _toHtml () du bloc.

Comme avec de nombreux autres modèles de mage, essayez de définir l'ID de magasin souhaité avant de charger le modèle:

$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
Pas nécessaire - le cms/blockfait pendant le rendu; voir Mage_Cms_Block_Block::_toHtml()(lien)
benmarks

Tu as raison. Bizarre, je ne l'ai pas remarqué. Je pointe même l'OP vers cette méthode dont vous parlez.
nevvermind

En fait, lors de l'obtention du bloc , Mage définit l'ID du magasin. Alors que j'ai directement instancié le modèle , et que l'ID de magasin n'était pas défini. Tu vois Mage_Cms_Block_Block::_toHtml().
Nevermind

Je ne suis pas sûr de ce que vous voulez dire - je ne vois rien dans Mage_Core_Model_Blocklequel définit l'identifiant du magasin.
benmarks

Ce n'est pas le bloc dont je parle, mais Mage_Cms_Block_Block .
Nevvermind

4

J'ai accompli cela de plusieurs manières:

  1. Utilisez simplement un nom de bloc statique différent, copiez et traduisez et faites-y référence séparément dans votre thème.
  2. Vous pouvez utiliser `{{translate text =" text to translate "}} dans n'importe quelle page de blocage statique en cms en implémentant la solution de contournement suivante:

    • copiez app / code / core / Mage / Core / Model / Email / Template / Filter.php vers app / code / local / Mage / Core / Model / Email / Template / Filter.php et modifiez ce qui suit:

-

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

Plus d'informations / source:

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


Oui, j'ai vu ces solutions. Mais les deux sont des solutions de contournement. Avec la première méthode, je dois ensuite dupliquer le produit \ view.phtml pour chaque magasin. La méthode 2 nécessite la modification du fichier .csv. Donc, les deux ne conviennent PAS aux clients non développeurs. N'y a-t-il pas une bonne façon de procéder? Avec ma méthode, le client peut créer et modifier le contenu d'un bloc statique et cela fonctionne avec header_links et footer_links. Je ne comprends pas pourquoi ne pas travailler avec delivery_returns: S
ruuter

Je souhaite qu'il y ait un moyen «plus facile» - la seule autre façon de le gérer serait d'extraire le contenu via ajax et de le charger depuis une source externe.
philwinkle

FWIW - J'ai eu beaucoup de chance avec la solution 2; J'utilise les deux régulièrement.
philwinkle

J'ai pensé à ajax, mais cela rend encore plus difficile pour le client de changer de contenu. Je suppose que je vais choisir votre méthode 1. et créer des fichiers view.phtml différents pour chaque langue. Si l'on ne trouve pas bientôt une meilleure solution, je marquerai votre réponse comme acceptée. Tnx quand même!
ruuter

1

Vous pouvez télécharger un module que j'ai créé sur la base de cette réponse à partir d'ici: https://github.com/miguelbalparda/MB_Translate/ Il met à disposition le traducteur en ligne de Magento dans les pages CMS / Block.


Les réponses à lien unique ne sont pas les meilleures. Veuillez expliquer ce que fait votre extension. Je sais ce que ça fait et je le recommande mais je le dis clairement à tout le monde.
Marius

Bien sûr, il met à disposition le traducteur en ligne de Magento dans les pages CMS / Block.
mbalparda

Ajoutez-le à votre réponse.
Marius
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.