function getDistricsAndCities() { // используем кеширование для более быстрой генерации списка $my_cache_name = "districs_and_cities_list"; if (!cache_table_test($my_cache_name, array('obj_locat_districts'), true)) { //Получим все МО $districs_mo = sql_getRows("SELECT id, name FROM `obj_locat_districts` WHERE pid='" . MO_DISTRICS . "' AND coordinat<>'' ORDER BY name", true); //Получим все города МО $ids_mo = ""; foreach ($districs_mo as $key => $value) { $ids_mo .= $key . ","; } $ids_mo = substr($ids_mo, 0, -1); if ($ids_mo) { $ret['cities_mo'] = sql_getRows("SELECT id, name, pid FROM `obj_locat_districts` WHERE pid in (" . $ids_mo . ") ORDER BY pid, name", true); } $new_cities = array(); foreach ($ret['cities_mo'] as $key => $value) { foreach ($ret['cities_mo'] as $k => $v) { if ($value['pid'] == $v['pid'] && !in_array($k, $new_cities[$value['pid']])) { $new_cities[$value['pid']][$k] = $v; } } } $all_districs = array(); foreach ($districs_mo as $key => $value) { $all_districs[$key] = $value; if (isset($new_cities[$key])) { foreach ($new_cities[$key] as $val) { $all_districs[$val['id']] = "--" . $val['name']; } } } cache_save($my_cache_name, serialize($all_districs), true); } else { $all_districs = unserialize(cache_get($my_cache_name, true)); } return $all_districs; }
/** * Функция поиска по схеме метро * Если в GET пришли данные о выбранных станциях метро, то передаем их в функцию search, иначе - формируем схему метро */ function search_by_metro() { $metrostations = sql_getRows('SELECT * FROM obj_locat_metrostations WHERE id<>1 AND x<>0 AND y<>0'); // Расставляем точки метро на карте $cache_name = 'metro_pp.cache'; $filename = 'javascripts/pp.js'; if (!is_file($filename) || !cache_table_test($cache_name, array('obj_locat_metrostations'), true)) { $rows = $metrostations; $script = "document.write('"; foreach ($rows as $key => $val) { $script .= "<img src=\"/images/pp.gif\" id=\"pp" . $val['id'] . "\" style=\"position: absolute; top:" . ($val['y'] - 4) . "px; left: " . ($val['x'] - 4) . "px; border: 0; display: none; cursor: pointer\" onclick=\"checkMetro(" . $val['id'] . "); return false;\" title=\"" . $val['name'] . "\" alt=\"" . $val['name'] . "\">"; } $script .= "');"; $fp = fopen($filename, 'w'); fwrite($fp, $script); fclose($fp); cache_save($cache_name, '', true); } // Рисуем area для map $cache_name = 'metro_area.cache'; $filename = 'javascripts/area.js'; if (!is_file($filename) || !cache_table_test($cache_name, array('obj_locat_metrolines', 'obj_locat_metrostations'), true)) { $rows = $metrostations; $script = "document.write('"; foreach ($rows as $key => $val) { $script .= "<area shape=\"rect\" coords=\"" . ($val['x'] - 4) . ", " . ($val['y'] - 4) . ", " . ($val['x'] + 4) . ", " . ($val['y'] + 4) . "\" onclick=\"checkMetro(" . $val['id'] . "); return false;\" title=\"" . $val['name'] . "\" href=\"javascript: void(0);\">"; } $script .= "');"; $fp = fopen($filename, 'w'); fwrite($fp, $script); fclose($fp); cache_save($cache_name, '', true); } //Генерируем привязки к округам $cache_name = 'metro_okrug_binds.cache'; $filename = 'javascripts/okrug_binds.js'; if (!is_file($filename) || !cache_table_test($cache_name, array('obj_locat_metrostations'), true)) { $okrug_binds = array(); foreach ($metrostations as $station) { $okruga = explode(',', $station['okrug']); foreach ($okruga as $okrug) { $okrug = intval($okrug); if (!$okrug) { continue; } $okrug_binds[$okrug] .= $station['id'] . ','; } } $script = "var okrug_binds={\n"; foreach ($okrug_binds as $okr => $okrug_bind) { $script .= "\t" . $okr . ": [" . $okrug_bind . "],\n"; } $script .= "};\n"; $fp = fopen($filename, 'w'); fwrite($fp, $script); fclose($fp); cache_save($cache_name, '', true); } return true; }
/** * Проверка свежести курса и возвращение его значения * * @param array $params * @return double */ function getKurs(&$params) { $kurs = sql_getValue('SELECT value FROM currencies WHERE name="USD"'); $cache_name = 'currencies'; // Проверка - если менялся курс, надо обновить все цены if (!cache_table_test($cache_name, array('currencies'), true) && $kurs > 0) { $sql = 'UPDATE objects SET price_dollar = price_rub / ' . $kurs . ', price_dollar_print = price_rub_print / ' . $kurs; sql_query($sql); $sql = 'UPDATE obj_elem_free SET price_metr = price / ' . $kurs; sql_query($sql); cache_save($cache_name, '', true); } return $kurs; }
/** * ‘ункци¤ поиска по схеме метро * ≈сли в GET пришли данные о выбранных станци¤х метро, то передаем их в функцию search, иначе - формируем схему метро * * @param array $params - все параметры из адресной строки */ function search_by_metro($params) { $metrostations = sql_getRows('SELECT * FROM obj_locat_metrostations WHERE id<>1 AND x<>0 AND y<>0'); // –асставл¤ем точки метро на карте $cache_name = 'metro_pp.cache'; $filename = 'javascripts/pp.js'; if (!is_file($filename) || !cache_table_test($cache_name, array('obj_locat_metrostations'), true)) { $rows = $metrostations; $script = "document.write('"; foreach ($rows as $key => $val) { $script .= "<img src=\"/images/pp.gif\" id=\"pp" . $val['id'] . "\" style=\"position: absolute; top:" . ($val['y'] - 4) . "px; left: " . ($val['x'] - 4) . "px; border: 0; display: none; cursor: pointer\" onclick=\"checkMetro(" . $val['id'] . "); return false;\" title=\"" . $val['name'] . "\" alt=\"" . $val['name'] . "\">"; } $script .= "');"; $fp = fopen($filename, 'w'); fwrite($fp, $script); fclose($fp); cache_save($cache_name, '', true); } // –исуем area дл¤ map $cache_name = 'metro_area.cache'; $filename = 'javascripts/area.js'; if (!is_file($filename) || !cache_table_test($cache_name, array('obj_locat_metrolines', 'obj_locat_metrostations'), true)) { $rows = $metrostations; $script = "document.write('"; foreach ($rows as $key => $val) { $script .= "<area shape=\"rect\" coords=\"" . ($val['x'] - 4) . ", " . ($val['y'] - 4) . ", " . ($val['x'] + 4) . ", " . ($val['y'] + 4) . "\" onclick=\"checkMetro(" . $val['id'] . "); return false;\" title=\"" . $val['name'] . "\" href=\"javascript: void(0);\">"; } $script .= "');"; $fp = fopen($filename, 'w'); fwrite($fp, $script); fclose($fp); cache_save($cache_name, '', true); } return true; }