Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

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

-------------------------------------------начало файла-----------------------------------------------------------------------

<?php

class Wbs_limitsModel extends Orm
{
    public static function set_limits( $wbsData = array(), $data = array() )
    {
        $model = new Wbs_limitsModel();

        // ставим лимиты по "сроку поставки"  - минимальные и от установ. кол-ва
        // ставим лимиты по "цене"  - минимальные и от установ. кол-ва
        // на будущее
        // ставим лимиты по "эффективности поставщика"  - минимальные и от установ. кол-ва

        $limits = array();
        $limits ['price'] = ($wbsData['limit_price_active'])?$wbsData['limit_price_max']:false;
        $limits ['delivery'] = ($wbsData['limit_delivery_active'])?$wbsData['limit_delivery_max']:false;
        if ($limits['price'] || $limits['delivery'])
            $data = $model->data($data, $limits);


        
        return $data;
    }
    // конец

    private function data( $data = array(), $param_limits = array() )
    {
        $model = new Wbs_limitsModel();
        $array = array();

        // !!!! ПОДГОТОВКА
        // сортируем по бренду и артикулу
        // для того чтоб выделить группы для лимитов
        if (isset($data) && count($data)>0)
        {
            foreach ($data as $row)
            {
                $row = (array)$row;
                // если сроки имеет множественное значение типа 2-5 дня, берем максимальный
                $convert_delivery = $row['DELIVERY'];
                if (strpos($convert_delivery, "-")){
                    list( , $convert_delivery) = explode("-", $convert_delivery);
                }
                elseif (strpos($convert_delivery, "/")){
                    list( , $convert_delivery) = explode("/", $convert_delivery);
                }

                $array [FuncModel::stringfilter($row['BRAND_NAME']).FuncModel::stringfilter($row['ARTICLE'])] []= array_merge( (array)$row, array('DELIVERY' => (int)$convert_delivery) );
            }
        }
        // сброс
        unset($data);


        // !!!! ОБРАБОТКА
        $data = array();
        // лимитируем выдачу группы бренда
        if (count($array)>0)
        {
            ksort($array);
            foreach ($array as $key => $row)
            {
                // группа бренда и артикула
                $get_group_of_braart = $array[$key];

                // цена - лимиты
                if (isset($param_limits['price']) && $param_limits['price']){
                    // сортируем по цене
                    $get_group_of_braart = $model->array_usort_price( $get_group_of_braart );

                    // проверяем - цены
                    $i = 0;
                    foreach ($get_group_of_braart as $id => $list) { $i++;
                        if ( $param_limits['price'] >= $i ){
                            // возврат
                            $data []= $list;
                            // удаляем что уже привязали
                            unset($get_group_of_braart[$id]);
                        }
                        else
                            break;
                    }
                }

                // поставка срок - лимиты
                if (isset($param_limits['delivery']) && $param_limits['delivery'])
                {
                    if (count($get_group_of_braart)>0) {
                        // сортируем по поставке
                        $get_group_of_braart = $model->array_usort_delivery( $get_group_of_braart );
                        // проверяем - поставка
                        $i = 0;
                        $day = $wbsData['limit_delivery_max']; // переменная для отсекания по дням поставки
                        foreach ($get_group_of_braart as $list) { $i++;
                            if ( $param_limits['delivery'] >= $i)
                                $data []= $list;
                            else
                            break;
                        }
                    }
                }
                // сброс
                unset($array[$key], $get_group_of_braart);
            }
        }
        unset($array);

        return $data;
    }
    // конец

    // сортировка
    function array_usort_delivery($array)
    {
        usort($array, function($lft, $rgt) {

            if ($lft['DELIVERY'] > $rgt['DELIVERY'])
                return 1;

            if ($lft['DELIVERY'] < $rgt['DELIVERY'])
                return -1;

            if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] > $rgt['PRICE'])
                return 1;

            if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] < $rgt['PRICE'])
                return -1;

            return 0;
        });

        return $array;
    }

    function array_usort_price($array)
    {
        usort($array, function($lft, $rgt) {

            if ($lft['PRICE'] > $rgt['PRICE'])
                return 1;

            if ($lft['PRICE'] < $rgt['PRICE'])
                return -1;

            return 0;
        });

        return $array;
    }
    // конец
}

?>

-------------------------------------------конец файла-----------------------------------------------------------------------

 

 

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

 

 

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.