çok dilli statik blok oluşturma


23

Çok dilli statik blok oluşturmam gerekiyor. Şimdiye kadar 'delivery_returns' kimliğiyle statik blok oluşturdum.

Bunu \ product \ view.phtml kataloğunda şöyle çağırıyorum:

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

Bu bloğu çevirmek için anladım:

  1. Sadece bir tane daha yapmalıyım.
  2. İstenilen dili store_view alanından seçin
  3. ve statik blok tanımlayıcısının orijinali ile aynı kalmasını sağlayın.

Bu yöntem 'footer_links' ve ayrıca 'header_links' adı verilen başka bir statik blokla çalışır, ancak görünüşe göre 'delivery_returns' bloğu ile çalışmıyor. Mağaza dilini değiştirmek, çevrilen 'delivery_returns' bloğuna karşılık gelmiyor

Neyi kaçırıyorum? Bunu başarmanın daha iyi bir yolu var mı?

Yanıtlar:


25
  1. Her dil için aynı tanımlayıcıya sahip statik bir blok oluşturun.
  2. Bloğu blokla işleyin cms/block. Bloğun doğru sürümünü yüklemek için otomatik olarak mağaza kimliği ekleyecektir.

Bloğu doğrudan şablon dosyasına yüklemek ve oluşturmak için kolay bir yol:

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

Alternatif olarak, bloğu bir düzen dosyasında ilan edin ve şununla oluşturun <?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
Bunu bilmiyordum. Muhteşem.
Philwinkle

Bu blok önbelleğe alma ile ilgili bazı sorunlar verir unutmayın. Bu özel blok için magento önbelleğini kapatmanın yanı sıra henüz nasıl düzelteceğinizden de emin değilim ... :(
Joris Kroos 15

Magento chache sorunları hakkında daha fazla bilgi için birden fazla mağaza görünümüne sahip bloklar bakın community.magento.com/t5/Version-Upgrades/…
Joris Kroos

8

Aşağıdaki cevap, modeli yüklemeden önce mağaza kimliğini ayarlama hakkında konuşur, ancak aşağıdaki yorumda @benmarks olarak belirtildiği gibi, bu, bloğun _toHtml () öğesinde olduğu gibi, gereksizdir.

Diğer birçok mage modelinde olduğu gibi, modeli yüklemeden önce istediğiniz mağaza kimliğini ayarlamayı deneyin :

$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
Gerekli değil - cms/blockoluşturma sırasında bunu yapar; bkz. Mage_Cms_Block_Block::_toHtml()(link)
benmarks

Haklısın. Tuhaf, farketmedim. OP'yi, bahsettiğiniz yönteme bile yöneltiyorum.
nevvermind

Aslında, bloğu alırken Mage mağaza kimliğini belirler. Oysa ben modeli doğrudan başlattım , ve mağaza kimliği ayarlanmadı. Bakın Mage_Cms_Block_Block::_toHtml().
nevvermind

Ne demek istediğinden emin değilim - Mage_Core_Model_Blockmağaza kimliğini belirleyen hiçbir şey göremiyorum .
Benmarks

Bahsettiğim blok bu değil ama Mage_Cms_Block_Block .
nevvermind

4

Bunu birkaç yoldan biriyle başardım:

  1. Sadece farklı bir statik blok adı kullanın, kopyalayın ve çevirin ve temanızda ayrı olarak kullanın.
  2. Aşağıdaki geçici çözümü uygulayarak herhangi bir cms, statik blok sayfasında çevirmek için `{{translate text =" metni "}} kullanabilirsiniz:

    • Kopyalama uygulaması / kod / çekirdek / Mage / çekirdek / Model / E / Şablon / Filter.php için uygulama / kod / yerel / Mage / çekirdek / Model / E / Şablon / Filter.php aşağıdaki değiştirin:

-

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

Daha fazla bilgi / kaynak:

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


Evet, bu çözümleri gördüm. Ancak her ikisi de geçici çözümlerdir. Birinci yöntemle her storeview için product \ view.phtml dosyasını kopyaladım. Yöntem 2, .csv dosyası düzenlemeye ihtiyaç duyar. Bu yüzden ikisi de geliştirici olmayan müşterinin birlikte çalışabileceği DEĞİLDİR. Bunu yapmanın uygun bir yolu yok mu? Benim yöntemimle, istemci statik blok içeriği oluşturabilir ve değiştirebilir ve header_links ve footer_links ile çalışır. Neden delivery_returns ile çalışmadığını anlamıyorum: S
ruuter

Keşke 'daha kolay' bir yol olsaydı - bununla başa çıkmanın tek yolu, içeriği ajax aracılığıyla çekip harici bir kaynaktan yüklemek olacaktır.
Philwinkle

FWIW - Ben çözüm 2 ile büyük şans oldu; İkisini de düzenli olarak kullanıyorum.
Philwinkle

Ajax'ı düşündüm, ancak bu müşterinin içeriği değiştirmesini daha da zorlaştırıyor. Sanırım yönteminizi seçeceğim 1. ve her dil için farklı view.phtml dosyaları oluşturacağım. Yakında daha iyi bir çözüm bulamazsanız, cevabınızı kabul edildi olarak işaretleyeceğim. Yine de Tnx!
ruuter

1

Bu cevaba göre oluşturduğum bir modülü buradan indirebilirsiniz: https://github.com/miguelbalparda/MB_Translate/ Bu, Magento'nun CMS / Blok sayfalarındaki satır içi çeviricisini kullanıma sunar.


Tek link cevapları en iyisi değildir. Lütfen uzantınızın ne yaptığını açıklayın. Ne yaptığını biliyorum ve tavsiye ediyorum ama herkes için biraz netleştirelim.
Marius

Elbette, Magento'nun inline çevirmenini CMS / Blok sayfalarında hazırlar.
mbalparda

Cevabını ekle.
Marius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.