Yii Framework Forum: Egmap - Odświeżanie Zawartości Markerów Z Bazy - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Egmap - Odświeżanie Zawartości Markerów Z Bazy Rate Topic: -----

#1 User is offline   tzoll 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 28-February 13

Posted 07 March 2013 - 04:00 AM

Witam serdecznie. Czy ktoś mógłby mnie naprowadzić, ewentualnie pomóc mi w takiej kwestii: poniżej mam działający kod, który wyświetla markery z bazy na mapie egmap, który jest powiązany z widgetem CGRidView. Wszystko działa prawie jak należy poza jednym wyjątkiem - gdy nawiguję pomiędzy rekordami używając paginacji, kasując rekordy lub używając wyszukiwarki - to zawartość mapy się nie odświeża. Zawartość mapy jest pobierana prawidłowo tylko, podczas pierwszego otwarcia strony. Gdzieś pewnie brakuje jakiejś funkcji ajaxowej, która nakazałaby mapie, aby pobrała na nowo markery w zależności od tego, co jest wyświetlane w siatce CGridView. Z góry dziękuję za pomoc i pozdrawiam

Oto mój kod:
<?php
Yii::import('ext.gmap.*');
$gMap = new EGMap();
$gMap->zoom = 2;
$mapTypeControlOptions = array(
  'position'=> EGMapControlPosition::LEFT_BOTTOM,
  'style'=>EGMap::MAPTYPECONTROL_STYLE_DROPDOWN_MENU
);
$gMap->mapTypeControlOptions= $mapTypeControlOptions;
$gMap->setCenter(39.721089311812094, 2.91165944519042);

$dataProvider=$model->search();
  $i = 0;
  if ( $dataProvider->getData() ) {
  foreach ($dataProvider->getData() as $row) {
  $i++;
  // Create marker
  $marker = new EGMapMarker($row['lat'], $row['lng']);
  $gMap->addMarker($marker);
  }
  }
$gMap->renderMap();
//end of egmap

//start search and gridview

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
	$('.search-form').toggle();
	return false;
});
$('.search-form form').submit(function(){
	$('#mapa-grid').yiiGridView('update', {
		data: $(this).serialize()
	});
	return false;
});
");

echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
	'model'=>$model,
)); ?>
</div><!-- search-form -->

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'mapa-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'idspecies',
		'lat',
		'lng',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>


0

#2 User is offline   redguy 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 784
  • Joined: 02-July 10
  • Location:Central Poland

Posted 08 March 2013 - 02:10 AM

cgridview ma parametr "afterAjaxUpdate" (http://www.yiiframew...axUpdate-detail), w którym możesz określić funkcję javascript uruchamianą po każdej aktualizacji grida (paginacja, sortowanie, filtrowanie, itp). z JS powinienes moc pobrać identyfikatory wszystkich wyswietlanych w gridzie rekordów i przekazać do własnej funkcji AJAX, która odświeży mape.
red
0

#3 User is offline   tzoll 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 28-February 13

Posted 03 April 2013 - 02:14 AM

View Postredguy, on 08 March 2013 - 02:10 AM, said:

cgridview ma parametr "afterAjaxUpdate" (http://www.yiiframew...axUpdate-detail), w którym możesz określić funkcję javascript uruchamianą po każdej aktualizacji grida (paginacja, sortowanie, filtrowanie, itp). z JS powinienes moc pobrać identyfikatory wszystkich wyswietlanych w gridzie rekordów i przekazać do własnej funkcji AJAX, która odświeży mape.


Kurcze, coś mi to nie idzie, redguy mógłbyś chociaż jakiś szkic tego nakreślić ?:) Dzięki :)

to mój aktualny kod:
<?php 
$map = $model;
$lat = $model->dlugosc;
$lng = $model->szerokosc;
Yii::import('ext.egmap.*');
$gMap = new EGMap();
$dataProvider=$model->search();
   
$i = 0;
   if ($dataProvider->getData() ) {
   foreach ($dataProvider->getData() as $row) {
   $i++;
   // Create marker
   $marker = new EGMapMarker($row['dlugosc'],$row['szerokosc']);
   $gMap->addMarker($marker);
   }
   }
$gMap->renderMap();
?>

<?php
$this->widget('bootstrap.widgets.TbGridView',array(  
	'dataProvider'=>$model->search(),
        'afterAjaxUpdate'=>'przeladuj',    
	'columns'=>array(
		'dlugosc',
		'szerokosc',
		array(
			'class'=>'bootstrap.widgets.TbButtonColumn',
                     ),
	),
)); ?>

<script type="text/javascript">
    function przeladuj(id, options)
{
    
}

    </script>

0

#4 User is offline   redguy 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 784
  • Joined: 02-July 10
  • Location:Central Poland

Posted 05 April 2013 - 08:32 AM

sprobuj raczej cos w stylu:
'afterAjaxUpdate'=>'przeladuj();'

bo to ma byc fragment javascriptu... niestety nigdy tego nie uzywalem, wiec ciezko mi powiedziec co moze byc nie tak. musialbys przesledzic kod JS grida, tego co Ci widget generuje na stronie, sprawdz czy developer console pokazuje jakies bledy (chrome, firefox), etc...
red
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users