Magento 2.0.4를 설치 한 후 매우 이상한 문제에 직면하고 있습니다. 가격이 $ 12 인 제품을 만들고 백엔드의 Magento 구성에서 로캘을 변경했습니다.
아래는 목록 페이지의 스크린 샷입니다.
상세 페이지는 아래 스크린 샷을 참조하십시오.
두 스크린 샷의 차이점을 알 수 있습니다. 예, 제품 세부 정보 페이지에는 $ 0.00 가격이 표시되지만 목록 페이지에는 추가 한 가격이 유지됩니다.
제품 세부 정보 페이지는 1-2 초 후에 올바른 가격을 $ 0,00 (자동으로 업데이트)으로 자동 업데이트합니다.
아래 코드를 찾으십시오.
$('[data-price-type="' + priceCode + '"]', this.element).html(priceTemplate({data: price}));
코드에서 더 디버그하고 Magento 2 pricebox 위젯에 매개 변수를 전달하는 다른 자바 스크립트 코드를 찾습니다.
<script>
require([
'jquery',
'Magento_Catalog/js/price-box'
], function($){
var priceBoxes = $('[data-role=priceBox]');
priceBoxes = priceBoxes.filter(function(index, elem){
return !$(elem).find('.price-from').length;
});
priceBoxes.priceBox({'priceConfig': <?php /* @escapeNotVerified */ echo $block->getJsonConfig() ?>});
});
</script>
이제 getJsonConfig () 메소드를 확인했습니다.
$product = $this->getProduct();
if (!$this->hasOptions()) {
$config = [
'productId' => $product->getId(),
'priceFormat' => $this->_localeFormat->getPriceFormat()
];
return $this->_jsonEncoder->encode($config);
}
$tierPrices = [];
$tierPricesList = $product->getPriceInfo()->getPrice('tier_price')->getTierPriceList();
foreach ($tierPricesList as $tierPrice) {
$tierPrices[] = $this->priceCurrency->convert($tierPrice['price']->getValue());
}
$config = [
'productId' => $product->getId(),
'priceFormat' => $this->_localeFormat->getPriceFormat(),
'prices' => [
'oldPrice' => [
'amount' => $this->priceCurrency->convert(
$product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue()
),
'adjustments' => []
],
'basePrice' => [
'amount' => $this->priceCurrency->convert(
$product->getPriceInfo()->getPrice('final_price')->getAmount()->getBaseAmount()
),
'adjustments' => []
],
'finalPrice' => [
'amount' => $this->priceCurrency->convert(
$product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue()
),
'adjustments' => []
]
],
'idSuffix' => '_clone',
'tierPrices' => $tierPrices
];
코드를 통해 많은 디버깅을 수행했으며 로케일 지원을 위해 ICUDATA를 사용하고 있다는 결론에 도달했습니다.
나는이 모든 것에 붙어 있습니다. 가격 형식 문제 인 것 같습니다.
Persion (이란)과 같은 특정 로케일 옵션에 대해서만이 문제가 발생하는지 확인하십시오.
답변
이 문제가 해결되었습니다. Magento2를 최신 안정 버전으로 업데이트하십시오.
GIT & Composer에서 설치 한 경우 다음 단계를 수행하십시오.
- 당신은 당신의 변화를 막아야보다
- GIT PULL 최신 안정 브랜치 즉 2.1
- 작곡가 업데이트
- 마 젠토 업그레이드 (
bin/magento setup:upgrade
)
그렇지 않으면 magento 웹 사이트에서 최신 버전을 다운로드하는 것보다 zip 폴더 다운로드를 사용하여 설치하고 캐시를 지우고 실행하는 데 필요한 것보다 새로운 zip을 사용하는 모든 파일을 재정의하는 경우
bin/magento setup:upgrade
답변
다음 명령을 사용하여 magento를 업그레이드하십시오.
bin / magento 설정 : 업그레이드
bin / magento 설정 : db-schema : 업그레이드
php -d memory_limit = -1 bin / magento 설정 : di : compile
php -d memory_limit = -1 bin / magento 설정 : 정적 내용 : 배포
답변
아래 코드를 업데이트하십시오 :
경로- lib/internal/Magento/Framework/Locale/Format.php
class Format implements \Magento\Framework\Locale\FormatInterface
{
const DEFAULT_NUMBER_SET = 'latn';
/**
* @var \Magento\Framework\App\ScopeResolverInterface
*/
@@ -104,12 +105,18 @@ public function getPriceFormat($localeCode = null, $currencyCode = null)
$currency = $this->_scopeResolver->getScope()->getCurrentCurrency();
}
$localeData = (new DataBundle())->get($localeCode);
/* $format = $localeData['NumberElements']['latn']['patterns']['currencyFormat']
?: explode(';', $localeData['NumberPatterns'][1])[0];
$decimalSymbol = $localeData['NumberElements']['latn']['symbols']['decimal']
?: $localeData['NumberElements'][0];
$groupSymbol = $localeData['NumberElements']['latn']['symbols']['group']
?: $localeData['NumberElements'][1]; */
//start updated code
$defaultSet = $localeData['NumberElements']['default'] ?: self::DEFAULT_NUMBER_SET;
$format = $localeData['NumberElements'][$defaultSet]['patterns']['currencyFormat']
?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['patterns']['currencyFormat']
?: explode(';', $localeData['NumberPatterns'][1])[0]);
$decimalSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['decimal']
?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['symbols']['decimal']
?: $localeData['NumberElements'][0]);
$groupSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['group']
?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['symbols']['group']
?: $localeData['NumberElements'][1]);
// end updated code
$pos = strpos($format, ';');
if ($pos !== false) {
그것이 당신을 위해 일하기를 바랍니다.