Strona główna forum Wsparcie Konfiguracja Domyślna ilość kupowanego produktu mniejsza niż minimalna

Domyślna ilość kupowanego produktu mniejsza niż minimalna

Wszystko o konfiguracji, możliwościach i ustawieniach...


Posty: 12
Lokalizacja: Wrocław
Gadu-Gadu: 0

Witam

dla produktu A w 'Magazynie' ustawiam 'Minimalną ilość dozwoloną w koszyku' na 6.
Jeżeli klient na widoku ogólnym kliknie 'Dodaj do koszyka' przy tym produkcie, to pojawia się informacja, że 'Minimalne zamówienie to 6 sztuk.' i zamówienie nie jest kontynuowane. W logach widać, że do sprawdzenia nie wziął minimalnej ilości (czyli 6), ale 1.

Jeżeli klient wejdzie na stronę produktu A, to w polu 'Ilość' pojawia się 6, czyli tak jak się spodziewałem.

Wychodzi na to, że 'default quantity' używane przy kupowaniu z widoku ogólnego, to nie jest 'default quantity', które jest używane do wypełnienia pola 'Ilość' na stronie konkretnego produktu.

Czy ktoś z was zaobserwował podobny problem ?
Jeżeli tak, to jak sobie z tym radziliście ?

pozdrawiam

Domyślna ilość kupowanego produktu mniejsza niż minimalna

PostTeraz jest 29 mar 2024, o 10:22
Google

Posty: 427
Lokalizacja: Internet


Posty: 12
Lokalizacja: Wrocław
Gadu-Gadu: 0

Przy dodawaniu produktu do koszyka z widoku ogólnego jest wywoływana metoda addProduct z klasy core\Mage\Checkout\Model\Cart

/**
   * Add product to shopping cart (quote)
   *
   * @param   int $productId
   * @param   int $qty
   * @return  Mage_Checkout_Model_Cart
   */
public function addProduct($product, $info=null) {
  $product = $this->_getProduct($product);
  $request = $this->_getProductRequest($info);
  ...
}

Problem w tym, że $info w tym przypadku jest puste, a w metodzie getProductRequest w przypadku niezdefiniowanego 'quantity', ustawia się je na 1.
/**
     * Get request for product add to cart procedure
     *
     * @param   mixed $requestInfo
     * @return  Varien_Object
     */
    protected function _getProductRequest($requestInfo)
    {
        ...
        if (!$request->hasQty()) {
            $request->setQty(1);
        }
        ...
    }


W mojej opinii powinno być tam raczej robione coś takiego

protected function _getProductRequest($requestInfo, $minSaleQty)
    {
        ...
        if (!$request->hasQty()) {
            $request->setQty($minSaleQty);
        }
        ...


gdzie $minSaleQty powinno mieć taką wartość, jaką zwraca metoda getMinSaleQty() z klasy core\Mage\CatalogInventory\Model\Stock\Item.php
/**
   * Retrieve Minimum Qty Allowed in Shopping Cart data wraper
   *
   * @return int
   */
    public function getMinSaleQty()
    {
        if ($this->getUseConfigMinSaleQty()) {
             return (float) Mage::getStoreConfig(self::XML_PATH_MIN_SALE_QTY);
        }
        return $this->getData('min_sale_qty');
    }


Problem w tym, że nie wiem jak się do tego dobrać. Jakieś sugestie ?


Posty: 12
Lokalizacja: Wrocław
Gadu-Gadu: 0

Ok, to już było proste. Poniżej na czerwono dodane, a na zielono zmienione linijki w Cart.php.

protected function _getProductRequest($requestInfo, $minSaleQty)
{
if ($requestInfo instanceof Varien_Object) {
$request = $requestInfo;
}
elseif (is_numeric($requestInfo)) {
$request = new Varien_Object();
$request->setQty($requestInfo);
}
else {
$request = new Varien_Object($requestInfo);
}

if (!$request->hasQty()) {
$request->setQty($minSaleQty);
}
return $request;
}



public function addProduct($product, $info=null)
{
$product = $this->_getProduct($product);

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
$request = $this->_getProductRequest($info, $stockItem->getMinSaleQty());

if ($product->getId()) {

Mage::log('Cart addProduct');
$result = $this->getQuote()->addProduct($product, $request);

/**
* String we can get if prepare process has error
*/
if (is_string($result)) {

$this->getCheckoutSession()->setRedirectUrl($product->getProductUrl());
if ($this->getCheckoutSession()->getUseNotice() === null) {
$this->getCheckoutSession()->setUseNotice(true);
}
Mage::throwException($result);
}
}
else {
Mage::throwException(Mage::helper('checkout')->__('Product does not exist'));
}

Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item'=>$result, 'product'=>$product));
$this->getCheckoutSession()->setLastAddedProductId($product->getId());
return $this;
}


W wolnej chwili zapytam Varien czy to nie jest bug.

pozdrawiam



Posty: 311
Gadu-Gadu: 3279331

a ja mam pytanko... co trzeba zmienic i w jakim pliku aby po wejsciu na karte produktu w polu ilosci nie bylo puste pole tylko "1". Sprzedaje towar ktory schodzi mi w znacznej wiekszosci po jednej sztuce, wiec przydaloby mi sie takie ulatwienie dla klientow:)

Pozdrawiam


Posty: 104
Gadu-Gadu: 0

w template/catalog/product/view/addtocart.phtml
u mnie to wygląda tak:

<input name="qty" type="text" class="input-text qty" id="qty" maxlength="12" value="<?php echo ($this->getMinimalQty($_product) || 1) ?>" /></span>


chodzi o to || 1

Jak masz produkty grupowe, to musisz dodać to w jeszcze jednym miejscu, ale nie pamiętam gdzie.

jemoon Avatar użytkownika
Administrator

Posty: 529
Lokalizacja: Gdańsk
Gadu-Gadu: 0

witam,
W produktach grupowych to trochę bezsensu opcja. Łączysz np 10 produktów i jak klient chce tylko jedną wersję produktu to musi 9 razy wpisać zero w polu ilość.


Posty: 104
Gadu-Gadu: 0

No, to kwestia użycia tych produktów. Do różnych wersji używałbym raczej dodatkowych opcji (custom options).
Jak kto woli. :)


Powrót do Konfiguracja



cron