cara membuat blok statis multibahasa

23

Saya perlu membuat blok statis multibahasa. Sejauh ini saya telah membuat blok statis dengan id 'delivery_returns'.

Saya menyebutnya di katalog \ product \ view.phtml seperti ini:

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

Saya mengerti bahwa untuk menerjemahkan blok ini:

  1. Saya hanya harus membuat yang lain.
  2. Pilih bahasa yang saya inginkan dari bidang store_view
  3. dan menjaga pengidentifikasi blok statis sama seperti aslinya.

Metode ini berfungsi dengan 'footer_links' dan juga dengan blok statis lain yang saya buat, yang disebut 'header_links', tetapi ternyata tidak bekerja dengan blok 'delivery_returns'. Mengubah bahasa toko tidak memuat blok 'delivery_returns' yang diterjemahkan yang sesuai

Apa yang saya lewatkan? Apakah ada cara yang lebih baik untuk mencapai ini?

perusak
sumber

Jawaban:

25
  1. Buat blok statis untuk setiap bahasa, semua dengan pengidentifikasi yang sama.
  2. Render blok dengan cms/blockblok. Ini akan secara otomatis menambahkan ID toko untuk memuat versi blok yang benar.

Berikut cara mudah untuk memuat dan merender blok secara langsung di file templat:

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

Atau, deklarasikan blok dalam file tata letak dan render dengan <?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
sumber
1
Saya tidak mengetahui ini. Luar biasa.
philwinkle
Pikiran ini memberikan beberapa masalah tentang caching blok. Belum yakin bagaimana cara memperbaikinya selain mematikan magento cache untuk blok khusus ini ... :(
Joris Kroos
Info lebih lanjut mengenai masalah magento chache dengan blok dengan banyak tampilan toko lihat community.magento.com/t5/Version-Upgrades/…
Joris Kroos
8

Jawaban di bawah ini berbicara tentang pengaturan id toko sebelum memuat model, tetapi, seperti @benmarks dicatat dalam komentar di bawah, ini tidak perlu, seperti yang terjadi di _toHtml blok ().

Seperti banyak model mage lainnya, coba atur id toko yang diinginkan sebelum memuat model:

$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());
nevvermind
sumber
2
Tidak perlu - cms/blockapakah ini selama rendering; lihat Mage_Cms_Block_Block::_toHtml()(tautan)
patok
Kamu benar. Aneh, saya belum menyadarinya. Saya bahkan mengarahkan OP ke metode yang sedang Anda bicarakan.
nevvermind
Sebenarnya, ketika mendapatkan blok , Mage menetapkan id toko. Padahal saya langsung instantiated model , dan itu tidak memiliki id toko set. Lihat Mage_Cms_Block_Block::_toHtml().
nevvermind
Saya tidak yakin apa yang Anda maksud - saya tidak melihat apa pun Mage_Core_Model_Blockyang menentukan id toko.
patokan
Itu bukan blok yang saya bicarakan, tetapi Mage_Cms_Block_Block .
nevvermind
4

Saya telah mencapai ini dalam salah satu dari beberapa cara:

  1. Cukup gunakan nama blok statis yang berbeda, salin dan terjemahkan, dan rujuk di tema Anda secara terpisah.
  2. Anda dapat menggunakan `{{translate text =" text to translate "}} dalam cms, halaman blok statis dengan mengimplementasikan solusi berikut:

    • salin aplikasi / kode / inti / Penyihir / Inti / Model / Email / Templat / Filter.php ke aplikasi / kode / lokal / Penyihir / Inti / Model / Email / Templat / Filter.php dan ubah yang berikut:

-

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

Informasi lebih lanjut / sumber:

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

Philwinkle
sumber
Ya, saya melihat solusi itu. Namun keduanya merupakan solusi. Dengan metode yang saya kemudian harus menduplikasi product \ view.phtml untuk setiap tampilan toko. Metode 2 perlu mengedit file .csv. Jadi keduanya TIDAK cocok untuk klien non-pengembang untuk bekerja dengannya. Apakah tidak ada cara yang tepat untuk melakukan ini? Dengan metode saya, klien dapat membuat dan mengubah konten blok statis dan berfungsi dengan header_links dan footer_links. Saya tidak mengerti mengapa tidak bekerja dengan delivery_returns: S
ruuter
Saya berharap ada cara yang 'lebih mudah' - satu-satunya cara lain untuk menanganinya adalah dengan menarik konten melalui ajax dan memuatnya dari sumber eksternal.
philwinkle
FWIW - Saya sangat beruntung dengan solusi 2; Saya menggunakan keduanya secara teratur.
philwinkle
Saya berpikir tentang ajax, tetapi ini membuatnya semakin sulit bagi klien untuk mengubah konten. Saya kira saya akan memilih metode Anda 1. dan membuat file view.phtml berbeda untuk setiap bahasa. Jika tidak ada yang segera memberikan solusi yang lebih baik, saya akan menandai jawaban Anda sebagai diterima. Tnx toh!
ruuter
1

Anda dapat mengunduh modul yang saya buat berdasarkan jawaban ini dari sini: https://github.com/miguelbalparda/MB_Translate/ Ini membuat penerjemah inline Magento di laman CMS / Blokir.

mbalparda
sumber
Jawaban tautan tunggal bukan yang terbaik. Tolong jelaskan apa yang ekstensi Anda lakukan. Saya tahu apa yang dilakukannya dan saya merekomendasikannya tetapi membuatnya sedikit jelas untuk semua orang.
Marius
Tentu, itu menyediakan penerjemah inline Magento di halaman CMS / Blokir.
mbalparda
Tambahkan itu sebagai jawaban Anda.
Marius