วิธีสร้างบล็อกแบบคงที่หลายภาษา


23

ฉันต้องการสร้างบล็อกแบบคงที่หลายภาษา จนถึงตอนนี้ฉันได้สร้างบล็อกแบบคงที่ด้วยรหัส '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
ฉันไม่ได้รู้เรื่องนี้ น่ากลัว
philwinkle

ความคิดนี้ให้บางประเด็นเกี่ยวกับการแคชบล็อก ไม่แน่ใจว่าจะแก้ไขอย่างไรได้นอกจากปิดแคช magento สำหรับบล็อกนี้โดยเฉพาะ ... :(
Joris Kroos

ข้อมูลเพิ่มเติมเกี่ยวกับปัญหา chento ของวีโอไอพีที่มีบล็อกพร้อมมุมมองหลายร้านดูcommunity.magento.com/t5/Version-Upgrades/
Joris Kroos

8

คำตอบด้านล่างพูดถึงการตั้งค่ารหัสร้านค้าก่อนที่จะโหลดแบบจำลอง แต่เนื่องจาก @benmarks ที่ระบุไว้ในความคิดเห็นด้านล่างนี้ไม่จำเป็นเนื่องจากเกิดขึ้นใน _toHtml () ของบล็อก

เช่นเดียวกับรุ่น mage อื่น ๆ ลองตั้งค่ารหัสร้านค้าที่ต้องการก่อนที่จะโหลดรุ่น:

$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

คุณถูก. แปลกฉันไม่ได้สังเกต ฉันยังชี้ OP ไปยังวิธีการที่คุณพูดถึง
nevvermind

ที่จริงแล้วเมื่อได้รับการบล็อก Mage จะตั้งค่ารหัสร้านค้า ในขณะที่ฉันสร้างอินสแตนซ์ของโมเดลโดยตรงและนั่นไม่มีชุดรหัสร้านค้า Mage_Cms_Block_Block::_toHtml()ดู
nevvermind

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร - ฉันไม่เห็นอะไรเลยในการMage_Core_Model_Blockตั้งค่ารหัสร้านค้า
Benmarks

ที่ไม่ได้บล็อกที่ผมพูดถึง แต่Mage_Cms_Block_Block
nevvermind

4

ฉันทำสิ่งนี้สำเร็จด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

  1. เพียงใช้ชื่อบล็อกแบบคงที่ที่แตกต่างกันคัดลอกและแปลและอ้างอิงในชุดรูปแบบของคุณแยกต่างหาก
  2. คุณสามารถใช้ `{{translate text =" ข้อความที่จะแปล "}} ในหน่วย cms หน้าบล็อกคงที่โดยการใช้วิธีแก้ไขปัญหาต่อไปนี้:

    • คัดลอกแอป / รหัส / คอร์ / ผู้วิเศษ / คอร์ / โมเดล / อีเมล / เทมเพลต / Filter.phpไปยังแอป / รหัส / โลคอล / ผู้วิเศษ / คอร์ / โมเดล / อีเมล / เทมเพลต / Filter.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


ใช่ฉันเห็นวิธีแก้ปัญหาเหล่านั้น แต่ทั้งคู่เป็นวิธีแก้ไข ด้วยวิธีที่หนึ่งฉันต้องทำซ้ำ product \ view.phtml สำหรับทุกหน้าร้าน วิธีที่ 2 ต้องแก้ไขไฟล์. csv ดังนั้นทั้งสองจึงไม่เหมาะสำหรับลูกค้าที่ไม่ใช่นักพัฒนาซอฟต์แวร์ที่จะทำงานด้วย มีวิธีที่เหมาะสมในการทำเช่นนี้หรือไม่? ด้วยวิธีการของฉันลูกค้าสามารถสร้างและเปลี่ยนเนื้อหาบล็อกแบบคงที่และทำงานกับ header_links และ footer_links ฉันไม่เข้าใจว่าทำไมไม่ทำงานกับ delivery_returns: S
ruuter

ฉันหวังว่าจะมีวิธีที่ 'ง่ายขึ้น' - อีกวิธีหนึ่งในการจัดการมันคือการดึงเนื้อหาผ่าน ajax และโหลดจากแหล่งภายนอก
philwinkle

FWIW - ฉันโชคดีมากกับโซลูชันที่ 2; ฉันใช้ทั้งสองอย่างสม่ำเสมอ
philwinkle

ฉันคิดถึงอาแจ็กซ์ แต่สิ่งนี้ทำให้ลูกค้าเปลี่ยนเนื้อหาได้ยากขึ้น ฉันเดาว่าฉันจะเลือกวิธีการของคุณ 1 และสร้างไฟล์ view.phtml ที่แตกต่างกันสำหรับทุกภาษา หากไม่มีใครมาแก้ปัญหาด้วยดีกว่าฉันจะทำเครื่องหมายคำตอบของคุณเป็นที่ยอมรับ ยังไงก็ตาม!
ruuter

1

คุณสามารถดาวน์โหลดโมดูลที่ฉันสร้างขึ้นตามคำตอบนี้ได้จากที่นี่: https://github.com/miguelbalparda/MB_Translate/ ทำให้สามารถแปลอินไลน์ของ Magento ในหน้า CMS / บล็อก


คำตอบลิงก์เดียวไม่ได้ดีที่สุด โปรดอธิบายสิ่งที่คุณทำส่วนขยาย ฉันรู้ว่ามันทำอะไรและฉันแนะนำ แต่ทำให้ทุกคนชัดเจนน้อย
Marius

แน่นอนว่ามันทำให้นักแปลแบบอินไลน์ของ Magento ในหน้า CMS / บล็อก
mbalparda

เพิ่มคำตอบของคุณ
Marius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.