지난 주, 저는 Magento로 작업하며 다양한 스토어 뷰를 설정하려고 했습니다. 기본적으로, 클라이언트는 각 국가에 대해 다른 기본 URL을 가진 개별 스토어 뷰를 설정해야 합니다. 예를 들어, 기본 스토어의 기본 URL이 www.domain.com이고, 미국을 위한 스토어 뷰가 하나 있다면, 그 기본 URL은 www.domain.com/us/가 됩니다.
모든 것이 잘 진행되고 있었지만, 체크아웃 과정에서 문제가 발생했습니다. 미국 스토어로 가서 장바구니에 몇 가지 제품을 추가한 후 체크아웃을 시도하면, 청구 정보를 입력하기 전이나 후에 페이지가 장바구니 페이지로 다시 리디렉션되는 문제가 발생할 수 있습니다. 다시 체크아웃을 시도하면 같은 과정이 반복됩니다. 사실, Magento는 청구 정보 요청을 Ajax를 사용하여 서버에 전송하며, 때때로 오류를 볼 수 없습니다. 그러나 예외 로그 파일이나 시스템 로그에서 오류를 확인할 수 있습니다. 불행히도, 제가 문제를 테스트하는 동안 예외 로그나 시스템 로그에서 오류 메시지를 볼 수 없었기 때문에, 청구 정보 요청을 위해 서버와 통신하는 Prototype Ajax 기능을 통해 디버깅을 진행했습니다.
opcheckout.js를 열고 아래 코드를 찾으세요:
var request = new Ajax.Request(
this.saveUrl,
{
method: 'post',
onComplete: this.onComplete,
onSuccess: this.onSave,
onFailure: checkout.ajaxFailure.bind(checkout),
parameters: Form.serialize(this.form)
}
);
다음 변경 사항을 적용하여 이 경고를 실패 메시지로 만드세요.
var request = new Ajax.Request(
this.saveUrl,
{
method: 'post',
onComplete: this.onComplete,
onSuccess: this.onSave,
onFailure: function(transport){alert(transport.responseText)},
parameters: Form.serialize(this.form)
}
);
따라서 오류가 발생하면 다음과 같은 경고 메시지가 표시됩니다: “‘$file’에 대한 Royal Mail 가격 데이터 csv를 로드할 수 없습니다. app/ 디렉토리가 포함 경로에 있는지 확인하십시오.”
사실, 제가 발견한 문제(제 경우에는 여러분에게는 다른 문제일 수 있습니다)는 Meanbee Royal Mail 확장 프로그램이 배송 가격을 app/code/community/Meanbee/Royalmail/data 폴더 내의 CSV 파일에 저장한다는 것입니다. 다른 스토어 뷰에서 체크아웃을 시도할 때, 기본 URL이 다를 수 있으며(여기서는 www.domain.com/us/와 같은 형태였습니다), Meanbee의 _loadCsv($file) 함수는 Abstract.php 클래스에서 항상 기본 URL 폴더 내의 파일을 찾습니다. 따라서 잘못된 파일 경로 요청 오류가 발생하게 됩니다. _loadCsv 함수에서 다음과 같은 변경을 하면 이 오류를 수정할 수 있습니다.
$filename = “/app/code/community/Meanbee/Royalmail/data/{$file}.csv”;
//위의 줄을 다음으로 교체하십시오.
$filename = Mage::getBaseDir(‘app’) . “/code/community/Meanbee/Royalmail/data/{$file}.csv”;
//항상 기본 디렉토리에서 찾습니다.
이것이 100% 완벽하게 작동할 것이라고 보장할 수는 없지만, 이것이 제 문제를 해결했습니다.