답변:
이벤트 catalog_product_type_prepare_full_options
와는 catalog_product_type_prepare_lite_options
친구입니다
<?xml version="1.0"?>
<config>
<modules>
<Fooman_Example>
<version>0.1.0</version>
</Fooman_Example>
</modules>
<global>
<models>
<fooman_example>
<class>Fooman_Example_Model</class>
</fooman_example>
</models>
<helpers>
<fooman_example>
<class>Fooman_Example_Helper</class>
</fooman_example>
</helpers>
</global>
<frontend>
<events>
<catalog_product_type_prepare_full_options>
<observers>
<fooman_example_catalog_product_type_prepare>
<class>Fooman_Example_Model_Observer</class>
<method>catalogProductTypePrepare</method>
</fooman_example_catalog_product_type_prepare>
</observers>
</catalog_product_type_prepare_full_options>
</events>
</frontend>
</config>
그런 다음 관찰자 클래스에서
<?php
class Fooman_Example_Model_Observer
{
public function catalogProductTypePrepare($observer)
{
$quote = Mage::getSingleton('checkout/session')->getQuote();
if($quote->getItemsCount()>=1){
Mage::throwException('You can only buy one product at a time.');
}
}
}
catalog_product_type_prepare_lite_options
나를위한 첫 번째입니다! 잘 했어.
컨트롤러를 다시 쓰는 대신 (아, 제발하지 마십시오), addProduct
한도를 설명 하는 방법을 다시 작성하십시오 .
class YourCompany_YourModule_Model_Cart extends Mage_Checkout_Model_Cart
{
public function addProduct($productInfo, $requestInfo=null){
if($this->getItemsCount()>1){
Mage::throwException(Mage::helper('checkout')->__('Cannot add item - cart quantity would exceed checkout the limit of %s per person.', 1));
}
parent::addProduct($productInfo, $requestInfo);
}
}
화려하게 만들려면 1
위 의 내용을 바꾸고 Mage::getStoreConfig('checkout/options/max_cart_qty)
모듈의 config.xml을 다음과 같이 설정하십시오.
<default>
<checkout>
<options>
<max_cart_qty>1</max_cart_qty>
</options>
</checkout>
</default>
이 값은 이제 XML 값을 통해 제어됩니다. 정말로, 정말로 공상 을 얻으려면 이것을 새 모듈의 system.xml에 추가하십시오.
<config>
<sections>
<checkout>
<groups>
<options>
<fields>
<max_cart_qty translate="label">
<label>Maximum Quantity Allowed in Cart (total qty)</label>
<frontend_type>text</frontend_type>
<sort_order>100</sort_order>
<show_in_default>1</show_in_default>
</max_cart_qty>
</fields>
</options>
</groups>
</checkout>
</sections>
</config>
<depends>Mage_Checkout</depends>
사전 정의 된 시스템 구성을 피기 백하려면 모듈에 a를 설정해야 합니다.
가능한 방법은 addAction of Mage_Checkout_CartController를 다시 작성하는 것입니다.
따라서 장바구니에 이미 제품이 있는지 확인하고 적절한 오류 메시지가 표시되는지 확인하십시오. 그렇지 않은 경우 완전한 추가 프로세스를 수행하는 상위 메소드를 호출 할 수 있습니다.
if (count($this->_getCart()->getProductIds()) > 0) {
$this->_goBack();
} else {
parent::addAction();
}
$this->_goBack();
작동하지 않습니다! if 조건에 들어가지만 제품이 여전히 추가되고 있습니다.
관찰자를 사용할 수 있다고 생각하며 다음 이벤트는 원하는 조건을 확인하는 데 유용합니다. (아마도 일부 이벤트는 사용중인 Magento 버전에 없을 수 있습니다).
checkout_cart_save_before
checkout_cart_product_add_after
checkout_cart_update_items_before
checkout_cart_update_items_after
checkout_cart_save_after
checkout_cart_product_add_after
이벤트를 시도 중입니다 . 문제는 제품이 장바구니에 추가되지 않도록하는 방법입니다.
어쩌면 왼쪽 필드 아이디어가 있지만 catalog_product_is_salable_after
이벤트 사용은 어떻습니까?
여기서 할 수있는 일은 제품이 카트에 있는지 또는 카트에 다른 제품이 있는지 확인하는 것입니다. 장바구니에 다른 제품이있는 경우 관찰자에게 전달 된 'salable'오브젝트의 'is_salable'속성이 false로 업데이트됩니다.
참고 이 테스트 만 생각되지 않았습니다. $product->isSaleable()
버튼을 표시하기 전에템플릿을 확인하지 않으면 실패합니다. 또한 사용자가 URL을 추측 할 수있는 경우 버튼 만 제거하고 실제로 추가 프로세스를 중지하지는 않습니다.
이 주제는 오래된 것이지만 비슷한 문제가 있습니다. 장바구니에 하나의 항목 만 있고 고객이 새 항목을 추가하면 이전 항목을 새 항목으로 교체하고 싶습니다. 그래서 addAction을 재정의합니다 ( 여기에 설명되어 있습니다 :
public function addAction(){
$items = $this->_getCart()->getItems();
foreach ($items as $item)
{
$itemId = $item->getItemId();
$this->_getCart()->removeItem($itemId);
}
parent::addAction();
}
checkout_cart_product_add_before
가, 예를 들어 markshust.com/2012/을 08 / 27 /…