Template Column2.php: Search Form

Ciao, dopo aver letto di tutto non sono ancora riuscito a capire come inviare alla left column del template colum2 una search form. Per fare un esempio partendo dalla pagina admin del sito creata da gii, io ho la advanced search sopra la gridview al centro della pagina. Se volessi spostare la form di ricerca nella colonna a sinistra della gridview nel template colunm2 e toglierla da sopra, come fare?

Grazie

Ok, c’è un po’ di disordine nell’uso dell’MVC di Yii. Quello che devi fare tu, è solo renderizzare il template giusto nel tuo controller. Sarà Yii che chiamerà da solo column2 o column1 e poi layout.

Forse mi sono spiegato male. Nel controller c’è già il layout template column2 impostato. Solo che nella colonna di sinistra ci mette il widget del menu mentre in quella centrale renderizza il resto (search form e gridview), il tutto passato dentro la variabile $content. Quello che voglio fare e mettere la search form nella colonnadi sinistra e toglierla dal centro…

Grazie

Spostali =). Prendi il colum2, e spostali.

Scusami ma forse sono io che non ci arrivo. Mi spieghi cosa intendi dire? Come faccio a spostare la search form della ricerca avanzata a sinistra se insieme alla gridview fa parte di un blocco unico? Nella colunm2 non é neppure dichiarato il model…

Puoi postare il codice?

Allora nel controller:




...

        public $layout='//layouts/column2';

...

//qui richiamo la view admin

	public function actionAdmin()

	{

		$model=new Annunci('search');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['Annunci']))

			$model->attributes=$_GET['Annunci'];


		$this->render('admin',array(

			'model'=>$model,

		));

	}



Nella view admin




<?php

/* @var $this AnnunciController */

/* @var $model Annunci */


$this->breadcrumbs=array(

	'Annunci'=>array('index'),

	'Manage',

);


$this->menu=array(

	array('label'=>'List Annunci', 'url'=>array('index')),

	array('label'=>'Create Annunci', 'url'=>array('create')),

);


Yii::app()->clientScript->registerScript('search', "

$('.search-button').click(function(){

	$('.search-form').toggle();

	return false;

});

$('.search-form form').submit(function(){

	$('#annunci-grid').yiiGridView('update', {

		data: $(this).serialize()

	});

	return false;

});

");

?>


<h1>Manage Annunci</h1>


<p>

You may optionally enter a comparison operator (<b>&lt;</b>, <b>&lt;=</b>, <b>&gt;</b>, <b>&gt;=</b>, <b>&lt;&gt;</b>

or <b>=</b>) at the beginning of each of your search values to specify how the comparison should be done.

</p>


//qui appare la form della search


<?php 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'=>'annunci-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id_ann',

		'titolo',

		'descrizione',

		array(  

		'name' => 'destinazione',  

		'filter' => CHtml::activeTextField($model, 'id_destinazione'),  

		'value' => '$data->destinazione->destinazione',  

		),

		array(  

		'name' => 'zona',  

		'filter' => CHtml::activeTextField($model, 'id_zona'),  

		'value' => '$data->zona->nome_zona',  

		),

		array(  

		'name' => 'tipolgia',  

		'filter' => CHtml::activeTextField($model, 'id_tipologia'),  

		'value' => '$data->tipologia->nome_tipologia',  

		),

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



…e questa è la column2.php




<?php /* @var $this Controller */ ?>

<?php $this->beginContent('//layouts/main'); ?>

<div class="span-4 last">

	<div id="sidebar">

	<?php

		$this->beginWidget('zii.widgets.CPortlet', array(

			'title'=>'Operations',

		));

		$this->widget('zii.widgets.CMenu', array(

			'items'=>$this->menu,

			'htmlOptions'=>array('class'=>'operations'),

		));

		$this->endWidget();

	?>

	</div><!-- sidebar -->

	<div id="search">

		// QUI VORREI APPARISSE LA SEARCH

	</div><!-- sidebar -->

</div>

<div class="span-19">

	<div id="content">

               <?php echo $content; ?>

	</div><!-- content -->

</div>

<?php $this->endContent(); ?>




spero sia tutto chiaro.

Grazie

E’ tutto chiaro: se vuoi che il search form compaia dove hai indicato, devi spostare il codice html e javascript dalla tua view alla view column2. Occhio che hai un $model che poi dovrai passare per tutte le view quindi dovrai mettere mano al componente protected/components/Controller.php.

Ma questo è quello che vuoi, non credo sia quello di cui tu hai bisogno.

Mah, io vorrei semplicemente spostare la form di ricerca a sinistra della gridview e toglierla da sopra…possibile che sia così complicato? Cortesemente, tu cosa faresti? Ho pensato di non utilizzare il template "column2" e quindi utilizzare il "column1" o direttamente il "main" e da li impostare la pagina come preferisco con una tabella…

Grazie

Ma perché non la sposti?

Mi da il seguente errore

"Undefined variable: model "




             });

24             $('.search-form form').submit(function(){

25                 $('#annunci-grid').yiiGridView('update', {

26                     data: $(this).serialize()

27                 });

28                 return false;

29             });

30             ");

31         ?>

32         <?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>

33         <div class="search-form" style="display:none">

34         <?php $this->renderPartial('_search',array(

35            'model'=>$model,

36         )); ?>

37         </div><!-- search-form -->

38     </div><!-- sidebar -->

39 </div>

40 <div class="span-19">

41     <div id="content">

42         <?php echo $content; ?>

43     </div><!-- content -->

44 </div>

45 <?php $this->endContent(); ?>



…ed aggiungo: però facendo così avrò sempre la search form per tutte le pagine del sito, o comunque tutte quelle che utilizzano column2 come template. Per il mio caso va bene, ma in realtà il contenuto di quella colonna sarebbe perfetto se fosse dinamico. :)

Grazie