Cách tạo khối tĩnh đa ngôn ngữ


23

Tôi cần tạo khối tĩnh đa ngôn ngữ. Cho đến nay tôi đã tạo khối tĩnh với id 'deliver_returns'.

Tôi đang gọi nó trong danh mục \ sản phẩm \ view.phtml như thế này:

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

Tôi hiểu rằng để dịch khối này:

  1. Tôi chỉ nên tạo một cái khác.
  2. Chọn ngôn ngữ mong muốn của tôi từ trường store_view
  3. và giữ định danh khối tĩnh giống như bản gốc.

Phương thức này hoạt động với 'footer_links' và cũng với một khối tĩnh khác mà tôi đã tạo, được gọi là 'header_links', nhưng rõ ràng nó không hoạt động với khối 'deliver_returns'. Thay đổi ngôn ngữ cửa hàng không tải khối 'deliver_returns' được dịch tương ứng

Tôi đang thiếu gì? Có cách nào tốt hơn để đạt được điều này?

Câu trả lời:


25
  1. Tạo một khối tĩnh cho mỗi ngôn ngữ, tất cả đều có cùng một định danh.
  2. Kết xuất khối với cms/blockkhối. Nó sẽ tự động thêm ID cửa hàng để tải phiên bản chính xác của khối.

Đây là một cách dễ dàng để tải và kết xuất khối trực tiếp trong tệp mẫu:

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

Hoặc, khai báo khối trong tệp bố cục và hiển thị nó bằng <?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
Tôi không biết điều này. Tuyệt vời.
philwinkle

Hãy nhớ điều này đưa ra một số vấn đề liên quan đến bộ nhớ đệm khối. Không chắc chắn cách khắc phục ngoài việc tắt bộ đệm magento cho khối cụ thể này ... :(
Joris Kroos

Thông tin thêm về các vấn đề chache Magento với các khối có nhiều góc nhìn cửa hàng thấy community.magento.com/t5/Version-Upgrades/...
Joris Kroos

8

Câu trả lời bên dưới nói về việc đặt id cửa hàng trước khi tải mô hình, nhưng, như @benmark đã lưu ý trong nhận xét bên dưới, điều này là không cần thiết, vì điều đó xảy ra trong _toHtml () của khối.

Cũng như nhiều mô hình pháp sư khác, hãy thử đặt id cửa hàng mong muốn trước khi tải mô hình:

$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
Không cần thiết - việc cms/blocknày trong quá trình kết xuất; xem Mage_Cms_Block_Block::_toHtml()(liên kết)
dấu hiệu

Bạn đúng. Kì lạ, tôi không để ý. Tôi thậm chí còn chỉ cho OP phương pháp mà bạn đang nói đến.
nevvermind

Trên thực tế, khi nhận được khối , Mage đặt id cửa hàng. Trong khi đó, tôi trực tiếp khởi tạo mô hình và điều đó không có id cửa hàng được đặt. Xem Mage_Cms_Block_Block::_toHtml().
nevvermind

Tôi không chắc ý của bạn là gì - Tôi không thấy bất cứ điều gì trong Mage_Core_Model_Blockđó thiết lập id cửa hàng.
đánh dấu

Đó không phải là khối tôi đang nói đến, mà là Mage_Cms_Block_Block .
nevvermind

4

Tôi đã hoàn thành điều này theo một trong một số cách:

  1. Chỉ cần sử dụng một tên khối tĩnh khác, sao chép và dịch và tham chiếu nó trong chủ đề của bạn một cách riêng biệt.
  2. Bạn có thể sử dụng `{{dịch văn bản =" văn bản để dịch "}} trong bất kỳ cms, trang khối tĩnh nào bằng cách triển khai cách giải quyết sau:

    • sao chép ứng dụng / mã / lõi / Mage / Core / Model / Email / Template / Filter.php sang app / code / local / Mage / Core / Model / Email / Template / Filter.php và sửa đổi như sau:

-

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

Thêm thông tin / nguồn:

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


Vâng, tôi đã thấy những giải pháp đó. Nhưng cả hai đều là cách giải quyết. Với phương thức một, sau đó tôi phải sao chép sản phẩm \ view.phtml cho mỗi lần xem kho. Phương pháp 2 cần chỉnh sửa tệp .csv. Vì vậy, cả hai KHÔNG thích hợp cho khách hàng không phải là nhà phát triển để làm việc với. Không có cách thích hợp để làm điều này? Với phương thức của tôi, máy khách có thể tạo và thay đổi nội dung khối tĩnh và nó hoạt động với header_links và footer_links. Tôi không hiểu tại sao không làm việc với Delivery_returns: S
ruuter

Tôi ước rằng có một cách 'dễ dàng hơn' - cách duy nhất khác để xử lý nó là kéo nội dung qua ajax và tải nó từ nguồn bên ngoài.
philwinkle

FWIW - Tôi đã có may mắn lớn với giải pháp 2; Tôi sử dụng cả hai một cách thường xuyên.
philwinkle

Tôi đã nghĩ về ajax, nhưng điều này khiến khách hàng khó thay đổi nội dung hơn nữa. Tôi đoán tôi sẽ chọn phương pháp của bạn 1. và tạo các tệp view.phtml khác nhau cho mọi ngôn ngữ. Nếu không sớm có ai đưa ra giải pháp tốt hơn, tôi sẽ đánh dấu câu trả lời của bạn là được chấp nhận. Tnx nào!
kẻ hủy hoại

1

Bạn có thể tải xuống một mô-đun tôi đã tạo dựa trên câu trả lời này từ đây: https://github.com/miguelbalparda/MB_Translate/ Nó cung cấp trình dịch nội tuyến của Magento trong các trang CMS / Chặn.


Câu trả lời liên kết đơn không phải là tốt nhất. Hãy giải thích những gì bạn mở rộng làm. Tôi biết những gì nó làm và tôi khuyên bạn nên làm cho nó một chút rõ ràng cho mọi người.
Marius

Chắc chắn, nó làm cho trình dịch nội tuyến của Magento có sẵn trong các trang CMS / Chặn.
mbalparda

Thêm nó yo câu trả lời của bạn.
Marius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.