Забыли пароль?
Запросите новый здесь.

Автор темы: yury
ID темы: 1467
Информация:
Тема содержит 42 сообщения, была просмотрена 32914 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Вопросы новичков
 Распечатать тему
Как подключить яндекс.карты к новостям?
Serge Renard
Создать массив, сделать выборку из БД и в цикле заполнить - разве не так? Или о чём-то другом речь?
 
Web
yury
Serge Renard написал:

Создать массив, сделать выборку из БД и в цикле заполнить - разве не так? Или о чём-то другом речь?


Совершенно верно, вот вопрос как раз в том как это сделать? пример кода
 
Serge Renard
Ну как-то так:

Скачать исходники  Код
$array_of_adres = array();
$record = mysql_query($query,$engine);
$row = mysql_fetch_assoc($record);
$index = 0;
do
     {
      $array_of_adres[$index] = $row['adres'];
      $index++;
     } while ($row = mysql_fetch_assoc($row));




В переменной $query содержится текст необходимого запроса. Разумеется, код далеко не идеален, набросал просто на коленке, чтобы можно было понять принципы.
 
Web
spiker
Зачем городить такой огород :) ?

Создать массив из нужных значений таблицы, т.е. :

$query = dbquery( ....запрос...);

$array_of_adres = array();

while ($data = dbarray($query)) $array_of_adres[] = "'".$data['adress']."'";

Затем массив вставить в нужное место, переведя его в текст:

join(',', $array_of_adres)
 
Serge Renard
Я не разбирался просто особо с фьюженовскими функциями ab
Набросал пример на чистом PHP.
 
Web
yury
дамс, это там оказывается еще не все, там всякие клстеры есть которые объединяют в одну точку несколько объектов (например если по одному адресу находится несколько объектов), с возможностью вывода ссылок в описании балуна) ппц короче)

а это уже видимо в массив как-то надо вывести по принципу http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Clusterer.xml
 
yury
может кто подскажет еще, как сформировать подобный массив:
myGeoObjects = [];
myGeoObjects[0] = new ymaps.GeoObject({
geometry: {type: "Point", coordinates: [56.034, 36.992]},
properties: {
clusterCaption: 'Геообъект №1',
balloonContentBody: 'Содержимое балуна геообъекта №1.'
}
});
myGeoObjects[1] = new ymaps.GeoObject({
geometry: {type: "Point", coordinates: [56.021, 36.983]},
properties: {
clusterCaption: 'Геообъект №2',
balloonContentBody: 'Содержимое балуна геообъекта №2.'
}
});
 
Rush
это не просто массив, а массив обьектов. а в конструктор обьекта передается массив параметров.
если надо формировать в пхп - без json никак

Скачать исходники  Код

$settings = json_encode(array(0=>array('geometry'=>array('type'=>'Point','coordinates' => '56.034, 36.992'),'properties'=>array('clusterCaption' => 'Геообъект №1',
'balloonContentBody => 'Содержимое балуна геообъекта №1.')),1=>array(...)));
echo "<script>
var settings = '".$settings."';
myGeoObjects = [];
$.each(settings,function(key,value){
myGeoObjects[key(не обязательно)] = new ymaps.GeoObject(value);
});

</script>";





как то так. можно мудрить и пробовать в пхп создавать уже готовые к использованию обьекты, но это сложнее
 
Web
yury
а универсальный массив? т.е если в БД 100 точек, то и выводит в массиве 100 точек
 
mishqa35
Если сделать панель или отдельную страницу то как то вот так, если же выводить в файле news.php то можно подставить код плямо в него, чтобы не делать лишние запросы
Скачать исходники  Код
$count = dbcount("(news_id)", DB_NEWS,
   groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().")
      AND (news_end='0'||news_end>=".time().") AND news_draft='0'");
$result = dbquery(
   "SELECT * FROM ".DB_NEWS."
   WHERE ".groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().")
      AND (news_end='0'||news_end>=".time().") AND news_draft='0'
   GROUP BY news_id ORDER BY news_sticky DESC, news_datestamp DESC
");
$i = 0;
$search = "";
if (dbrows($result)) {
   while ($data = dbarray($result)) {
      $i++;
      $search .= "'".$data['adress']."'";
      if($count > $i) $search .= ",";
   }
}


echo "<script src='http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU' type='text/javascript'></script>";
echo "<script type='text/javascript'>
function init() {
    var myMap = new ymaps.Map('map', {
            center: [53.205226, 50.191184],
            zoom: 9,
            behaviors: ['default', 'scrollZoom']
        }),
        myMultiGeocoder = new MultiGeocoder({ boundedBy: myMap.getBounds() });

    // Геокодирование массива адресов и координат.
    myMultiGeocoder.geocode([
        ".$search."
    ])
    .then(
        function (res) {
            myMap.geoObjects.add(res.geoObjects);
        },
        function (err) {
            alert(err);
        }
    );
}

function MultiGeocoder(options) {
    this._options = options || {};
}

MultiGeocoder.prototype.geocode = function (requests, options) {
    var self = this,
        opts = ymaps.util.extend({}, self._options, options),
        size = requests.length,
        promise = new ymaps.util.Promise(),
        result = [],
        geoObjects = new ymaps.GeoObjectArray();

    requests.forEach(function (request, index) {
        ymaps.geocode(request, opts).then(
            function (response) {
                var geoObject = response.geoObjects.get(0);

                geoObject && (result[index] = geoObject);
                --size || (result.forEach(geoObjects.add, geoObjects), promise.resolve({ geoObjects: geoObjects }));
            },
            function (err) {
                promise.reject(err);
            }
        );
    });

    return promise;
};

ymaps.ready(init);
</script>";
echo "<div id='map' style='width: 100%; height: 400px'></div>";



Это координаты города, Самара
Скачать исходники  Код
center: [53.205226, 50.191184],



 
Web
yury
а что в итоге должно вывестись? с кластерами (если в одной точке несколько событий при открытии балуна с показом ссылок на новости) или просто координаты? а то просто точки как раз спайкер код приводил в пример.

посмотри если не сложно этот пост, о чем собствено обсуждаем): http://rusfusion....post_17347

или более наглядный пример: http://api.yandex...sterer.xml

по сути должно получиться при выводе нечто такое, взял с одной из яндекс.карт скрин - если в одной точке несколько новостей, или скрин 2 - если 1 новость
yury присоединено следующее:изображения:
565656756.jpg 4645645.jpg

Изменил(а) yury, 21.04.2013 18:33
 
yury
Вот даже по сути аналог, многоуважаемый spiker навел на примерbv: http://www.isbmod...
 
yury
Нашел почти готовый пример, может кому пригодится http://webmap-blo...s-kart-2-x

осталось понять как его адаптировать
Изменил(а) yury, 22.04.2013 10:10
 
yury
Разобрался как писать координаты в БД. осталось понять как json работает и вывести эти метки

Вот такой код примера

<?php

include("../../config.php");

header('Content-Type: text/html; charset=utf-8');
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

$json = '{markers:['."\n";

$query1= "SELECT * FROM qiwiterminal";
$result1 = mysql_query($query1);

if(mysql_num_rows($result1)>0)
{
while ($par1 = mysql_fetch_array($result1)){

$cname = 'Теминал QIWI';

$exp_str = explode(",", $par1['coords']);

$lat = $exp_str[0];

$lng = $exp_str[1];

$json.= "\n".'{'.'"id": "'.$par1['id'].'",';

$json.= '"cname": "'.$cname.'",';

$json.= '"address": "'.$par1['address'].'",';

$json.= '"lat": "'.$lat.'",';

$json.= '"lon": "'.$lng.'"';

$json.= '},';

}

$json = substr($json, 0,-1);

echo $json;

echo '], ', "\n", '"status": "OK"', "\n", '}';

}
else
{
echo '{"status": "false"}';
}

}

?>
 
yury
переделал код под свою таблицу, но пока чтото все равно отказывается выводить.

файл вывода маркеров из БД

Загрузить источник  GeSHi: PHP
  1. <?php
  2.  
  3. require_once "maincore.php";
  4.  
  5. header('Content-Type: text/html; charset=utf-8');
  6. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  7.  
  8. $json = '{markers:['."\n";
  9.  
  10. $query1= "SELECT mechta_id, mechta_adress, mechta_coords, mechta_subject, mechta_skidka FROM ".DB_MECHTA."
  11. WHERE ".groupaccess('mechta_visibility')." AND (mechta_start='0'||mechta_start<=".time().")
  12. AND (mechta_end='0'||mechta_end>=".time().") AND mechta_draft='0'
  13. GROUP BY mechta_id ORDER BY mechta_sticky DESC, mechta_datestamp DESC";
  14. $result1 = mysql_query($query1);
  15.  
  16. if(mysql_num_rows($result1)>0)
  17. {
  18. while ($data = dbarray($result1)){
  19.  
  20. $cname = ' "'.$par1['mechta_subject'].'"';
  21.  
  22. $exp_str = explode(",", $par1['mechta_coords']);
  23.  
  24. $lat = $exp_str[0];
  25.  
  26. $lng = $exp_str[1];
  27.  
  28. $json.= "\n".'{'.'"id": "'.$par1['mechta_id'].'",';
  29.  
  30. $json.= '"cname": "'.$cname.'",';
  31.  
  32. $json.= '"address": "'.$par1['mechta_adress'].'",';
  33.  
  34. $json.= '"lat": "'.$lat.'",';
  35.  
  36. $json.= '"lon": "'.$lng.'"';
  37.  
  38. $json.= '},';
  39.  
  40. }
  41.  
  42. $json = substr($json, 0,-1);
  43.  
  44. echo $json;
  45.  
  46. echo '], ', "\n", '"status": "OK"', "\n", '}';
  47.  
  48. }
  49. else
  50. {
  51. echo '{"status": "false"}';
  52. }
  53.  
  54. }
  55.  
  56.  
  57. ?>
Добавлено за 0.086 секунд, используя GeSHi 1.0.8.10


файл скрипта вывода уже на карте

Загрузить источник  GeSHi: Javascript
  1. <script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
  2. <script type="text/javascript" src="http://yandex.st/jquery/1.3.2/jquery.min.js"></script>
  3.  
  4. <script type="text/javascript">
  5.  
  6. ymaps.ready(init);
  7.  
  8. function init () {
  9.  
  10. var myMap = new ymaps.Map("map", {center: [56.316667, 44.0],zoom: 11});
  11.  
  12. myMap.controls.add("zoomControl")
  13. .add("typeSelector")
  14. .add("mapTools");
  15.  
  16. myGeoObjects = [];
  17.  
  18. $.getJSON("http://webmap-blog.ru/examples/clusterer/aztek-yaclusterer/vivmarkers.php", function(json){
  19. if (json.status == 'OK') {
  20. for (i = 0; i < json.markers.length; i++) {
  21. myPlacemark = new ymaps.Placemark([json.markers[i].lon, json.markers[i].lat], {
  22.  
  23. balloonContentHeader: '<div style="color:#ff0303;font-weight:bold">'+json.markers[i].cname+'</div>',
  24. balloonContentBody: '<strong>Адрес:</strong> '+json.markers[i].address,
  25. });
  26. myGeoObjects.push(myPlacemark);
  27. }
  28. clusterer = new ymaps.Clusterer();
  29. clusterer.add(myGeoObjects);
  30. myMap.geoObjects.add(clusterer);
  31. }
  32. else
  33. {
  34. alert('Произошла ошибка!');
  35. }
  36. })
  37.  
  38. }
  39. </script>
  40. </head>
  41.  
  42. <body>
  43.  
  44. <div id="map" style="width:800px; height:600px"></div>
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.10


что упустил?
 
SchreiBear
километровое детищеag
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
yury
все сделал и работает) но есть один ньюанс. можно к новости добавить только один адрес, а надобно иногда, чтобы можно было добавить несколько адресов.

как я понимаю, надо создать таблицу, в которую будут писаться адреса и они будут индентифицирвоаться с ИД новости.

но чуток с яндекс.картами оказалось посложнее реализовать.
Изменил(а) yury, 16.07.2013 20:43
 
yury
кто может подмочь за десяток-полтора бакинских допилить сие творение?
Изменил(а) yury, 16.07.2013 18:16
 
SchreiBear
зачем так все услоэнять...можно и с гоогле обшаться и гораздо проше...не какой ява ..чистый пхп


http://irinchik.b...7#post_107 вот пример работы
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
yury
уже к яндексу все прикреплено.
осталось дело за малым всего лишь
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
Как сделать микроразметку на сайте?  →  PHP 1 / 2000 22.07.2021 06:39
Как вебмастеру сформулировали УТП для создания сайтов на PHP-Fusion?  →  Пожелания и предложения 1 / 5358 25.07.2020 03:46
SEO-оптимизация. дубли страниц в PHP-Fusion - где искать и как избавиться?  →  Ошибки, баги 0 / 3396 19.06.2020 17:06
Как вывести все данные из таблицы, за исключением администраторов  →  Плагины 3 / 3712 24.02.2020 15:59
Скликиватель рекламы яндекс директ  →  СЕО 1 / 456 14.02.2020 11:24
Как перейти с http на https  →  Вопросы новичков 30 / 28339 24.10.2019 18:45
Как правильно сделать ЧПУ и переиндексировать сайт?  →  Моды 4 / 8623 24.10.2019 17:38
Как перенести ресурс на другой домен  →  Установка и настройка системы 5 / 2989 24.10.2019 14:01
Посоветуйте JS-слайдер чтобы фотки JPG сменялись как в GIF-анимации  →  Плагины 2 / 5542 20.10.2019 13:34
Перешел на HttpS - Как теперь удалить Http?!  →  Вопросы новичков 1 / 3901 18.06.2019 13:19
Топ 5 пользователей форума
Alex Alex (1,264)   Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)