Перейти к содержимому


Фотография
- - - - -

Вывод правильного сообщения

корзина

Лучший Ответ pholex315 , 10 April 2015 - 10:46

Сам все решил.

 

Добавил функцию:

 /**
     * Check is good availble for order
     * @param $hash
     * @return bool
     */
    public function isAvail($hash)
    {
        $data = $this->getIndexData();
        $mainHash = $this->_getHash();

        if ($mainHash !== $hash)
        {
            foreach ($data as $variant)
            {
                if ($hash === $variant['hash'])
                {

                    if ($variant['balance'] == 0)
                    {
                        return true;
                    }

                    if ($variant['balance'] == -1)
                    {
                        return false;
                    }
                    return true;
                }
            }
        }

        $mainBalance = $data[$this->_getHash()]['balance'];
        if ($mainBalance == 0)
        {
            return true;
        }

        if ($mainBalance == -1)
        {
            return false;
        }
        return true;
    }

и изменил немного ajaxAddToCart:

 /**
     * Ajax add to cart method
     */
    public function ajaxAddToCart($quantity = 1, $params = array(), $hash = false)
    {
        $jbajax = $this->app->jbajax;

        if (!$hash)
            $hash = $this->_getHash(array(
                'param1' => $params[1],
                'param2' => $params[2],
                'param3' => $params[3],
                'description' => isset($params['desc']) ? $params['desc'] : '',
                    ));
     //   echo $hash;

        $quantity += $this->app->jbcart->getQuantityByHash($hash);

        if ($this->isInStock($hash, $quantity))
        {

            $price = $this->_getPriceByHash($hash);
            $item = $this->getItem();
            $textParams = $this->_getFormatedParams($params);
            $variations = $this->getIndexData();

            if (isset($variations[$hash]) || (int) $this->config->get('adv_all_exists_show', 1))
            {

                $this->app->jbcart->addItem($item, array(
                    'hash' => $hash,
                    'sku' => $price['sku'],
                    'itemId' => $item->id,
                    'quantity' => (int) $quantity,
                    'price' => isset($price['total']) ? $price['total'] : '',
                    'currency' => $this->_getDefaultCurrency(),
                    'priceDesc' => isset($price['params']['description']) ? $price['params']['description'] : '',
                    'priceParams' => $textParams,
                        ), true);

                $this->app->jbajax->send(array(), true);
            }
            else
            {
                $this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NOT_FOUND')), false);
            }
        }
        else
//проверяем, какое сообщение выводить
        {
			if ($this->isAvail($hash))
			{
				$this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NO_QUANTITY')), false);
			}
			else
			{
				$this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_DILER')), false);
			}
		
		
        }

        $jbajax->send(array('added' => 0, 'message' => JText::_('JBZOO_JBPRICE_NOT_AVAILABLE_MESSAGE')));
    }
Перейти к сообщению


  • Закрытая тема Тема закрыта
В теме одно сообщение

#1 pholex315

pholex315

Отправлено 09 April 2015 - 08:36

У меня на тестовом сайте должно быть несколько вариантов при добавлении товара в корзину:
 
1. Товар доступен к заказу (цена > 0, остаток > 0) —> этот вариант работает верно.
 
2. Товар закончился (цена > 0, остаток = 0) —> этот вариант работает не совсем верно (строки 1 и 2), товар в корзину не добавляется (верно), сообщение выводится не то, что нужно (неверно).
 
3. Товар доступен к заказу только через дилера (цена > 0, остаток = -1) —> этот вариант работает верно.
 
Сообщения выводит функция ajaxAddToCart(). isInStock() возвращает false.
 
Подскажите, что нужно прикрутить, чтоб при нулевом остатке выводило одно сообщение, а при остатке в -1 — другое? 
 
Ногами не бейте, пожалуйста, да, я очень слабо понимаю PHP :-(
 
Так как на форуме уже сталкивался с ситуацией, когда люди указывают номер строк, но они почему-то у собеседников очень сильно отличаются, на всякий случай прикладываю файл jbpriceadvance.php целиком.

 

 public function ajaxAddToCart($quantity = 1, $params = array(), $hash = false)
    {
        $jbajax = $this->app->jbajax;

        if (!$hash)
            $hash = $this->_getHash(array(
                'param1' => $params[1], 'param2' => $params[2], 'param3' => $params[3],
                'description' => isset($params['desc']) ? $params['desc'] : '',
                    ));
     //   echo $hash;

        $quantity += $this->app->jbcart->getQuantityByHash($hash);

        if ($this->isInStock($hash, $quantity))
        {
            $price = $this->_getPriceByHash($hash);
            $item = $this->getItem();
            $textParams = $this->_getFormatedParams($params);
            $variations = $this->getIndexData();

            if (isset($variations[$hash]) || (int) $this->config->get('adv_all_exists_show', 1))
            {

                $this->app->jbcart->addItem($item, array(
                    'hash' => $hash,
                    'sku' => $price['sku'],
                    'itemId' => $item->id,
                    'quantity' => (int) $quantity,
                    'price' => isset($price['total']) ? $price['total'] : '',
                    'currency' => $this->_getDefaultCurrency(),
                    'priceDesc' => isset($price['params']['description']) ? $price['params']['description'] : '',
                    'priceParams' => $textParams,
                        ), true);

                $this->app->jbajax->send(array(), true);
            }
            else
            {
                $this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NOT_FOUND')), false);
            }
        }
        else
        {
            $this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NO_QUANTITY')), false);
        }

        $jbajax->send(array('added' => 0, 'message' => JText::_('JBZOO_JBPRICE_NOT_AVAILABLE_MESSAGE')));
    }

Прикрепленные файлы


  • 0

#2 pholex315

pholex315

Отправлено 10 April 2015 - 10:46   Лучший Ответ

Сам все решил.

 

Добавил функцию:

 /**
     * Check is good availble for order
     * @param $hash
     * @return bool
     */
    public function isAvail($hash)
    {
        $data = $this->getIndexData();
        $mainHash = $this->_getHash();

        if ($mainHash !== $hash)
        {
            foreach ($data as $variant)
            {
                if ($hash === $variant['hash'])
                {

                    if ($variant['balance'] == 0)
                    {
                        return true;
                    }

                    if ($variant['balance'] == -1)
                    {
                        return false;
                    }
                    return true;
                }
            }
        }

        $mainBalance = $data[$this->_getHash()]['balance'];
        if ($mainBalance == 0)
        {
            return true;
        }

        if ($mainBalance == -1)
        {
            return false;
        }
        return true;
    }

и изменил немного ajaxAddToCart:

 /**
     * Ajax add to cart method
     */
    public function ajaxAddToCart($quantity = 1, $params = array(), $hash = false)
    {
        $jbajax = $this->app->jbajax;

        if (!$hash)
            $hash = $this->_getHash(array(
                'param1' => $params[1],
                'param2' => $params[2],
                'param3' => $params[3],
                'description' => isset($params['desc']) ? $params['desc'] : '',
                    ));
     //   echo $hash;

        $quantity += $this->app->jbcart->getQuantityByHash($hash);

        if ($this->isInStock($hash, $quantity))
        {

            $price = $this->_getPriceByHash($hash);
            $item = $this->getItem();
            $textParams = $this->_getFormatedParams($params);
            $variations = $this->getIndexData();

            if (isset($variations[$hash]) || (int) $this->config->get('adv_all_exists_show', 1))
            {

                $this->app->jbcart->addItem($item, array(
                    'hash' => $hash,
                    'sku' => $price['sku'],
                    'itemId' => $item->id,
                    'quantity' => (int) $quantity,
                    'price' => isset($price['total']) ? $price['total'] : '',
                    'currency' => $this->_getDefaultCurrency(),
                    'priceDesc' => isset($price['params']['description']) ? $price['params']['description'] : '',
                    'priceParams' => $textParams,
                        ), true);

                $this->app->jbajax->send(array(), true);
            }
            else
            {
                $this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NOT_FOUND')), false);
            }
        }
        else
//проверяем, какое сообщение выводить
        {
			if ($this->isAvail($hash))
			{
				$this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_ITEM_NO_QUANTITY')), false);
			}
			else
			{
				$this->app->jbajax->send(array('message' => JText::_('JBZOO_JBPRICE_DILER')), false);
			}
		
		
        }

        $jbajax->send(array('added' => 0, 'message' => JText::_('JBZOO_JBPRICE_NOT_AVAILABLE_MESSAGE')));
    }

  • 1





Темы с аналогичным тегами корзина

Click to return to top of page in style!