salve a tutti, stavo utilizzando l’estensione egmap, collegata ad un database mysql…,dovrei aggiornarla tramite un form di ricerca! ho proceduto cosi; ho un model attivita in cui ho costruito la funzione search
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('nome',$this->nome,true);
$criteria->compare('coordinate',$this->coordinate,true);
$criteria->compare('categoria',$this->categoria,true);
$criteria->compare('gruppo',$this->gruppo,true);
/*if ($this->nome_marca){
$criteria->with= array('marches');
$criteria->together= true;
$criteria->compare('marches.nome', $this->nome_marca,true);// perchè non funzioni merdacciiaaa???
}
*/
if ($this->nome_marca){
$criteria->addCondition('id in (SELECT attivita_id FROM attivita_marche WHERE marche_id IN (SELECT id FROM marche WHERE nome like :nome_marca))');
$criteria->params[':nome_marca']='%'.$this->nome_marca.'%';
}
if ($this->tipo_marca){
$criteria->addCondition('id in (SELECT attivita_id FROM attivita_marche WHERE marche_id IN (SELECT id FROM marche WHERE tipo_marca like :tipo_marca))');
$criteria->params[':tipo_marca']='%'.$this->tipo_marca.'%';
}
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
facendo delle prove con delle azioni…in questo caso gruppi (nella tabella attività è presente il campo gruppo…in modo da poterlo filtrare)
public function ActionGruppo($group){
$model = new Attivita('search');
$model->unsetAttributes();
$model->gruppo = $group;
$this->render('index',array(
'model'=> $model,
));
}
nella view Index usando il widget per la lista dei risultati…,imposto il dataprovider su model->search della funzione…e lo esegue correttamente!
<!-- Griglia risultati-->
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$model->search(),
'itemView'=>'_view4',
));
quello che non riesco a capire è come passare a egmap il dataprovider per filtrare la mappa!
attualmente è cosi…ma ovviamente con findAll trova tutti i dati
<?php
Yii::import('ext.EGMap.*');
$gMap = new EGMap(); // creo la mappa
$gMap->setWidth(800); // grandezza mappa
// it can also be called $gMap->height = 400;
$gMap->setHeight(600); // altezza mappa
$gMap->zoom = 16;
// set center to inca
$gMap->setCenter(43.29843, 13.44948); // centro di macerata
// Create GMapInfoWindow
$info_window = new EGMapInfoWindow('<div>I was living here as a kid!</div>');
$ciao= Attivita::model()->findAll();
foreach ($ciao as $points) {
// Create marker
$marker = new EGMapMarker($points->latitudine, $points->longitudine, array('title' => $points->nome));
// finestra informazioni
$marker->addHtmlInfoWindow($info_window);
$gMap->addMarker($marker);
}
$gMap->renderMap();
?>
se poi eseguissi l’azione actionGruppo…tramite un link:
<?php $this->widget('zii.widgets.CMenu',array(
'id'=>'tiny',
'items'=>array(
array('label'=>'Negozi', 'url'=>array('attivita/gruppo','group'=>'negozi')),
)); ?>
il widget viene filtrato…,ma la mappa rimane come a quella iniziale…con tutti i dati della query findAll, non so come procedere…o se in questo casa il dataprovider non mi serve!, illuminatemi pardon