2012-01-09 2 views
0

Я использую Cakephp Google Map V3 Helper. Я могу отобразить карту google, но маркеры этого не делают. Вот мой взгляд код:Google Map V3 Помощник Cakephp и несколько маркеров

<?php 
echo $this->GoogleMapV3->map(); 
foreach ($allcondos as $condo) { 
    $options = array(
    'lat' => $condo['Unit']['lat'], 
    'lng' => $condo['Unit']['lon'] 
    ); 
    $this->GoogleMapV3->addMarker($options); 
} 
?> 

Я знаю, что если я просто сказать приложение, чтобы эхо моего $ кондо [ «Unit»] [ «широчайшего»] или [ «долгота»] он будет делать это в foreach (так что он тянет мои данные). То, что я не знаю, как это сделать, - это написать код для массива $ options. Я также пробовал:

foreach ($allcondos as $condo) { 
    $lat=$condo['Unit']['lat']; 
    $lon=$condo['Unit']['lon']; 
    $options = array(
    'lat' => $lat, 
    'lng' => $lon 
    ); 
    $this->GoogleMapV3->addMarker($options); 
} 

Как это правильно записать?

ответ

5

Несколько простых шагов, чтобы получить эту работу:

Скачать

Скачать с https://github.com/dereuromark/cakephp-google-map-v3-helper и поместите файл GoogleMapV3Helper.php в /app/view/helper/GoogleMapV3Helper.php.

Load Helper

Либо измените AppController так, чтобы его верхняя часть читается как следующий:

<?php 
    class AppController extends Contoller{ 
     public $helpers = array('Html','Javascript','GoogleMapV3'); 
    } 
?> 

Или загрузить его в один контроллер, добавив его в массив хелперов как таковой :

<?php 
    class DemoController extends AppContoller{ 

     function map() { 
      $this->helpers[] = 'GoogleMapV3'; 
      # rest of your code  
     } 
    } 
? 

Включите скрипты

Включите JQuery в свой заголовок. Включить следующие, а также:

<?php 
    echo '<script type="text/javascript" src="'.$this->GoogleMapV3->apiUrl().'"></script>'; 
?> 

Создать Карта Контейнер

Положите это на ваш взгляд, где вы хотите, чтобы ваша карта появится. Не стесняйтесь изменять свойства div.

<?php echo $this->GoogleMapV3->map(array('div'=>array('id'=>'my_map', 'height'=>'400', 'width'=>'100%'))); ?> 

Примечание: Вы можете изменить положение по умолчанию карты, в том числе больше возможностей, чем просто «DIV»:

<?php echo $this->GoogleMapV3->map(array('map'=>array(
      'defaultLat' => 40, # only last fallback, use Configure::write('Google.lat', ...); to define own one 
      'defaultLng' => -74, # only last fallback, use Configure::write('Google.lng', ...); to define own one 
      'defaultZoom' => 5, 
     ),'div'=>array('id'=>'my_map', 'height'=>'400', 'width'=>'100%'))); ?> 

Добавить маркеры

Может быть в цикле или что-то , но это делается в представлении после создания контейнера.

<?php 
    $options = array(
    'lat'=>40.770272, 
    'lng'=>-73.974037, 
     'title' => 'Some title', # optional 
     'content' => '<b>HTML</b> Content for the Bubble/InfoWindow' # optional 
    ); 
    $this->GoogleMapV3->addMarker($options); 
?> 

примечание: установите знак «значок» в массиве, если вы хотите использовать пользовательское изображение. В противном случае они не появятся.

Включить скрипт для маркеров

<?php echo $this->GoogleMapV3->script() ?> 

Все сделано!

В качестве альтернативы, вы можете использовать Finalize() вместо сценария(), если вы не хотите, чтобы повторить JavaScript сразу, но записать его в буфер для последующего вывода в макете:

<?php $this->GoogleMapV3->finalize(); ?> 

Престола http://www.dereuromark.de/2010/12/21/googlemapsv3-cakephp-helper/ для деталей.

+0

Я сделал, и все, что он делает, это добавить еще один экземпляр карты по умолчанию (ну, она пытается, но поскольку карта вызывается с использованием «id» вместо «class», она дает мне только одну карту ... что и есть Я хочу). – huzzah

+0

Итак, у вас есть 'echo $ this-> GoogleMapV3-> script();' где-то на вашей странице? – swiecki

+0

Я понял, что, когда у меня есть это, я получаю сообщение об ошибке из торта, говоря: «Метод GoogleMapV3Helper :: скрипт не существует», хотя он проделывает через него правильное количество раз! – huzzah

Смежные вопросы