कैसे बहुभाषी स्थिर ब्लॉक बनाने के लिए


23

मुझे बहुभाषी स्टेटिक ब्लॉक बनाने की आवश्यकता है। अब तक मैंने id 'delivery_returns' के साथ स्टेटिक ब्लॉक बनाया है।

मैं इसे कैटलॉग \ product \ view.phtml में इस तरह से बुला रहा हूं:

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

मैं समझता हूं कि इस ब्लॉक का अनुवाद करना है:

  1. मुझे बस एक और बनाना चाहिए।
  2. Store_view फ़ील्ड से मेरी इच्छित भाषा चुनें
  3. और मूल के रूप में स्थिर ब्लॉक पहचानकर्ता रखें।

यह विधि 'footer_links' के साथ काम करती है और मेरे द्वारा बनाए गए एक अन्य स्थिर ब्लॉक के साथ भी, जिसे 'header_links' कहा जाता है, लेकिन जाहिर है कि यह 'delivery_returns' ब्लॉक के साथ काम नहीं कर रहा है। स्टोर की भाषा बदलने से अनुवादित 'delivery_returns' ब्लॉक लोड नहीं होता है

मुझे किसकी याद आ रही है? क्या इसे प्राप्त करने का एक बेहतर तरीका है?

जवाबों:


25
  1. प्रत्येक भाषा के लिए एक समान पहचानकर्ता के साथ एक स्थिर ब्लॉक बनाएं।
  2. ब्लॉक के साथ रेंडर करें cms/block। यह ब्लॉक के सही संस्करण को लोड करने के लिए स्वचालित रूप से स्टोर आईडी को जोड़ देगा।

यहां टेम्प्लेट फ़ाइल में सीधे ब्लॉक को लोड करने और रेंडर करने का एक आसान तरीका है:

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

वैकल्पिक रूप से, ब्लॉक को एक लेआउट फ़ाइल में घोषित करें और इसके साथ प्रस्तुत करें <?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
मुझे यह नहीं मालूम था। बहुत बढ़िया।
१०'१३ को १

माइंड यह ब्लॉक कैशिंग के बारे में कुछ मुद्दे देता है। निश्चित नहीं है कि इस विशिष्ट ब्लॉक के लिए मैगेंटो कैश को बंद करने के अलावा अभी तक कैसे तय किया जाए ... :(
जॉरिस क्रोस

एक से अधिक स्टोर विचारों के साथ ब्लॉक के साथ Magento उसका संचय मुद्दों के बारे में अधिक जानकारी देखने के community.magento.com/t5/Version-Upgrades/...
जोरिस क्रूस

8

नीचे दिया गया उत्तर मॉडल को लोड करने से पहले स्टोर आईडी को सेट करने के बारे में बात करता है, लेकिन, जैसा कि नीचे टिप्पणी में नोट किया गया है, यह अनावश्यक है, जैसा कि ब्लॉक के _toHtml () में होता है।

कई अन्य दाना मॉडल के साथ, मॉडल लोड करने से पहले वांछित स्टोर आईडी सेट करने का प्रयास करें :

$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
आवश्यक नहीं - cms/blockप्रतिपादन के दौरान यह करता है; देखना Mage_Cms_Block_Block::_toHtml()(लिंक)
benmarks

आप सही हे। अजीब, मैंने ध्यान नहीं दिया। मैं यहाँ तक कि जिस विधि के बारे में बात कर रहा हूँ, उस बिंदु को भी देखें।
नेवरमाइंड

दरअसल, ब्लॉक मिलने पर , Mage स्टोर आईडी सेट करता है। जबकि मैंने सीधे मॉडल को तत्काल तैयार किया था, और स्टोर आईडी सेट नहीं था। देख लो Mage_Cms_Block_Block::_toHtml()
nevvermind

मुझे यकीन नहीं है कि आपका क्या मतलब है - मुझे ऐसा कुछ भी नहीं दिख रहा है Mage_Core_Model_Blockजिसमें स्टोर आईडी सेट हो।
benmarks

यह वह ब्लॉक नहीं है जिसकी मैं बात कर रहा हूं, बल्कि Mage_Cms_Block_Block
नेवरमाइंड

4

मैंने इसे कुछ तरीकों में से एक में पूरा किया है:

  1. बस एक अलग स्टेटिक ब्लॉक नाम का उपयोग करें, कॉपी करें और अनुवाद करें, और इसे अपने विषय में अलग से देखें।
  2. आप निम्नलिखित कार्यबल को लागू करके किसी भी सेमी, स्टेटिक ब्लॉक पेज में `{{ट्रांसलेट टेक्स्ट =" टेक्स्ट टू ट्रांसलेट "} का उपयोग कर सकते हैं:

    • कॉपी ऐप / कोड / कोर / मैज / कोर / मॉडल / ईमेल / टेम्प्लेट / फिल्टर.फ्प टू ऐप / कोड / लोकल / मैज / कोर / मॉडल / ईमेल / टेम्प्लेट / फिल्टर.php और निम्नलिखित को संशोधित करें:

-

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

अधिक जानकारी / स्रोत:

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


हां, मैंने उन समाधानों को देखा। लेकिन दोनों ही वर्कअराउंड हैं। एक विधि के साथ मुझे फिर प्रत्येक स्टोरव्यू के लिए उत्पाद \ view.phtml की नकल करनी होगी। विधि 2 को .csv फ़ाइल संपादित करने की आवश्यकता है। तो दोनों गैर-डेवलपर क्लाइंट के साथ काम करने के लिए उपयुक्त नहीं हैं। क्या ऐसा करने का उचित तरीका नहीं है? मेरी विधि के साथ, ग्राहक स्थैतिक ब्लॉक सामग्री बना और बदल सकता है और यह शीर्ष लेख_लिंक और पाद लेख_लिंक के साथ काम करता है। मुझे समझ में नहीं आ रहा है कि
डिलीवरी_रेटर्स के

मैं चाहता हूं कि एक 'आसान' तरीका था - इसे संभालने का एकमात्र तरीका अजाक्स के माध्यम से सामग्री में खींचना और इसे बाहरी स्रोत से लोड करना होगा।
philwinkle

एफडब्ल्यूआईडब्ल्यू - मुझे समाधान 2 के साथ बहुत अच्छी किस्मत मिली है; मैं नियमित रूप से दोनों का उपयोग करता हूं।
दर्शन करें

मैं ajax के बारे में सोचता था, लेकिन इससे क्लाइंट के लिए कंटेंट को बदलना और भी मुश्किल हो जाता है। मुझे लगता है कि मैं आपकी विधि 1 चुनूँगा और हर भाषा के लिए अलग-अलग view.phtml फाइलें बनाऊंगा। यदि कोई जल्द ही बेहतर समाधान के साथ नहीं आता है, तो मैं आपके उत्तर को स्वीकार करूँगा। वैसे भी Tnx!
21

1

आप यहाँ से इस उत्तर के आधार पर बनाया गया एक मॉड्यूल डाउनलोड कर सकते हैं: https://github.com/miguelbalparda/MB_Translate/ यह CMS / ब्लॉक पृष्ठों में Magento के इनलाइन अनुवादक को उपलब्ध कराता है।


एकल लिंक उत्तर सर्वश्रेष्ठ नहीं हैं। कृपया विस्तार से बताएं कि आप क्या करते हैं। मुझे पता है कि यह क्या करता है और मैं इसे सुझाता हूं लेकिन इसे सभी के लिए थोड़ा स्पष्ट कर देता हूं।
मेरियस

ज़रूर, यह CMS / ब्लॉक पृष्ठों में Magento के इनलाइन अनुवादक को उपलब्ध कराता है।
मलबर्दा

इसमें अपना उत्तर जोड़ें।
मेरियस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.