편집 :
Magento Connect를 통해 달성하고자하는 작업을 정확하게 수행하는 확장 프로그램을 만들었습니다. 링크는 http://www.magentocommerce.com/magento-connect/catalog/product/view/id/14603입니다. 다운로드하거나 아래 단계를 수행 할 수 있습니다. 확장 소스 코드에 대한 링크는 답변의 맨 아래에 있습니다.
- 새로운 제품을 만들기가 이용 약관
- 에 대한 책임 블록을 다시 작성 표시 (여부)에 대한 책임을 속성 : 편집의 끝
이러한 단계는 만들 필요가 있습니다 해당 이용 약관 표시 체크 아웃 페이지의
- 모든 책임자
난 당신이 당신이 실제로 필요한 것보다 더 복잡한 무언가를 창조하고 싶지 않은 가정 : quired 이용 약관 체크 박스는 사용자
가정 및 목표로 클릭합니다. 장바구니에 이용 약관이 필요한 제품이 하나 이상 있거나 NONE이있는 제품이 하나 이상있는 경우 사용할 수있는 모든 이용 약관이 표시되는 확장 프로그램을 만드는 방법을 설명합니다. 카트에 제품이없는 경우 이것을 요구할 것이다.
나는 또한 일을 올바르게 만들고 핵심 파일 만 남기고 싶다고 가정합니다. 물론 핵심 기능을 수정하는 것이 더 쉬울 수도 있지만이 방법은 앞으로 문제가 발생할 수 있습니다. 이것이 우리가 새로운 모듈을 만드는 이유입니다.
다음은이 기능이 둘 이상인 경우 모든 상점에서이 기능이 필요하다고 가정합니다.
그리고 마지막으로 Magento Community Edition 1.7에서 내 접근 방식을 테스트했습니다. 다른 버전에서도 작동한다는 보장은 없지만 1.6 및 1.5에서 작동해야한다고 생각합니다. 이러한 버전 중 하나를 사용하면 시도 할 수 있습니다. 이전 버전에서 작동하는지 확신 할 수 없습니다.
새로운 속성을 만들기 :
그것은 질문의 범위를 벗어난, 그러나이 될 최고의 경우 : 우리가하지 않기 때문에
- 속성은 예/아니오 옵션이었다 속성이 시스템 속성이었다
- 더 아무것도 필요, 그래서 우리는 모든 속성 그룹에 추가 할 필요가 없습니다
의 물론, 필요에 따라 다른 방법으로 속성을 만들 수도 있습니다.
내 경우 제품 속성에 코드 conditional_agreements
이 지정되었습니다. 이 코드는 아래의 코드 스 니펫에서 사용됩니다. 우리가 다시 작성해야하는 블록 Mage_Checkout_Block_Agreements
인 블록
를 다시 쓰기
. 그것은 하나의 기능 - getAgreements()
을 가지고 있습니다.
우선 가장 먼저해야 할 일은 다시 작성하는 것입니다. 내 패키지는 bartoszgorski
라고 내 모듈은 너무 config.xml
내 코드는, conditionalagreements
입니다 :
파일 자체에서 <config>
<!-- other code -->
<global>
<!-- other code -->
<blocks>
<checkout>
<rewrite>
<agreements>Bartoszgorski_Conditionalagreements_Block_Agreements</agreements>
</rewrite>
</checkout>
</blocks>
<!-- other code -->
</global>
</config>
, 난 그냥 도우미를 사용 (나중에 설명) 우리가 어떤 용어를 표시 할 경우, 확인하고 정황. 내 코드는 다음과 같습니다.
표시 할 항목이 있으면 표시 할 수 있습니다. 그렇지 않으면 function
은 빈 계약 array
을 반환합니다.
도우미를 다시 쓰기 :
을 우리가 다시 작성해야하는 helper
는 Mage_Checkout_Helper_Data
입니다. helper
을 다시 작성하지 않으면 Magento는 이용 약관을 표시하지 않지만 사용자는 여전히 확인란을 선택해야합니다. 물론 불가능합니다. 그래서, config.xml에 내 코드는 다음 helper
에서
<config>
<!-- other code -->
<global>
<!-- other code -->
<helpers>
<conditionalagreements>
<class>Bartoszgorski_Conditionalagreements_Helper</class>
</conditionalagreements>
<checkout>
<rewrite>
<data>Bartoszgorski_Conditionalagreements_Helper_Data</data>
</rewrite>
</checkout>
</helpers>
<!-- other code -->
</global>
</config>
에 동의해야 할 모든 조건을 얻기위한 책임이 기능 getRequiredAgreementIds()
있다. 우리는 똑같은 작업을 원하지만 카트에 적어도 하나의 제품이 필요한 경우에만 가능합니다. 그 이유는 그러한 제품을 검사하고 getRequiredAgreementIds()
(그리고 앞에서 설명한대로 block
)에서 사용하는 다른 도우미 함수 (checkIfQuoteRequiresAgreements()
)를 만드는 것이 좋습니다.
public function getRequiredAgreementIds()
{
if($this->checkIfQuoteRequiresAgreements() == true) {
if (is_null($this->_agreements)) {
if (!Mage::getStoreConfigFlag('checkout/options/enable_agreements')) {
$this->_agreements = array();
} else {
$this->_agreements = Mage::getModel('checkout/agreement')->getCollection()
->addStoreFilter(Mage::app()->getStore()->getId())
->addFieldToFilter('is_active', 1)
->getAllIds();
}
}
return $this->_agreements;
} else {
return array();
}
}
public function checkIfQuoteRequiresAgreements() {
$showAgreements = false;
$quote = Mage::getSingleton('checkout/session')->getQuote();
foreach ($quote->getAllVisibleItems() as $quoteItem) {
$product = Mage::getModel('catalog/product')->load($quoteItem->getProductId());
if($product->getConditionalAgreements() == 1) {
$showAgreements = true;
break;
}
}
return $showAgreements;
}
을 그리고 그것 뿐이다 : 그래서, 다시 작성 helper
그 기능이 있어야합니다. 이렇게하고 나면, 당신이 원하는 것을 가지고 있어야합니다. 이용 약관에 둘 이상의 상품이있는 경우 모든 상품을 표시하거나 표시하지 않을 수 있습니다. 물론 내 코드 단편을 기반으로 더 많은 것을 개발할 수 있습니다. 이는 귀하에게 달려 있습니다.
https://github.com/bgorski/conditionalagreements
당신은 내가 거기에 무슨 짓을 미리하거나 다운로드하여 귀하의 웹 사이트에 사용할 수 있습니다 여기에
내 완벽하게 작동하는 모듈입니다.
희망이 있습니다. 모든 피드백이 가장 높이 평가됩니다.
해당 이용 약관을 장바구니 페이지, 결제 페이지 또는 다른 곳에 표시 하시겠습니까? –
은 $ this-> getData ('product_id')가 전혀 설정되어 있지 않습니까? 즉, 그냥 에코를 표시하면 무엇이 표시됩니까? –
여전히 답을 대답으로 선택하지 않았습니다. 그들 중 누구도 만족하지 못합니까? –