2013-02-26 2 views
0

내 프로젝트에 ZF2를 사용하고 있습니다. 그리고 이것은 전자 상거래 사이트입니다. 그래서 저는 통화를 다루고 있습니다. ZF2에서ZF2 통화 형식

그래서 내 주요 통화 형식 (이 터키 리라의 ISO 코드) TRY입니다 currencyFormat()

나는 터키에서 왔어요라는 이름의보기 도우미가있다. 그러나 터키에서는 통화 아이콘으로 TRY를 사용하지 않습니다. 아이콘은 USD의 경우 '$'이고, 터키의 리라 (TRY)의 경우 'EUR'및 'TL'입니다.

그래서 내가보기 스크립트에서 다음과 같이 그 일을하고 TRY의 통화를 포맷 할 때 :

<?php 
echo $this->currencyFormat(245.40, 'TRY', 'tr_TR'); 
?> 

이 코드의 결과는 "245.40 TRY"입니다. 하지만 "245.40 TL"

이 문제를 해결할 방법이 있습니까? 대체 기능을 사용하고 싶지 않습니다.

+0

TRY를 TL로 바꾸면 어떻게됩니까? – AmazingDreams

+0

아무 생각을 인쇄하지 않습니다. 도우미는 INTL 확장을 사용하기 때문에 통화의 ISO 코드 만 허용합니다. – Valour

+0

'TL'은 공식 ISO 4217 통화 코드 표시기가 아니므로 작동하지 않습니다. 이것이 사실이라면 PHP 코어에서이 동작을 버그라고 생각합니다. 나는 칠면조에 대해서 모른다. 그러나 정말로 TL이 아니라 TRY라면, 당신은 버그 보고서를 제출해야한다! – Sam

답변

1

I do not want to use replacement function라고 말하면 추측 할 때마다 도우미에게 전화 할 때마다 str_replace을 수행하는 것이 힘들 것입니다. 해결책은 헬퍼를 자신의 것으로 대체하는 것입니다. 여기서, Module.php에서 그리고 기존의 도우미를 확장하고 필요한 경우 교체를 처리하는 자신의 도우미 ...

<?php 
namespace Application\View\Helper; 

use Zend\I18n\View\Helper\CurrencyFormat; 

class MyCurrencyFormat extends CurrencyFormat 
{ 
    public function __invoke(
     $number, 
     $currencyCode = null, 
     $showDecimals = null, 
     $locale  = null 
    ) { 
     // call parent and get the string 
     $string = parent::__invoke($number, $currencyCode, $showDecimals, $locale); 
     // format to taste and return 
     if (FALSE !== strpos($string, 'TRY')) { 
      $string = str_replace('TRY', 'TL', $string); 
     } 
     return $string; 
    } 
} 

먼저 생성 ViewHelperProviderInterface를 구현하고 그것을 제공하는 방법을 빠른입니다 도우미의 세부 사항이 포함되어 있습니다

//Application/Module.php 
class Module implements \Zend\ModuleManager\Feature\ViewHelperProviderInterface 
{ 

    public function getViewHelperConfig() 
    { 
     return array(
      'invokables' => array(
        // you can either alias it by a different name, and call that, eg $this->mycurrencyformat(...) 
        'mycurrencyformat' => 'Application\View\Helper\MyCurrencyFormat', 
        // or if you want to ALWAYS use your version of the helper, replace the above line with the one below, 
        //and all existing calls to $this->currencyformat(...) in your views will be using your version 
        // 'currencyformat' => 'Application\View\Helper\MyCurrencyFormat', 
      ), 
     ); 
    } 
} 
+0

감사합니다. – smozgur

0

2012 년 3 월 1 일 현재 터키 리라 기호는 TRY입니다. http://en.wikipedia.org/wiki/Turkish_lira

그래서 ZF가 올바르게 출력한다고 생각합니다.

+0

ZF가 맞습니다. 그러나 TRY (2 문자는 국가, 3 번째는 통화 이름, 'YENI LIRA')는 국제 전화이며 ZF는 완벽합니다. 그러나 우리는 로컬에서 TL을 사용하고 아무도 TRY를 이해하지 못합니다. 그게 전부입니다. @ Crisp의 솔루션은 완전히 해결되지만 필요합니다. – smozgur