2012-05-02 28 views
5

我正在開發一個使用Yii framework和Yii egmap extension的交互式地圖。 我想刷新地圖(阿賈克斯)時顯示在畫面上的複選框用戶點擊如下: yii-egmap-screenshot 我只能用下面的代碼做服務器端(刷新整個頁面):Yii和EGMap擴展(谷歌地圖)刷新地圖複選框更改

<?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(); 

?> 

所有這些代碼在圖文件中。該地圖由id元素爲EGMapContainer0的html元素中的EGMap擴展生成。任何想法如何實現刷新地圖通過ajax發生複選框點擊事件?

謝謝。

回答

1

我一直在使用這張地圖,它非常好用,但它的問題是你不能使用renderPartial它只是不渲染。唯一的解決辦法是使用Iframe。 Ajax更新簡單地不起作用。

+0

感謝您的回答。我實際上並沒有使用renderPartial,只是直接放到視圖文件中。在DOM準備好之後,不可能以某種方式操縱EGMapContainer0嗎? –

+0

我還沒有使用過,你可以嘗試它,請給你的調查結果.thanls –