마젠토 제품가격에 소수점 두자리 이상 사용방법

제품 가격과 주문 합계에 소수점 자리수 변환

마젠토는 기본적으로 제품가격, 주문합계(total, subtotal) 등등 모든 종류의 금액 관련 데이터베이스 필드에 decimal(12, 4)를 사용하므로 소수점 4자리 숫자까지 사용이 가능합니다. 하지만 코어모델에서 기본 소수점을 모두 2자리로 설정되어 있기 때문에 계산도 소수점 2자리로 계산되고 사이트에 보여지는 부분도 소수점 2자리 까지만 보여지게 되어있습니다.
제가 얼마전에 옵션과 구매수량에 따라서 제품가격이 천차만별로 바뀌는 모듈을 개발하게 되었는데 어떤 제품은 개당 최소 $0.0002까지 내려가는 경우여서 여러분과 공유할까 합니다.

 

어떻게 보면 복잡할것 같지만 실은 상당히 간단합니다.
제품의 가격을 특정 소수점 자리수로 표현하는데는 아래 두개의 파일을 수정해야 합니다.
– app/code/core/Mage/Core/Model/Store.php 에서 public function roundPrice($price)
– app/code/core/Mage/Directory/Model/Currency.php 에서 public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
이 두개의 function에서 디폴트로 소수점이 2로 정해져 있기 때문에 이것만 바꿔주면 됩니다.

 

각각의 기능을 이야기 하자면:
Mage_Core_Model_Store 모델의 roundPrice()는 제품을 쇼핑카트에 담을때 제품의 가격을 특정 소수점까지 계산하는 역할을 하고,
Mage_Directory_Model_Currency 모델의 format()은 제품의 가격 및 주문 합계를 특정 소수점 까지 보여주는 역할을 합니다.
위의 두 파일 모두 마젠토 코어모델이기 때문에 직접적인 수정을 피해야 하고, app/code/local/Mage 폴더에 override를 해야합니다.
우선 app/code/core/Mage/Core/Model/Store.php 파일과 app/code/core/Mage/Directory/Model/Currency.php 파일을 통째로
app/code/local/Mage/Core/Model/Store.php 와 app/code/local/Mage/Directory/Model/Currency.php 에 복사해야 합니다.
그후에 아래와 같이 수정합니다.
저의 경우엔 소수점 4자리수 까지 계산을 해야해서 2 대신 4를 썼습니다.

app/code/core/Mage/Core/Model/Store.php

1
2
3
4
5
public function roundPrice($price)
{
    // return round($price, 2);
    return round($price, 4); // 숫자는 0 - 4 중 원하는 소수점 자리
}

app/code/core/Mage/Directory/Model/Currency.php

1
2
3
4
5
public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
{
    // return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);
    return $this->formatPrecision($price, 4, $options, $includeContainer, $addBrackets);  // 숫자는 0 - 4 중 원하는 소수점 자리
}

 

위의 코드를 적용시키면 원래 쇼핑카트에 소수점 두자리로 보이던 제품 가격과 주문 합계가(첫번째 이미지) 두번째 이미지처럼 수소점 네자리 숫자로 바뀌어 보이게 됩니다.

쇼핑카트 - 소수점 두자리

쇼핑카트 – 소수점 두자리

쇼핑카트 - 소수점 네자리

쇼핑카트 – 소수점 네자리

 

마젠토 2 미리보기

“마젠토 2″가 개발중에 있다는 얘기는 지속적으로 나왔고 언제쯤에나 정식 버전이 나오려나 했는데, 결국 2015년 4분기 쯤에는 누구나 “마젠토 2” 커뮤니티 버전을 사용할수 있을것 같습니다. 지난주에 있었던 Magento 2 Developer Beta Webinar에 참여해서 베타버전에 대한 간략한 설명을 들었는데요, 여전히 개발중에 있고 오픈소스의 장점을 살려 많은 개발자들의 참여를 통해 발전시켜 나가고 싶다는 이야기를 들었습니다.

오픈소스
현재 개발자를 위한 마젠토 2 사이트는 http://magento.com/developers/magento2에 있습니다. 소스코드는 여전히 개발중에 있어 완벽하지는 않지만 개발자들을 위해 베타 버전의 소스가 Github에 공개되어있습니다.

https://github.com/magento/magento2/
누구나 코드를 다운로드 받아서 또는 Git을 통해 직접 서버에 설치해서 사용해 볼 수 있구요, 부족한 부분을 발견하시면 직접 코드기여도 할수 있습니다. github에 익숙하신 분들은 repository를 fork 한 후에 pull request를 보내면 되구요, github이 익숙치 않은 분들은 아래 두권의 Android용 e-book을 참조하시기 바랍니다.
두권다 모두 공짜입니다.


“마젠토 2″에서 향상된 점

기본적으로 “마젠토 2″는 PHP 5.5(PHP 5.4.11이 최소한의 사양)와 MySQL 5.6의 사용이 가능하고, 그외에 jQuery, CSS3, HTML5, RequireJS등이 기본적으로 사용되고 있습니다. “마젠토 1″보다 “마젠토 2″에서 나아진 점은:

  • 쉬워진 설치와 업그레이드
  • 향상된 인덱서와 Full Page Caching – 퍼포먼스의 향상
  • “마젠토 1″에서 약간의 문제가 되었던 모델간의 dependency 감소 – Dependency Injection 사용
  • 향상된 검색기능과 검색기능의 늘어난 확장성
  • 더 발전된 API로 인해 수월해진 3rd party system과 연동성
  • “마젠토 1″에서는 없었던 XML validation 기능
  • Frontend 개발자를 위한 blank template
  • Frontend 템플릿에서 완전 분리된 비지니스 로직

등등 이라고 합니다. 아직 베타버전이어서 앞으로 많은것들이 더해지고 수정될 예정이지만 2014년 12월 현재로서는 기본적인 프레임워크와 Frontend 정도만 준비되어 있는걸로 보입니다.

기존 마젠토에서 “마젠토 2″로 업그레이드
기존에 “마젠토 1″을 사용하시던 분들은 아쉽게도 “마젠토 2″로 업그레이드가 그리 쉽지만은 않을것으로 보입니다. 대폭 향상된 구조때문에 기존에 사용하던 모듈이나 템플렛은 “마젠토 2″에서 사용할수 없겠지만, 제품, 카테고리, 손님 데이터는 import/export를 통해 옮길수 있습니다.

관리자 모드
실제로 서버에 마젠토 2 베타버전을 설치해 보았는데 관리자 모드는 확실히 더 깔끔해지고 세련된 느낌입니다. 아무 데이터도 없는 상태의 관리자 모드 스크린샷 몇개를 첨부했습니다. 마젠토 버전은 ver.0.42.0-beta1 입니다.

유용한 링크: