/** * findDetails - описание функции */ public static function findDetails($params) { // здесь приходят article и provider_id из URI $details = []; $providerObj = null; $providers = PartProviderSearch::find()->where('enable = :enable', [':enable' => 1])->all(); foreach ($providers as $provider) { if ($provider->cross) { $options = ['provider_data' => $provider, 'article' => $params['article']]; if (!empty($params['store_id'])) { $options = array_merge($options, ['store_id' => (int) $params['store_id']]); } if (!empty($params['city_id'])) { $options = array_merge($options, ['city_id' => (int) $params['city_id']]); } $providerObj = Yii::$app->getModule('autoparts')->run->provider($provider->name, $options); $search_settings = ['code' => $params['article']]; $items = $providerObj->findDetails($search_settings); if (!empty($items) && is_array($items)) { foreach ($items as $item) { array_push($details, $item); } } else { continue; } } } foreach ($details as $detail) { $crosses[$detail['code']] = $detail['groupid']; } foreach ($providers as $provider) { if (!$provider->cross) { $options = ['provider_data' => $provider]; if (!empty($params['store_id'])) { $options = array_merge($options, ['store_id' => (int) $params['store_id']]); } if (!empty($params['city_id'])) { $options = array_merge($options, ['city_id' => (int) $params['city_id']]); } $providerObj = Yii::$app->getModule('autoparts')->run->provider($provider->name, $options); if (!empty($params['store_id'])) { $providerObj->store_id = (int) $params['store_id']; } $search_settings = ['code' => $params['article']]; if ($provider->name == 'Over') { $search_settings = array_merge($search_settings, ['flagpostav' => $provider->flagpostav]); } $items = $providerObj->findDetails($search_settings); if (!empty($crosses)) { $crossItems = null; foreach ($crosses as $crossCode => $crossGroup) { if (isset($items)) { if (!is_array($items)) { continue; } $crossItems = $providerObj->findDetails(['code' => $crossCode]); foreach ($crossItems as $item) { $item['groupid'] = $crossGroup; } } } if (!empty($items)) { $items = array_merge($items, $crossItems); } } if (!empty($items)) { foreach ($items as $item) { array_push($details, $item); } } } } $data_manufacturers = []; foreach ($details as $key => $arr) { $data_manufacturers[$key] = $arr['manufacture']; } $data_shipping_periods = []; foreach ($details as $key => $arr) { $data_shipping_periods[$key] = ($arr['srokmin'] + $arr['srokmax']) / 2; } $data_prices = []; foreach ($details as $key => $arr) { $data_prices[$key] = $arr['price']; } array_multisort($data_manufacturers, SORT_NATURAL | SORT_FLAG_CASE, $data_shipping_periods, $data_prices, $details); return $details; }
private function getProviderId($provider) { $provider = PartProviderSearch::find()->select('id')->where('name = :name', [':name' => $provider])->one(); if (empty($provider)) { throw new Exception('Провайдер не определен в базе данных'); } return $provider->id; }