[Решено] Подсчет суммы товаров которых нет в наличии (в корзине)

Тема в разделе "OpenCart", создана пользователем vivivor, 1 апр 2013.

  1. vivivor

    vivivor

    Регистрация:
    4 янв 2013
    Сообщения:
    186
    Симпатии:
    162
    Нужно подсчитать сумму всех товаров находящихся в корзине, которые имеют отметку *** (которых нет в наличии)

    в файлe catalog/controller/checkout/cart.php

    PHP:
    if (!$product['stock']) {
    if ((
    $this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
     
    $totalstock $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity']);
    } else {
     
    $totalstock false;
    }
    } else {
    $totalstock false;
    }
     
    // в конец массива добавил 'totalstock'=> $totalstock
    $this->data['products'][] = array(
    ...
    'totalstock'=> $totalstock
    );
    подсчитал сумму для каждого продукта которого нет в наличии

    Как теперь сложить их и записать в другую переменную?
     
  2. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    $totalstock=$this->currency->format($t.....
    ты считаешь их по-стоимости или по количеству?

    теория
    $totaloutstock - так как то понятнее

    $totaloutstock = 0;
    foreach ,где начинается перечисление продуктов {
    if (условие по которому решаешь добавлять ли что то в $totalstock) {
    $totaloutstock += ....;
    }
    }
    // в конец массива добавил 'totalstock'=> $totalstock
    это значит что ты в каждый продукт добавил эту сумму,а это как я понял не нужно, тебе же нужно посчитать (количество, сумму) ВСЕХ продуктов, которых нет на складе
    а значит записывать её надо в
    $this->data['totaloutstock'] = $totaloutstock;



    а когда будешь выводить , то условие
    if ($totaloutstock > 0) echo $totaloutstock;
     
    vivivor нравится это.
  3. vivivor

    vivivor

    Регистрация:
    4 янв 2013
    Сообщения:
    186
    Симпатии:
    162
    цена продукта умноженная на его количество в корзине
    --- добавлено: Apr 1, 2013 12:53 PM ---
    вот тут не совсем понятно как добавлять
    $totaloutstock += ....;
     
  4. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    раз по стоимости (format смущает, тестить надо), то
    $totaloutstock += $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'];
    тогда в вывод записывается
    $this->data['totaloutstock'] = $this->currency->format($totaloutstock);
    --- добавлено: Apr 1, 2013 1:07 PM ---
    а зачем это?
    типа, вы заказали товары, из них на нашем складе отсутствует товара на сумму ... ?
     
    vivivor нравится это.
  5. vivivor

    vivivor

    Регистрация:
    4 янв 2013
    Сообщения:
    186
    Симпатии:
    162
    это для предзаказов
    если в корзине отсутствующих товаров лежит меньше чем на 10 000 руб, то оформление заказа не доступно
     
  6. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    т.е будет сравнение строки с числом...
    наверно не стоит тогда делать $this->currency->format , лучше просто записать
    $this->data['totaloutstock'] = $totaloutstock;
     
    vivivor нравится это.
  7. vivivor

    vivivor

    Регистрация:
    4 янв 2013
    Сообщения:
    186
    Симпатии:
    162
    записал вот так

    внутри foreach ($products as $product) {
    PHP:
    if (!$product['stock']) {
      
    $totaloutstock += $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'];
    }
    $this->data['totaloutstock'] = $totaloutstock;
    после выхода из foreach ($products as $product) {
    PHP:
    if ($min_predzakaz $totaloutstock) {
      
    $this->simple->block_order true;
      
    $this->simple->error 'cart';
    }
    в корзине(cart.tpl) вывел <?php echo $totaloutstock; ?> для проверки

    Все работает, сумму выводит и условие срабатывает правильно, но вылазит 2 ошибки
    Undefined variable: totaloutstock
    к тем что внутри foreach ($products as $product) {
     
  8. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    не должно оно выводить правильно...

    $this->data['totaloutstock'] = $totaloutstock; - прописываешь после того как foreach закрылся
     
    vivivor нравится это.
  9. vivivor

    vivivor

    Регистрация:
    4 янв 2013
    Сообщения:
    186
    Симпатии:
    162
    тут ошибка осталась
    PHP:
    if (!$product['stock']) {
      
    $totaloutstock += $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'];
    }
     
  10. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    какая?
    Undefined variable: totaloutstock ?магия,а перед forech ты прописал что
    $totaloutstock = 0;
    ?
    --- добавлено: Apr 1, 2013 3:08 PM ---
    соответсвенно условие на вывод,
    if ($totaloutstock != 0 && $totaloutstock < $min_predzakaz) {...
    проверяем если $totaloutstock равен нулю, то впринципе в корзине нет товаров, отсутствующих на складе
    если не равен 0 и меньше минималки, то блокируем заказ
     
    vivivor нравится это.