Exemple #1
0
 public function action_index()
 {
     require_once Kohana::find_file('vendor', 'php-googlemap/GoogleMap', 'php');
     $this->before('/pages/maps');
     $this->template->title = __('Map');
     $height = Core::get('height', '100%');
     $width = Core::get('width', '100%');
     $map = new GoogleMapAPI();
     $map->setWidth($width);
     $map->setHeight($height);
     $map->disableSidebar();
     $map->setMapType('map');
     $map->setZoomLevel(Core::get('zoom', core::config('advertisement.map_zoom')));
     //$map->mobile = TRUE;
     $atributes = array("target='_blank'");
     if (core::get('controls') == 0) {
         $map->disableMapControls();
         $map->disableTypeControls();
         $map->disableScaleControl();
         $map->disableZoomEncompass();
         $map->disableStreetViewControls();
         $map->disableOverviewControl();
     }
     //only 1 marker
     if (core::get('address') != '') {
         $map->addMarkerByAddress(core::get('address'), core::get('address'));
     } else {
         //last ads, you can modify this value at: general.feed_elements
         $ads = DB::select('a.seotitle')->select(array('c.seoname', 'category'), 'a.title', 'a.published', 'a.address')->from(array('ads', 'a'))->join(array('categories', 'c'), 'INNER')->on('a.id_category', '=', 'c.id_category')->where('a.status', '=', Model_Ad::STATUS_PUBLISHED)->where('a.address', 'IS NOT', NULL)->order_by('published', 'desc')->limit(Core::config('general.map_elements'))->as_object()->cached()->execute();
         foreach ($ads as $a) {
             //d($a);
             if (strlen($a->address) > 3) {
                 $url = Route::url('ad', array('category' => $a->category, 'seotitle' => $a->seotitle));
                 $map->addMarkerByAddress($a->address, $a->title, HTML::anchor($url, $a->title, $atributes));
             }
         }
         //only center if not a single ad
         $map->setCenterCoords(Core::get('lon', core::config('advertisement.center_lon')), Core::get('lat', core::config('advertisement.center_lat')));
     }
     $this->template->map = $map;
 }
/**
 * Output the google map
 *
 * @param string $text text for the "toggle" link that shows/hides the map. Set empty to omit
 * @param string $id used to set the IDs for the toggle href element ($id_toggle) and the map element ($id_data)
 * @param string $hide initial map state: "hide", "show", or "colrobox"
 * @param object $obj optional image/album object. Pass string for generic map and use callback to set points
 * @param function $callback optional callback function to set map options.
 */
function printGoogleMap($text = NULL, $id = NULL, $hide = NULL, $obj = NULL, $callback = NULL)
{
    global $_zp_current_album, $_zp_current_image;
    if (is_null($obj)) {
        if (is_null($_zp_current_image)) {
            $obj = $_zp_current_album;
        } else {
            $obj = $_zp_current_image;
        }
    }
    if (is_null($obj)) {
        $MAP_OBJECT = NULL;
        return false;
    }
    if (is_object($obj)) {
        $type = $obj->table;
        $typeid = $obj->getID();
    } else {
        $type = $obj;
        $typeid = '';
    }
    if (is_null($text)) {
        $text = gettext('Google Map');
    }
    if (empty($text)) {
        $hide = 'show';
    }
    if (is_null($hide)) {
        $hide = getOption('gmap_display');
    }
    if (!is_string($hide)) {
        if ($hide) {
            $hide = 'hide';
        } else {
            $hide = 'show';
        }
    }
    $MAP_OBJECT = new GoogleMapAPI($type . $typeid);
    $MAP_OBJECT->_minify_js = defined('RELEASE');
    $MAP_OBJECT->setZoomLevel(getOption('gmap_zoom'));
    $MAP_OBJECT->setWidth(getOption('gmap_width'));
    $MAP_OBJECT->setHeight(getOption('gmap_height'));
    $MAP_OBJECT->setMapType(getOption('gmap_starting_map'));
    $mapcontrol = getOption('gmap_control');
    if ($mapcontrol == 'none') {
        $MAP_OBJECT->disableTypeControls();
    } else {
        $MAP_OBJECT->enableMapControls();
        $MAP_OBJECT->setTypeControlsStyle($mapcontrol);
        $MAP_OBJECT->setControlSize(getOption('gmap_control_size'));
        $mapsallowed = array();
        if (getOption('gmap_map')) {
            $mapsallowed[] = 'ROADMAP';
        }
        if (getOption('gmap_hybrid')) {
            $mapsallowed[] = 'HYBRID';
        }
        if (getOption('gmap_satellite')) {
            $mapsallowed[] = 'SATELLITE';
        }
        if (getOption('gmap_terrain')) {
            $mapsallowed[] = 'TERRAIN';
        }
        $MAP_OBJECT->setTypeControlTypes($mapsallowed);
    }
    switch ($type) {
        case 'images':
            if (getImageGeodata($obj, $MAP_OBJECT)) {
                break;
            }
            $MAP_OBJECT = NULL;
            return false;
        case 'albums':
            if (getAlbumGeodata($obj, $MAP_OBJECT)) {
                break;
            }
            $MAP_OBJECT = NULL;
            return false;
        default:
            break;
    }
    $type = $type . $typeid . '_';
    if (is_null($id)) {
        $id = $type . 'googlemap';
    }
    $id_toggle = $id . '_toggle';
    $id_data = $id . '_data';
    if (!is_null($callback)) {
        call_user_func($callback, $MAP_OBJECT);
    }
    echo $MAP_OBJECT->getMapJS();
    switch ($hide) {
        case 'colorbox':
            $w = str_replace('px', '', $MAP_OBJECT->width) + 20;
            $h = str_replace('px', '', $MAP_OBJECT->height) + 20;
            if (function_exists('bzcompress')) {
                $method = 'bzip2';
                $data = bzcompress(serialize($MAP_OBJECT));
            } else {
                $method = 'gzip';
                $data = gzcompress(serialize($MAP_OBJECT));
            }
            $param = base64_encode($data);
            ?>
			<a href="javascript:<?php 
            echo $id_data;
            ?>
Colorbox();" title="<?php 
            echo $text;
            ?>
" class="google_map">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
" class="hidden_map">
				<div id="<?php 
            echo $id_data;
            ?>
_map">
					<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
				</div>
			</div>
			<script type="text/javascript">
				// <!-- <![CDATA[
				function <?php 
            echo $id_data;
            ?>
Colorbox() {
					$('#<?php 
            echo $id_data;
            ?>
').removeClass('hidden_map');
					$.colorbox({href:"#<?php 
            echo $id_data;
            ?>
_map", inline:true, open:true});
					$('#<?php 
            echo $id_data;
            ?>
').addClass('hidden_map');
				}
				$(document).ready(function(){
					$("#<?php 
            echo $id_data;
            ?>
_map").colorbox({iframe:true, innerWidth:'<?php 
            echo $w;
            ?>
px', innerHeight:'<?php 
            echo $h;
            ?>
px'});
				});
				// ]]> -->
			</script>
			<?php 
            break;
        case 'hide':
            ?>
			<script type="text/javascript">
				// <!-- <![CDATA[
				function toggle_<?php 
            echo $id_data;
            ?>
() {
					if ($('#<?php 
            echo $id_data;
            ?>
').hasClass('hidden_map')) {
						$('#<?php 
            echo $id_data;
            ?>
').removeClass('hidden_map');
					} else {
						$('#<?php 
            echo $id_data;
            ?>
').addClass('hidden_map');
					}
				}
				// ]]> -->
			</script>
			<a id="<?php 
            echo $id_toggle;
            ?>
" href="javascript:toggle_<?php 
            echo $id_data;
            ?>
();" title="<?php 
            echo gettext('Display or hide the Google Map.');
            ?>
">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
" class="hidden_map">
				<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
			</div>
			<?php 
            break;
        case 'show':
            ?>
			<a id="<?php 
            echo $id_toggle;
            ?>
" href="javascript:toggleMap('<?php 
            echo $id_data;
            ?>
');" title="<?php 
            echo gettext('Display or hide the Google Map.');
            ?>
">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
">
				<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
			</div>
			<?php 
            break;
    }
}