Вход • Регистрация

Странная ошибка

  • 24 октября 2014 г.
  • Доброе время суток.
    У меня возникли в проекте задача. Не сохранялся скидка которая была привязана к определенной категории. При событии добавить\сохранить товар.
    Много времени потратил но все таки обнаружил.
    В фале modules/shop/inc/shop.inc.price.php строка по 300
    Код

    foreach ($discounts as &$d)
    {
    if($d["person"] && ! DB::query_result("SELECT id FROM {shop_discount_person} WHERE discount_id=%d LIMIT 1", $d["id"]))
    {
    continue;
    }
    if($d["date_finish"] && $d["date_finish"] < time())
    {
    continue;
    }
    $d["objects"] = DB::query_fetch_all("SELECT * FROM {shop_discount_object} WHERE discount_id=%d", $d["id"]);
    }

    Если есть два или более скидок то этот код не корректно работает. Это можно проверить следующим образом:
    Код

    print_r($discounts);
    foreach ($discounts as $i => $d)
    {
    echo ' i='.$i.' name='.$d['name'];
    }
    exit();

    Это выводит след: array(0=>array('id'=>1,'name'=>'Скидка 1'), 1=>array('id'=>1,'name'=>'Скидка 2') i=0 name='Скидка 1' i=0 name='Скидка 1'
    При событии сохранение товара.
    • 24 октября 2014 г.
    • Решается следующим образом. Переход на старый способ.
      Код

      foreach ($discounts as $id=>$d)
      {
      if($d["person"] && ! DB::query_result("SELECT id FROM {shop_discount_person} WHERE discount_id=%d LIMIT 1", $d["id"]))
      {
      continue;
      }
      if($d["date_finish"] && $d["date_finish"] < time())
      {
      continue;
      }
      $discounts[$id]["objects"] = DB::query_fetch_all("SELECT * FROM {shop_discount_object} WHERE discount_id=%d", $d["id"]);
      }
      • 27 октября 2014 г.
      • А вы точно проверили?
        Или я спать хочу, или не знаю что, но чет разницы ощутимой не вижу...
        • 27 октября 2014 г. , редакция: 27 октября 2014 г.
        • точно, Степан! : )

          Данияр немного ошибся в определении ошибки. речь не об основной категории а о дополнительной категории.


          если у товара была основная категория, и к товару привязали доп.категорию, то скидка, привязанная к ДОП.категории, у товара не активизировалась

          а активизировалась она только после "зайти-сохранить" саму скидку

          проверьте сами
          • 27 октября 2014 г.
          • не, я то верю, просто судя по коду - как переменная по ссылке повлияла на результат - не догоню)
  • 18 декабря 2014 г.
  • перед циклом на строке 330 надо выполнить удаление ссылочной переменной

    unset($d);
    foreach ($discounts as $d) { ... }

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум