вопрос
Столкнулся с проблемой большой загрузки страницы при работе с api яндекс карт. С каждым посещением страницы идет большое количество запросов адресов к геокодеру. Яндекс не запрещает кешировать данные на 30 дней. Кто сталкивался как правильно это реализовать? Пример моего кода с api карт:
function main() {
global $db, $tpl, $metatags, $config, $lang, $is_logged, $member_id, $user_group;
$sql_result = $db->query("SELECT * FROM ".PREFIX."_category WHERE ca_adress != '' ORDER BY id ASC");
$i=0;
while ($row = $db->get_row($tb))
{
$List[] = $row;
}
foreach($List as $row){
//запросы адресов
$get_coor = $homepage = file_get_contents('https://geocode-maps.yandex.ru/1.x/?apikey="мой ключ"&format=json&geocode=' . urlencode( $row['ca_adress'] ) . '&results=1');
$decode_coor = json_decode( $get_coor, true );
$coord = $decode_coor['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'];
$coord_de = explode(' ', $coord);
$coord = "{$coord_de[1]}, {$coord_de[0]}";
if( ! $first_point ) $first_point = $coord;
/*подгружаем фотографии категории*/
$cdir = scandir(ROOT_DIR . "/uploads/category/".$row['alt_name']);
foreach ($cdir as $key => $value)
{
if (!in_array($value,array(".","..","Thumbs.db")))
{
if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
{
$result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
}
else
{
$result[] = $value;
}
}
}
$kid = 1;
$previmg = '';
foreach( $result as $img )
{
$exname = explode('.', $img);
if( $exname[0] == 'main' )
{
//$tpl = str_replace('{image-1}', '/uploads/category/' . $row['alt_name'] . '/' . $img );
}
$kid += 1;
if( $kid >= 1 )
{
$previmg .= '<img src="/uploads/category/' . $row['alt_name'] . '/' . $img . '" alt="">';
}
}
# Рейтинг категории
#
$ResultSum = $db->super_query( "SELECT sum(rating) as `sum` FROM " . USERPREFIX . "_post
LEFT JOIN " . USERPREFIX . "_post_extras ON " . USERPREFIX . "_post.id=" . USERPREFIX . "_post_extras.news_id
WHERE " . USERPREFIX . "_post.category = '" . $row['id'] . "'" );
$rating = intval($ResultSum['sum']);
$maps .= "
var myPlacemark = new ymaps.Placemark([{$coord}],
{
balloonContentHeader: \"<div class='maps-balloon'><table><tbody><tr><td class='details'><img src='/uploads/category/" . $row['alt_name'] . "/". $img. "'><div class='titles'><a href='{$row['alt_name']}' target='_top'>{$row['name']}</a></div><div class='address'>{$rating}</div>\" ,
balloonContentBody: \"<div class='contacts'><li style='list-style: none;' class='phone'></li></ul></div></div></td></tr></tbody></table></div>\",
},
{
draggable: false,
iconLayout: 'default#image',
iconImageHref: '{THEME}/images/map.png',
iconImageSize: [32, 37],
iconImageOffset: [-3, -42]
});
myGeoObjects.push(myPlacemark);
";
$i++;
}
$title = "Интерактивная карта";
$metatags['title'] = $title;
$tpl->load_template('maps.tpl');
$db->free();
$tpl->set('{maps}',$maps);
$tpl->set('{first_point}',$first_point);
$tpl->compile('content');
$tpl->clear();
}