2012-09-19 4 views
0

나는 qtranslate가있는 WordPress 블로그를 운영 중입니다. 그것은 3 개의 언어를 사용하고 있습니다.Qtranslate로 올바른 순서로 배열을 표시하는 PHP 다국어 사이트

post_meta wp 후크를 사용하여 db에 저장되는 사용자 지정 메뉴 (가격 목록)를 만들었습니다.

목록 항목을 표시하는 데 간단한 논리를 사용합니다. 단 하나의 언어 만 사용하면 완벽하게 작동했습니다. 그러나 qtranslate를 추가 했으므로 문제가 있습니다.

해결 과정을 안내하여 내가 갇혀있는 곳을 더 잘 이해할 수있게 해주세요.

 <?php 
      if (get_post_meta($post->ID, 'price_list_items_category1', true)) : 
       $pricelistline = explode("\n", get_post_meta($post->ID, 'price_list_items_category2', true)); 

       foreach($pricelistline as $value) { 
        $e = explode("|",$value); 
        echo "<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n"; 
       } 
      endif; 
     ?> 

인 print_r은 $ pricelistline 위해이었다 :

Array ([0] => [:en]Rhine Riesling1|0,75 l|9,50 € [1] => [:ge]ჩიხირთმა|100გ|10ლ [2] => [:ru]шоколад|100грамм|10 L) 

분명히 내 스크립트가 동시에 세 가지 언어를 표시 한 것은 ...이 나는 문제를 해결하려면

그래서,이 코드를했다 qtranslate에 대해 읽고 _e()를 사용하여 qtranslate가 상황을 인수하고 올바른 언어를 표시하고 원치 않는 언어를 차단한다는 것을 발견했습니다.

그래서 수정 된 코드 :

 <?php 
      if (get_post_meta($post->ID, 'price_list_items_category1', true)) : 
       $pricelistline = explode("\n", get_post_meta($post->ID, 'price_list_items_category1', true)); 

       print_r($pricelistline); 
       foreach($pricelistline as $value) { 
        $e = explode("|",$value); 
        _e("<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n"); 
       } 
      endif; 
     ?> 

공지 사항 여기의 차이 :이 일 것 같았다 _e("<li><p>" . $e[0] . " <span>" . $e[1] . "</span></p> <span class=\"listmenuprice\">" . $e[2] . "</span><div class=\"clearfloat\"></div><!-- Very Important --></li>\n");

! 다른 언어 인스턴스가 사라진 것처럼 영어 페이지에서만 영어 버전 만 볼 수 있습니다.

문제는 소스를 볼 때 남아있는 허위 HTML이 발견되었습니다.

HTML 출력이 지금과 같습니다

<ul class="listmenuitems" id="listingmenu_1"> 
<li><p>Rhine Riesling1 <span>0,75 l</span></p> <span class="listmenuprice">9,50 € 
</span><div class="clearfloat"></div><!-- Very Important --></li> 
<li><p><li><p> 
</ul> 

주의 : <li><p><li><p> 다음은 나머지 두 언어의 두 개방 요소입니다. 내 생각 엔 뭔가 표시되지 않는 언어에 $ e [1]이 걸려서 언어가 작동하는 것입니다! 하지만 현실에는 약간의 PHP 오류가 있습니다.

나는 tail -f /var/log/apache2/error_log을했지만 어떤 PHP 오류도 보이지 않습니다.

그래서 여기서 어떻게됩니까? 너 도와 줄 수있어? 난 그냥 여분의 HTML 요소를 제거해야합니다. 나머지는 내 수정이 효과가있는 것처럼 보입니다!

긴 게시물로 나왔지만 모든 세부 사항을 제공했으면합니다. 읽기

감사합니다 :)

위해서 var_dump

array(3) { [0]=> string(37) "[:en]Rhine Riesling1|0,75 l|9,50 € " [1]=> string(43) "[:ge]ჩიხირთმა|100გ|10ლ " [2]=> string(38) "[:ru]шоколад|100грамм|10 L" } 

답변

0

내가 어떻게 _E 블록 다른 언어 아웃 모르지만 그것은 잘못된 언어로 단어를 발견하면 그냥 떨어질 것 같습니다,

변형 1 : 난 당신이 중 하나를 제안 배열이 변형이

언어

에 따라 고정 인덱스를 사용하는 대신 foreach 문을 사용하지만,하지 않습니다 일을 확인 e 배열의 첫 문자를 올바른 언어와 일치하는지 확인하고 만약 그렇다면 오래된 echo를 대신 사용하십시오.

변형 3 : Variant3의 기능 (__ 수 있습니다처럼 그건 보인다 : 단지 언어가 당신이 찾고있는 일이고

이 업데이트 해당 조건에 따라 출력을 에코 여부를 알려주는 기능을 찾을 수 두 가지 밑줄 생각)

+0

if (qtrans_getLanguage() == 'en') {}하지만이 코드를 내 코드와 통합하는 방법을 이해하는 데 어려움을 겪고 있거나 사용할 논리를 알고 싶습니다. . –

+0

언어가 언어에 관계없이 동일한 색인으로 저장된다면 foreach를 제거하고 $ e의 정의를'$ e = explode ("|", $ pricelist [index_for_current_language]);로 수정하면됩니다. 그렇지 않으면 foreach와 그것의 안쪽에 그리고 원래의 반향이있는 경우 – xception

+0

$ pricelistline 배열을 가져 와서 foreach에 도달하기 전에 필터링하면 어떻게 될까요? if 함수 (if == en)를 사용하면 [: en]으로 시작하는 항목 이외의 다른 항목은 모두 제거됩니다. 그래서이 될 것 내가 –