Yii和EGMap扩展(Google Map)刷新了复选框更改的地图

时间:2012-05-02 09:35:20

标签: jquery google-maps yii

我正在使用Yii framework和Yii egmap extension开发交互式地图。 当用户点击复选框时,我想刷新地图(ajax),如图所示: yii-egmap-screenshot 我只能使用以下代码在服务器端(刷新整个页面)执行此操作:

<?php
    Yii::app()->clientScript->registerScript('filterscript',"
        $('#filter_all').click(function() {
            $(\"input[name='filter\[\]']\").prop('checked', this.checked);
            window.location.href = 'http://' + window.location.host + window.location.pathname + '?tags=sale,rent,residential,commercial,agricultural';
        });
        $(\"input[name='filter\[\]']\").click(function() {
            var tags = '?tags=';
            var tmp=new Array();
            $('#filter_all').prop('checked', !$(\"input[name='filter\[\]']:not(:checked)\").length);
            $('input[type=checkbox]').each(function () {
                if (this.checked) 
                    tmp.push($(this).val());

            });
            tags += tmp.join(',');
            window.location.href = 'http://' + window.location.host + window.location.pathname + tags;
        });
        $('#filter_all').prop('checked', !$(\"input[name='filter\[\]']:not(:checked)\").length);
    ",CClientScript::POS_READY);
?>

使用带有以下代码的EGMap扩展名生成地图:

<?php

// Get latlong from location-aware web browser saved in cookie
if (isset($_COOKIE['latlng'])){
    list($lat,$long) = explode(',',htmlentities(htmlspecialchars(strip_tags($_COOKIE['latlng']))));
}else{
    $lat = 3.159553312559541;
    $long = 101.71481802016604;
}
Yii::import('ext.gmap.*');

$gMap = new EGMap();
$gMap->setJsName('map');
$gMap->zoom = 10;
$mapTypeControlOptions = array(
    'sensor'=>true,
    'position'=> EGMapControlPosition::LEFT_BOTTOM,
    'style'=>EGMap::MAPTYPECONTROL_STYLE_DROPDOWN_MENU
);

$gMap->mapTypeControlOptions= $mapTypeControlOptions;
$gMap->setWidth('100%');
$gMap->setHeight(500);
$gMap->setCenter($lat, $long);

$icon = new EGMapMarkerImage("http://".$_SERVER['HTTP_HOST'].Yii::app()->baseUrl."/images/bighouse.png");

$icon->setSize(32, 37);
$icon->setAnchor(16, 16.5);
$icon->setOrigin(0, 0);

// Status label
$status_type = array(
    0=>'success',
    1=>'warning',
    2=>'important',
    3=>'important',
);

$condition = '';
$sale_cond = '';
$rent_cond = '';

if ($match['sale']==='' && $match['rent']==='' && $match['residential']==='' && $match['commercial']==='' && $match['agricultural']===''){
    $condition = "AND (
        (MATCH (tags) AGAINST ('sale') 
        AND MATCH (tags) AGAINST ('residential'))
        OR
        (MATCH (tags) AGAINST ('rent') 
        AND MATCH (tags) AGAINST ('residential') )
        OR
        (MATCH (tags) AGAINST ('sale') 
        AND MATCH (tags) AGAINST ('commercial'))
        OR
        (MATCH (tags) AGAINST ('rent') 
        AND MATCH (tags) AGAINST ('commercial') )
        OR
        (MATCH (tags) AGAINST ('sale') 
        AND MATCH (tags) AGAINST ('agricultural'))
        OR
        (MATCH (tags) AGAINST ('rent') 
        AND MATCH (tags) AGAINST ('agricultural') )
    )";
}else{
    if ($match['sale']!=''){
        $sale_cond = "MATCH (tags) AGAINST ('sale')";
        if ($match['residential']!=''){
            $cond[1] = "(".$sale_cond." AND MATCH (tags) AGAINST ('residential'))";
        }
        if ($match['commercial']!=''){
            $cond[2] = "(".$sale_cond." AND MATCH (tags) AGAINST ('commercial'))";
        }
        if ($match['agricultural']!=''){
            $cond[3] = "(".$sale_cond." AND MATCH (tags) AGAINST ('agricultural'))";
        }
        if ($match['residential']!='' || $match['commercial']!='' || $match['agricultural']!=''){
            $sale_cond = implode(' OR ', $cond);
        }
    }
    if ($match['rent']!=''){
        $rent_cond = "MATCH (tags) AGAINST ('rent')";
        if ($match['residential']!=''){
            $cond[1] = "(".$rent_cond." AND MATCH (tags) AGAINST ('residential'))";
        }
        if ($match['commercial']!=''){
            $cond[2] = "(".$rent_cond." AND MATCH (tags) AGAINST ('commercial'))";
        }
        if ($match['agricultural']!=''){
            $cond[3] = "(".$rent_cond." AND MATCH (tags) AGAINST ('agricultural'))";
        }
        if ($match['residential']!='' || $match['commercial']!='' || $match['agricultural']!=''){
            $rent_cond = implode(' OR ', $cond);
        }

    }
    if ($sale_cond!=''){
        $condition = 'AND '.$sale_cond;
        if ($rent_cond!=''){
            $condition .= ' OR '.$rent_cond;
        }
    }elseif ($rent_cond!=''){
        $condition = 'AND '.$rent_cond;
    }
}

$props = Property::model()->findAll('active=1 '.$condition);
if ($props!==null){
    foreach ($props as $prop){
        // Prepare status label for info box
        $status_label='<span class="label label-'.$status_type[(int)$prop['status']].'">'.$list_status[(int)$prop['status']].'</span>';
        $prop_photo = '';
        $win_height = '110px';
        // Check if photo exist
        if (is_file('images/property/'.$prop['photo'])){
            $prop_photo = '<img src="http://'.$_SERVER['HTTP_HOST'].Yii::app()->baseUrl.'/images/property/'.$prop['photo'].'" /><br />'; 
            $win_height = '310px';
        }

        $email_img = '<img src="http://'.$_SERVER['HTTP_HOST'].Yii::app()->baseUrl.'/site/strtoimg?pid='.$prop['id'].'" />';

        $view_link = '<div style="float:left"><a href="'.Yii::app()->baseUrl.'/public/view/'.$prop['id'].'">View this property</a></div>';
        $edit_link = '';
        if (!Yii::app()->user->isGuest && (int)$prop['user_id']===(int)Yii::app()->user->id){
            $edit_link = '<div style="float:right"><a href="'.Yii::app()->baseUrl.'/prop/update/'.$prop['id'].'">Edit this property</a></div>';
        }
        $links = '<div>'.$view_link.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$edit_link.'</div>';

        $info_window = new EGMapInfoWindow('<div style="height:'.$win_height.'">'.
                $prop_photo.
                substr($prop['description'],0,40).'...'.'<br />'.
                'Price: '.$prop['price'].'<br />'.
                'Email: '.$email_img.'<br />'.
                'Tel: '.$prop['contact_phone'].'<br />'.
                $status_label.' Added: '.$prop['date_upload'].'<br />'.
                $links.
                '</div>');
        $marker = new EGMapMarker($prop['latitude'], $prop['longitude'], array('title' => $prop['title'],'icon'=>$icon));
        $marker->addHtmlInfoWindow($info_window);
        $gMap->addMarker($marker);
    }
}
$gMap->renderMap();

?>

所有这些代码都在视图文件中。地图由标识为EGMapContainer0的html元素中的EGMap扩展名生成。知道如何在复选框点击的情况下通过ajax刷新地图吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我一直在使用这张地图它非常好且易于使用但是它的问题是你无法使用它renderPartial它只是不渲染。只有解决方案是使用Iframe 。 Ajax更新根本不起作用。