Osh*_*sor 5 jquery google-maps yii
我正在使用Yii框架和Yii egmap扩展开发交互式地图.当用户点击复选框时,我想刷新地图(ajax),如图所示:
 我只能使用以下代码在服务器端(刷新整个页面)执行此操作:
我只能使用以下代码在服务器端(刷新整个页面)执行此操作:
<?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.'      '.$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();
?>
所有这些代码都在视图文件中.地图由带有id的html元素中的EGMap扩展生成EGMapContainer0.知道如何在复选框点击的情况下通过ajax刷新地图吗?
谢谢.