hola amigos lo q quiero hacer es lo siguiente, en mi vista tengo un cGridView donde muestro unos usuarios y su ubicacion guardada y alli tengo un un chtml:link en cada fila del cgridView en el cual cuando de click quiero q vaya a mi modelo y me consulte todos los registros de ese usuario y me los grafique, tengo lo siguiente en el modelo
UbicacionLideres
public function search()
{
$criteria=new CDbCriteria;
//aca traemos la relacion tercero con usuarios
$criteria->with = array('idUsuario.idTercero');
//alias tabla ubicacionLideres
$criteria->alias='t1';
$criteria->select=array('t1.id_ubicacion','t1.id_usuario','t1.latitud','t1.longitud','t2.fecha');
//inner join con la misma para sacar la ultima fecha de cada ubicacion
$criteria->join='inner join(
SELECT id_ubicacion,id_usuario, MAX(fecha) AS fecha
FROM ubicacion_lideres
GROUP BY id_usuario
) t2 ON T1.id_usuario= t2.id_usuario
AND t1.fecha = t2.fecha';
//$criteria->compare('t2.fecha',$this->fecha,true);
$criteria->compare('idTercero.nombre',$this->nombre,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
el codigo anterior me muestra todos los usuarios una vez, pues cada usuario puede registrar su ubicacion muchas veces.
public function getListarUbicacionLider($id_usuario)
{
//$id_usuario = $_GET['id_usuario'];
$criteria=new CDbCriteria;
$criteria->condition = 'id_usuario=:id_usuario';
$criteria->params = array(':id_usuario'=>$id_usuario);
$ubicaciones = UbicacionLideres::model()->findAll($criteria);
$lista = array();
foreach($ubicaciones as $v)
$lista[] = array($v->latitud, $v->longitud,$v->idUsuario->idTercero->nombre);
return $lista;
}
este codigo anterior es el q me consultaria despues de seleccionar un registro del gridview, las veces q se encuentra en la BD, esto lo hago en el modelo…
en la vista tengo lo siguiente
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'ubicacion-lideres-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'id_usuario',
'header'=>'Nombre del Lider',
'value'=>'$data->idUsuario->idTercero->nombre',
'htmlOptions'=>array('style'=>'width:400px;'),
'filter' => CHtml::activeTextField($model,'nombre'),
),
array(
'name'=>'fecha',
'filter' => false, // para que no se muestre el campo de filtrar para el atributo direccion
),
array(
'header' => '',
'type' => 'raw',
'value' => 'CHtml::link("Ver Ubicacion", null, array("onclick" => "javascript:cargarmap($data->id_usuario)", "class" => "btn"))',
'htmlOptions' => array('style'=>'cursor: pointer;','width'=>'75px')
),
)));?>
<div id="mapholder"></div>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function cargarmap(id_usuario){
window.alert(id_usuario);
navigator.geolocation.getCurrentPosition(showPosition,showError);
function showPosition(position){
mapholder=document.getElementById('mapholder')
mapholder.style.height='500px';
mapholder.style.width='900px';
latlon=new google.maps.LatLng(7.122980000000001, -73.12817999999999);
var marcadores= <?php echo json_encode($model->ListarUbicacionLider(id_usuario)) ?>;
var myOptions={
center:latlon,
zoom:15,
mapTypeId:google.maps.MapTypeId.ROADMAP,
mapTypeControl:false,
disableDoubleClickZoom:false,
navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
};
var map=new google.maps.Map(document.getElementById("mapholder"),myOptions);
var marker,i;
var geocoder = new google.maps.Geocoder();
var titulo;
for( i=0;i<marcadores.length;i++)
{
lat=marcadores[i][0];
lon=marcadores[i][1];
latlon=new google.maps.LatLng(lat, lon);
marker=new google.maps.Marker({position:new google.maps.LatLng(lat,lon),map:map});
marker.setMap(map);
var infowindow = new google.maps.InfoWindow({
content: 'lathola'});
var usuario;
usuario= marcadores[i][2];
(function(marker, latlon,usuario){
google.maps.event.addListener(marker, 'click', function() {
geocoder.geocode({'latLng': latlon}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
infowindow.setContent('Lider: '+usuario+',<p> ' +results[1].formatted_address+'</p>');
infowindow.open(map, marker);
}
} else {
alert("Problema al encontrar la dirección: " + status);
}
});
});
})(marker,latlon,usuario);
/*geocoder.geocode({'latLng': latlon}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
// var map=new google.maps.Map(document.getElementById("mapholder"),myOptions);
marker=new google.maps.Marker({position:new google.maps.LatLng(lat,lon),map:map,title:results[0].formatted_address});
marker.setMap(map);
}
} else {
alert("Geocoder failed due to: " + status);
}
});*/
}
}
function showError(error){
switch(error.code){
case error.PERMISSION_DENIED:
x.innerHTML="Denegada la peticion de Geolocalización en el navegador."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="La información de la localización no esta disponible."
break;
case error.TIMEOUT:
x.innerHTML="El tiempo de petición ha expirado."
break;
case error.UNKNOWN_ERROR:
x.innerHTML="Ha ocurrido un error desconocido."
break;
}
}
}
</script>
este codigo anterior es en donde tengo problema porq no se como mandarle el id_usuario para q me llene
[b] var marcadores= <?php echo json_encode($model->ListarUbicacionLider(id_usuario)) ?>;
[/b] y q me devuelva los registros, gracias y espero haberme hecho entender