Клуб API Карт

Заголовок не указан

katatsumuriseo
15 мая 2011, 18:42

День добрый. Подскажите пожалуйста как вывести в всплывающий бабл маркера данные из бд, а менно из mysql.

Есть таблица users со след строками: id,name,address,telephone и тд. Так вот, данные типа name, address, мне удалось высести, а вот ссылку на профиль, генерующуюся из id, нет. так и не могу понять как это сделать. Страница с профилем генерица след образом на php:

printf("<a href='page.php?id=%s'>%s</a><br>",$myrow['id'],

то есть мне нужно как то заменить эту функцию функцией на js, но никак не получается, ибо в js не очень силен. Почитав документацию, и сторонние блоги, вывод в балун происходит таким образом:

 var src_res="<p><strong>результаты поиска: </strong></p>";
src_res=src_res+'<p><strong>Найдено объектов: '+data.users.length+'</strong></p>';
for (i = 0; i < data.users.length; i++) {
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(data.users[i].lat,data.users[i].lng)
placemark.description= '<div style="color:#ff0303;font-weight:bold">'+data.users[i].name+'</div>';
placemark.description = placemark.description+'<strong>Адрес:</strong> '+data.users[i].address+'<br><strong>Телефон:</strong> '+data.users[i].telephone;
map.addOverlay(placemark);
geoBounds.add(new YMaps.GeoPoint(data.users[i].lat,data.users[i].lng)
src_res=src_res+'<p><a href="#" onClick="return go_to('+data.users[i].lat+', '+data.users[i].lng+",'"+data.users[i].name+"','"+data.users[i].address+"','"+data.users[i].telephone+"','"+data.users[i].id+"');"+'\">'+data.users[i].name+'</a><br>'+data.users[i].address+'</p>';
}
map.setBounds(geoBounds);
 
}
else
{
var src_res = '<p><strong>результаты поиска</strong></p><font color="red">По Вашему запросу объектов на карте не найдено</font>';
}
YMaps.jQuery('#result').html(src_res);
 
 
    })
 
 
    }
 
function go_to(lat,lng,name,address,telephone,id){
map.setCenter(new YMaps.GeoPoint(lat,lng),17);
map.removeAllOverlays(
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(lat,lng)
placemark.name='<div style="color:#ff0303;font-weight:bold">'+name+'</div>';
placemark.description = '<strong>Адрес:</strong> '+address+'<br><strong>Телефон:</strong> '+telephone+'</div></div>';
map.addOverlay(placemark);
placemark.openBalloon(
return false;
}
 
 
function clearLocations() {
 
map.removeAllOverlays(
 
geoResult = 0;
 
YMaps.jQuery('#result').html('');
 
}
 

А запрос к базе, осуществляется с помощью json:

<?php
 
include("bd.php");
 
header('Content-Type: text/html; charset=utf-8');
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 
$center = $_GET["center"];
 
$exp_str1 = explode(",", $center);
 
$center_lat = $exp_str1[0];
$center_lng = $exp_str1[1];
$radius = $_GET["radius"];
 
$json = '{users:['."\n";
 
$query = sprintf("SELECT address, name, telephone, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM users HAVING distance < '%s' ORDER BY distance LIMIT 0, 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius)
$result = mysql_query($query);
 
if (!$result) {
  die("Invalid query: " . mysql_error()
}
if(mysql_num_rows($result)>0)
{
while ($row = mysql_fetch_array($result)){
 
$json.= "\n".'{'.'"id": "'.$par1['id'].'",';
 
$json.= '"name": "'.$row['name'].'",';

$json.= '"telephone": "'.$row['telephone'].'",';
 
$json.= '"address": "'.htmlspecialchars($row['address']).'",';
 
$json.= '"distance": "'.$row['distance'].'",';
 
$json.= '"lat": "'.$row['lat'].'",';
 
$json.=  '"lng": "'.$row['lng'].'"';
 
$json.= '},';
 
}
 
$json = substr($json, 0,-1);
 
echo  $json;
 
echo '], ', "\n",  '"status": "OK"', "\n", '}';
 
}
else
{
echo '{"status": "false"}';
}
 
}
 
?>
 
9 комментариев
Подписаться на комментарии к посту
Andrey.Cjkjvfnby
15 мая 2011, 22:12

В какой момент загружаются данные в бабл (балун?)?

katatsumuriseo
16 мая 2011, 11:19

Пользователь вводить в форму поиска свой адрес,  идет запрос к
таблице пользователями, сверяется со столбцом "адрес" и, если есть,
опираясь на данные lat и lng найденного адреса, выводит данные из бд.  И да другие данные, храняться в этой же таблице. Вот тут все понятно, значение переменных вида: '+переменная+', выводятся, это я сдела, а вот как мне выдать ссылку на стрницу, сгенерированную на основе '+id+', я понять не могу. на пхп этот запрос к базе выглядит так:

 

printf("%s
",$myrow['id'],
собственно вывод в метку:

placemark.name=''+name+'';
placemark.description
= 'Адрес:
'+address+'
Телефон:
'+telephone+'';

Проще говоря, данные выводятся по запросу.

Andrey.Cjkjvfnby
16 мая 2011, 13:14

 

Проще говоря, данные выводятся по запросу.

Ajax или перезагрузка страницы?

 

выводит данные из бд.

Очень расплывчатое описание.

Ссылку сгенерите на пхп и добватьте к placemark.description

katatsumuriseo
16 мая 2011, 14:14

 

Ajax или перезагрузка страницы?

 

ajax

 

Ссылку сгенерите на пхп и добватьте к placemark.description

Вот у меня тоже была такая идея, проблема в том, что у меня не получается добавить код от php в placemark.description, как не пытался, а карта умирает после этого. Гугл тоже не "сообщил" ничего конкретного по вставке php в js.

Может есть какие то примеры?

 

katatsumuriseo
16 мая 2011, 14:50

или вы предлагаете уже сгенерированную сслыку вствить?

Andrey.Cjkjvfnby
16 мая 2011, 15:16

Если
вы в аджаксе не передаёте данные которые нужны для создания ссылки то
передайте эти данные или просто сгенерите ссылку на сервере.

И почитайте про шаблоны. Всю верстку можно передать туда.

Тогда обработка аджакса сведется к паре простых строчек

/*

params =json[params] // {'name':'aaa', 'phone':'nnn', 'link':'ccc'}

placemark= new Placemark(json[coords], {baloonTmplate: template}) // синтаксис примерный

*/

for (key in params) {placemark[key] =json[key]}

katatsumuriseo
16 мая 2011, 15:31

да вот дело именно в том, что данные для поиска формируются в ajax запросе к скрипту поиска, приведенного мной выше. Или я не так понял ваш пост?

И да, можете поделиться ссылкой на "И почитайте про шаблоны", а то что то не могу найти.

katatsumuriseo
16 мая 2011, 15:34

а, все, как раз переменную "id" я передаю в аякс запросе, меня лишь интересует тот аспект, как сгенерировать на её основе ссылку со стороны скрипта (это я как раз про вывод в placemark.description)

Andrey.Cjkjvfnby
16 мая 2011, 20:28

http://yandex.ru/sitesearch?text=Шаблоны&searchid=90027&lr=2

Второй пункт.

$.post('/../getsortedroutes/', dict, function(json) {
    var id =  json['id'];
    var link = "Сложение" + "строк"  + id;
    placemark.link = link
});