public function action() { if ($this->hasErrors()) { echo '<pre>'; print_r($this->errors); } else { //определяем город юзера по его IP $this->city = YiiBase::app()->sypexgeo->action($this->ip); //не удалось определить город по IP юзера if (empty($this->city)) { //тогда выбираем город-Москва и отдаём данные по этому городу $city = $this->getMoscow(); } else { //поиск города в справочнике $city_row = City::findTownByName($this->city); //Не нашли город в справочнике if (empty($city_row)) { //не удалось найти город в нашем списке - тогда город - Москва для этого сайта $city = $this->getMoscow(); } else { //поиск соответствия = город+сайт+активность $query = YiiBase::app()->db->cache(3600)->createCommand('SELECT * FROM {{city_site_phone}} WHERE city_id=:city_id AND site_id=:site_id AND active=1'); $query->bindValue(':city_id', $city_row['id'], PDO::PARAM_INT); $query->bindValue(':site_id', $this->site_id, PDO::PARAM_INT); $city = $query->queryRow(); //не нашли совпадения по АКТИВНОСТИ_города+совпадению_по_сайту+названию_города if (empty($city)) { $city = $this->getMoscow(); //учитываем метку рекламы и если есть метка рекламы- выводим номер для рекламы $this->phones[self::getPhoneUtm($city)] = 'Москва'; } } } //формируем список активных регионов по сайту, для отображения if (empty($this->regions)) { $this->regions = CHtml::listData($this->findActiveRegions(), 'city', 'phone'); } //если город - АКТИВЕН - используем его телефон if (!empty($city) && empty($this->phones)) { //получим массив всей информаци о городе $row_info_city = City::findById($city['city_id']); //определяем сколько строчек телефонов будет if ($row_info_city['main_city'] == City::NOT_ACTIVE) { //(3 номера) //добавили номер города $this->phones[self::getPhoneUtm($city)] = $row_info_city['city']; } ////если есть привязки к шаблонам - ищем телефон подвязанный к шаблону(если НЕ находим то возвращаем по дефолту номер) $phone_from_template = Phone::getPhoneByTemplateANDCity($this->template, $row_info_city['parent_id'], $this->site_id); $region_city_name = City::findNameTownById($row_info_city['parent_id']); // нашли номер телефона подвязанного к шаблону //к шаблону не будет подвязок номеров рекламы, поэтому не проверяем и не подвязываем доп. номера if (!empty($phone_from_template)) { $this->phones[$phone_from_template] = $region_city_name; $this->regions[$region_city_name] = $phone_from_template; } else { $query_region = YiiBase::app()->db->createCommand('SELECT phone, google_phone, direct_phone FROM {{city_site_phone}} WHERE city_id=:city_id AND site_id=:site_id'); $query_region->bindValue(':site_id', $this->site_id, PDO::PARAM_INT); $query_region->bindValue(':city_id', $row_info_city['parent_id'], PDO::PARAM_INT); $region_default_phone = $query_region->queryRow(); //используем номер телефона региона по-умолчанию $this->phones[self::getPhoneUtm($region_default_phone)] = $region_city_name; } } } }
public function actionSypexAdvanced() { if (isset($_GET['ip']) && isset($_GET['site_id'])) { //определяем город по Айпи $city = YiiBase::app()->sypexgeo->action($_GET['ip']); //не удалось определить город по IP if (empty($city)) { echo '8-800-333-85-07'; die; } $city_name = City::findTownByName(trim($city)); if (empty($city_name)) { echo '8-800-333-85-07'; die; } //на основании города/сайта - находим номер телефона $phone_query = YiiBase::app()->db->cache(3600)->createCommand('SELECT phone FROM {{city_site_phone}} WHERE site_id=:site_id AND city_id=:city_id'); $phone_query->bindValue(':city_id', $city_name['id'], PDO::PARAM_INT); $phone_query->bindValue(':site_id', $_GET['site_id'], PDO::PARAM_INT); $phone = $phone_query->queryScalar(); //если нашли номер телефона по городу, изменим город на Москву и найдём номер if ($phone) { echo $city_name['city'] . ' ' . $phone; die; } else { //НЕ нашли совпадение по городу и сайту //ищем совпадение по Московском области, если город попадает в МО $city_moscow = City::findTownByName('Москва'); //есть совпадение по МО if ($city_name['parent_id'] == $city_moscow['id']) { $phone_query = YiiBase::app()->db->cache(3600)->createCommand('SELECT phone FROM {{city_site_phone}} WHERE site_id=:site_id AND city_id=:city_id'); $phone_query->bindValue(':city_id', $city_moscow['id'], PDO::PARAM_INT); $phone_query->bindValue(':site_id', $_GET['site_id'], PDO::PARAM_INT); $phone = $phone_query->queryScalar(); echo 'Москва ' . $phone; die; } else { echo '8-800-333-85-07'; die; } } } die; }