Как стать автором
Обновить

Symfony + Google Maps API + Phoogle

Время на прочтение2 мин
Количество просмотров2.8K
Возможно, кому-то пригодится план работы с Google Maps API во фреймворке Symfony (пишу и для себя, потому что боюсь забыть:). В примере используется класс Phoogle.

Итак:
1) Поместить PhoogleMap.class.php в папку lib, в коде прописать полученный apiKey ($apiKey).
Сразу оговорюсь, что код внутри класса пришлось немного править.

Во-первых, прописать очевидные вещи — значения для:
$mapWidth
$mapHeight
$apiKey
$zoomLevel
Плюс прописать id дива с картой, к примеру, внутри showMap().

Во-вторых, пришлось немного подправить function showMap(), построчно:

echo "\n<div id=\«map\» style=\«width: ».$this->mapWidth.«px; height: ».$this->mapHeight.«px\»>\n
\n"; // четко указать, что ширина и высота дива в px

— внутри условия if (GBrowserIsCompatible())
добавить после var map = new GMap(document.getElementById(\«map\»));
map.enableScrollWheelZoom(); // для возможности приближения-удаления прикруткой колесика мыши
map.enableDoubleClickZoom(); // для возможности приближения при двойном клике

geocoder = new GClientGeocoder();
geocoder.setBaseCountryCode('ru');\n";


— далее в цикле for ($g = 0; $g<$numPoints; $g++)
добавить new GIcon(icon) внутри var marker".$g." = new GMarker(point".$g.", new GIcon(icon));\n

— если необходимо обработать событие onmouseover, так и пишем:
GEvent.addListener(marker".$g.", \«mouseover\», function() {\n";
по умолчанию событие onclick: GEvent.addListener(marker".$g.", \«click\», function() {\n";
Ну и в таком случае, естественно, следует обработать событие onmouseout, чтобы закрыть infoWindow:

echo «GEvent.addListener(marker».$g.", \«mouseout\»,
function() {
marker".$g.".closeInfoWindow();
});\n";


А если нужно, чтобы обрабатывалось какое-либо событие при onmouseover на какой-либо элемент на странице, не имеющий отношение к карте, (например, мне нужно при наведении на элемент списка появлялось на карте infoWindow, а также подсвечивание текста в списке), то пишем примерно такое:
echo «GEvent.addDomListener(document.getElementById('listTaxi').getElementsByTagName('p')[».$g."], 'mouseover', function() {
this.style.color = '#E5A8A8';
this.className = 'over'\n";
echo «marker».$g.".openInfoWindowHtml(\"".$this->validPoints[$g]['htmlMessage']."\");
});\n";

Аналогично для события onmouseout:

echo «GEvent.addDomListener(document.getElementById('listTaxi').getElementsByTagName('p')[».$g."], 'mouseout', function() {
this.style.color = 'black';\n";
echo «marker».$g.".closeInfoWindow();

});\n";


2)Рыба темплейта IndexSuccess выглядит приблизительно так:
<?php $map->printGoogleJS() ?>

<?php $map->addGeoPoint($resultset->getString('latitude'), $resultset->getString('longitude'), $o); ?>

<?php $map->showMap(); ?>


3)В экшн модуля actions.class.php прописать:

class indexActions extends sfActions
{
public function executeIndex()
{
$this->map = new PhoogleMap();
$this->map->centerMap(55.7557, 37.6183);//центр по Манежной площади
}
}
Теги:
Хабы:
+10
Комментарии4

Публикации

Истории

Работа

PHP программист
157 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн