За последние 24 часа нас посетили 8822 программиста и 724 робота. Сейчас ищет 241 программист ...

Help: Фильтр товара по дням доставки

Тема в разделе "PHP и базы данных", создана пользователем Wizardproff, 25 июн 2018.

  1. Wizardproff

    Wizardproff Новичок

    С нами с:
    25 июн 2018
    Сообщения:
    2
    Симпатии:
    0
    В массивах новичок и есть много, что еще надо изучить.
    Помогите разобраться с проблемой:

    История:
    Есть несколько поставщиков от них дергаем товары онлайн по API и создаем массив данных, артикул, цена и т.д.
    Есть настройки в MySQL по поставщикам и там в таблице w_wbs у поставщика есть поля: limit_delivery_active (активны ограничения - параметр 0/1) и limit_delivery_max(лимит в днях поставки).
    К слову добавлю ощущение, что limit_delivery_max - задумали как дни на ограничение, а по факту это количество позиций..

    Далее есть файл на ограничения/лимиты.
    wbs_limits.model.php - в нем:

    PHP:
    1. <?php
    2.  
    3. class Wbs_limitsModel extends Orm
    4. {
    5.    public static function set_limits( $wbsData = array(), $data = array() )
    6.    {
    7.      $model = new Wbs_limitsModel();
    8.  
    9.      // ставим лимиты по "сроку поставки"  - минимальные и от установ. кол-ва
    10.      // ставим лимиты по "цене"  - минимальные и от установ. кол-ва
    11.  
    12.      $limits = array();
    13.      $limits ['price'] = ($wbsData['limit_price_active'])?$wbsData['limit_price_max']:false;
    14.      $limits ['delivery'] = ($wbsData['limit_delivery_active'])?$wbsData['limit_delivery_max']:false;
    15.      if ($limits['price'] || $limits['delivery'])
    16.        $data = $model->data($data, $limits);
    17.  
    18.    
    19.      return $data;
    20.    }
    21.    // конец
    22.  
    23.    private function data( $data = array(), $param_limits = array() )
    24.    {
    25.      $model = new Wbs_limitsModel();
    26.      $array = array();
    27.  
    28.      // !!! ПОДГОТОВКА сортируем по бренду и артикулу
    29.      // для того чтоб выделить группы для лимитов
    30.    
    31.    if (isset($data) && count($data)>0)
    32.      {
    33.        foreach ($data as $row)
    34.        {
    35.            $row = (array)$row;
    36.          // если сроки имеет множественное значение типа 2-5 дня, берем максимальный
    37.          $convert_delivery = $row['DELIVERY'];
    38.          if (strpos($convert_delivery, "-")){
    39.            list( , $convert_delivery) = explode("-", $convert_delivery);
    40.          }
    41.          elseif (strpos($convert_delivery, "/")){
    42.            list( , $convert_delivery) = explode("/", $convert_delivery);
    43.          }
    44.  
    45.          $array [FuncModel::stringfilter($row['BRAND_NAME']).FuncModel::stringfilter($row['ARTICLE'])] []= array_merge( (array)$row, array('DELIVERY' => (int)$convert_delivery) );
    46.        }
    47.      }
    48.      // сброс
    49.      unset($data);
    50.  
    51.  
    52.      // !!!! ОБРАБОТКА
    53.      $data = array();
    54.      // лимитируем выдачу группы бренда
    55.      if (count($array)>0)
    56.      {
    57.        ksort($array);
    58.        foreach ($array as $key => $row)
    59.        {
    60.          // группа бренда и артикула
    61.          $get_group_of_braart = $array[$key];
    62.  
    63.          // цена - лимиты
    64.          if (isset($param_limits['price']) && $param_limits['price']){
    65.            // сортируем по цене
    66.            $get_group_of_braart = $model->array_usort_price( $get_group_of_braart );
    67.  
    68.            // проверяем - цены
    69.            $i = 0;
    70.            foreach ($get_group_of_braart as $id => $list) { $i++;
    71.              if ( $param_limits['price'] >= $i ){
    72.                // возврат
    73.                $data []= $list;
    74.                // удаляем что уже привязали
    75.                unset($get_group_of_braart[$id]);
    76.              }
    77.              else
    78.                break;
    79.            }
    80.          }
    81.  
    82.          // поставка срок - лимиты
    83.          if (isset($param_limits['delivery']) && $param_limits['delivery'])
    84.          {
    85.            if (count($get_group_of_braart)>0) {
    86.              // сортируем по поставке
    87.              $get_group_of_braart = $model->array_usort_delivery( $get_group_of_braart );
    88.              // проверяем - поставка
    89.              $i = 0;
    90.              $day = $wbsData['limit_delivery_max']; // переменная для отсекания по дням поставки
    91.              foreach ($get_group_of_braart as $list) { $i++;
    92.                if ( $param_limits['delivery'] >= $i)
    93.                  $data []= $list;
    94.                else
    95.                break;
    96.              }
    97.            }
    98.          }
    99.          // сброс
    100.          unset($array[$key], $get_group_of_braart);
    101.        }
    102.      }
    103.      unset($array);
    104.  
    105.      return $data;
    106.    }
    107.    // конец
    108.  
    109.    // сортировка
    110.    function array_usort_delivery($array)
    111.    {
    112.      usort($array, function($lft, $rgt) {
    113.  
    114.        if ($lft['DELIVERY'] > $rgt['DELIVERY'])
    115.          return 1;
    116.  
    117.        if ($lft['DELIVERY'] < $rgt['DELIVERY'])
    118.          return -1;
    119.  
    120.        if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] > $rgt['PRICE'])
    121.          return 1;
    122.  
    123.        if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] < $rgt['PRICE'])
    124.          return -1;
    125.  
    126.        return 0;
    127.      });
    128.  
    129.      return $array;
    130.    }
    131.  
    132.    function array_usort_price($array)
    133.    {
    134.      usort($array, function($lft, $rgt) {
    135.  
    136.        if ($lft['PRICE'] > $rgt['PRICE'])
    137.          return 1;
    138.  
    139.        if ($lft['PRICE'] < $rgt['PRICE'])
    140.          return -1;
    141.  
    142.        return 0;
    143.      });
    144.  
    145.      return $array;
    146.    }
    147.    // конец
    148. }
    149.  
    150. ?>



    Вопрос главный как сделать, что бы фильтр ограничения по дням доставки работал как фильтр ОГРАНИЧЕНИЯ по дням доставки. Беря данные в ячейках от текущего поставщика, которого он обрабатывает и режет товар, который по дням поставки больше.
     
    #1 Wizardproff, 25 июн 2018
    Последнее редактирование модератором: 25 июн 2018
  2. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    225
    Симпатии:
    17
    в 120-й строке лишний код, больше и меньше отсечены выше, следовательно проверка не нужна
     
  3. Wizardproff

    Wizardproff Новичок

    С нами с:
    25 июн 2018
    Сообщения:
    2
    Симпатии:
    0
    Благодарю за ответ! Посмотрим откорректируем.
    Все бы хорошо, только не решает вообще проблемы отбора по сроку поставки к моему сожалению.....((