다국어 정적 블록을 만드는 방법


23

다국어 정적 블록을 만들어야합니다. 지금까지 ID가 'delivery_returns'인 정적 블록을 만들었습니다.

다음과 같이 catalog \ 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. 올바른 버전의 블록을로드하기 위해 상점 ID를 자동으로 추가합니다.

템플릿 파일에서 블록을 직접로드하고 렌더링하는 쉬운 방법은 다음과 같습니다.

<?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

이것은 블록 캐싱에 관한 몇 가지 문제를 제공합니다. 이 특정 블록에 대한 마 젠토 캐시를 끄는 것 외에는 어떻게 고칠 지 아직 모르겠습니다 ... :(
Joris Kroos

여러 상점보기가있는 블록의 마 젠토 차체 문제에 대한 자세한 정보는 community.magento.com/t5/Version-Upgrades/…를
Joris Kroos

8

아래 답변은 모델을로드하기 전에 상점 ID를 설정하는 방법에 대해 설명하지만 아래 주석에 언급 된 @benmarks와 같이 블록의 _toHtml ()에서 발생하므로 불필요합니다.

다른 많은 마법사 모델과 마찬가지로 모델 로드 하기 전에 원하는 상점 ID 설정하십시오 .

$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는 상점 ID를 설정합니다. 반면 에 모델을 직접 인스턴스화 했지만 상점 ID가 설정되지 않았습니다. 참조하십시오 Mage_Cms_Block_Block::_toHtml().
nevvermind

무슨 뜻인지 잘 모르겠습니다 Mage_Core_Model_Block. 상점 ID를 설정하는 항목이 없습니다 .
benmarks

그것은 내가 말하는 블록이 아니라 Mage_Cms_Block_Block 입니다.
nevvermind

4

몇 가지 방법 중 하나로이 작업을 수행했습니다.

  1. 다른 정적 블록 이름을 사용하여 복사 및 번역 한 후 테마에서 별도로 참조하십시오.
  2. 다음 해결 방법을 구현하여 cms 정적 블록 페이지에서`{{translate text = "text to translation"}}을 사용할 수 있습니다.

    • 복사 응용 프로그램 / 코드 / 코어 / 마법사 / 코어 / 모델 / 이메일 / 템플릿 / 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


예, 그 해결책을 보았습니다. 그러나 둘 다 해결 방법입니다. 방법 1을 사용하면 모든 storeview에 대해 product \ view.phtml을 복제해야합니다. 방법 2에는 .csv 파일 편집이 필요합니다. 따라서 둘 다 개발자가 아닌 클라이언트와 작업하기에 적합하지 않습니다. 이 작업을 수행하는 적절한 방법이 없습니까? 내 방법으로 클라이언트는 정적 블록 내용을 만들고 변경할 수 있으며 header_links 및 footer_links와 함께 작동합니다. delivery_returns와 함께 작동하지 않는 이유를 이해하지 못합니다 : S
ruuter

나는 더 쉬운 방법이 있었으면 좋겠다. 처리하는 유일한 방법은 ajax를 통해 콘텐츠를 가져 와서 외부 소스에서로드하는 것입니다.
philwinkle

FWIW-나는 해결책 2와 함께 큰 행운을 얻었습니다. 나는 정기적으로 둘 다 사용합니다.
philwinkle 2019

아약스에 대해 생각했지만 클라이언트가 내용을 변경하기가 훨씬 어렵습니다. 방법 1을 선택하고 모든 언어에 대해 다른 view.phtml 파일을 만듭니다. 더 나은 해결책을 찾지 못하면 답변을 수락 된 것으로 표시합니다. 어쨌든 Tnx!
ruuter

1

https://github.com/miguelbalparda/MB_Translate/ 이 답변을 기반으로 작성된 모듈을 여기에서 다운로드 할 수 있습니다 .


단일 링크 답변이 최선이 아닙니다. 확장 프로그램이 무엇을하는지 설명하십시오. 나는 그것이 무엇을 알고 그것을 추천하지만 모든 사람들에게 조금 분명하게 만듭니다.
Marius

물론 CMS / 블록 페이지에서 Magento의 인라인 번역기를 사용할 수 있습니다.
mbalparda 2019

답을 추가하십시오.
Marius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.