CJuiDatePicker használata az admin.php-ben

Sziasztok!

Már rengeteg linket megnéztem, de nem akar működni a dolog.

Van egy alap tábla, hozzá alap CRUD. Amikor a manage gombra kattintunk, akkor a táblázat fejléce alatti sorban vannak textbox-ok, amivel szűrni lehet. Namost azok közül az egyiket szeretném én kiváltani a CJuiDatePicker-rel. Rendkívül kezdő vagyok, de sztem az admin.php-ben kell valamit valahogy módosítani.

ez az alap:




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'mrsk2-grid',

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

	'filter'=>$model,

	'columns'=>array(

		'mrsid',

		'mro',

		'mrssz',

		'mrspzc',

		'mrsvi',

		'mrsd',

		'mrsszh',

		'mrsfcsz',

		'mrscsz',

		'mrstkn',

		'mrsszn',

		'mrsdb',

		'mrsktrvd',

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



és én így próbáltam meg a neten található dolgokból:




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'mrsk2-grid',

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

	'filter'=>$model,

	'columns'=>array(

		'mrsid',

		'mro',

		'mrssz',

		'mrspzc',

		'mrsvi',

		'mrsd',

		'mrsszh',

		'mrsfcsz',

		'mrscsz',

		'mrstkn',

		'mrsszn',

		'mrsdb',

		array

			(

			'name'=>'mrsktrvd',

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

			'filter'=>$this->widget('zii.widgets.jui.CJuiDatepicker', array('model'=>$model, 'attribute'=>'mrsktrvd'), true),

			),

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



nagyjából ennek kéne lenni, de nem. van akinek csak elsőre fut, és utána kell még máguskodni vmi js-tel, van akinek elsőre se. én is az utóbbiak közé tartozom. nagyon homályban vagyok? vagy valamelyest langyos azért?

köszi

Szia,

Én ezt így használom, ez intervallumra van kitalálva, de logikusan neked is jó lehet:

A view-ba:




<?php 

$dateFilter = $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                                    // 'model'=>$model,

                                    'name' => 'Projects[date_first]',

                                    'language' => 'hu',

                                    'value' => $model->date_first,

                                    'options'=>array(

                                        'showAnim'=>'fold',

                                        'dateFormat'=>'yy-mm-dd',

                                        'changeMonth' => 'true',

                                        'changeYear'=>'true',

                                        'constrainInput' => 'false',

                                    ),

                                    'htmlOptions'=>array(

                                        'style'=>'width:70px;',

                                    ),


                                ),true) ." - ". $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                                    // 'model'=>$model,

                                    'name' => 'Projects[date_last]',

                                    'language' => 'hu',

                                    'value' => $model->date_last,

                                    'options'=>array(

                                        'showAnim'=>'fold',

                                        'dateFormat'=>'yy-mm-dd',

                                        'changeMonth' => 'true',

                                        'changeYear'=>'true',

                                        'constrainInput' => 'false',

                                    ),

                                    'htmlOptions'=>array(

                                        'style'=>'width:70px',

                                    ),


                                ),true);


?>


<?php $this->widget('application.components.GridView', array(

                'id'=>'projects-grid',

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

                'filter'=>$model,

                'ajaxUpdate'=>true,

                'afterAjaxUpdate'=>"function() {

                    jQuery('#Projects_date_first').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['hu'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));

                    jQuery('#Projects_date_last').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['hu'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));

                }",


                'columns'=>array(

                        array(

                            'name'=>'start_date',

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

                            'filter'=>$dateFilter,

                            'htmlOptions' => array('style'=>'width:160px;text-align:center;'),

                        ),

 ....




Nálam a Projects modelbe a start_date-re kell szűrni.

A modelbe a következő kell:




class Projects extends ActiveRecord

{

        public $date_first = null;

        public $date_last = null;    


         ....

	

	$criteria=new CDbCriteria;

                .....

                if((isset($this->date_first) && trim($this->date_first) != "")) {

                    if((isset($this->date_last) && trim($this->date_last) != "")) {

                        $criteria->addBetweenCondition('t.start_date', $this->date_first.' 00:00:00', $this->date_last.' 23:59:59');

                    } else {

                        $criteria->addBetweenCondition('t.start_date', $this->date_first.' 00:00:00', '3000:01:01 23:59:59');

                    }

                } else {

                    if((isset($this->date_last) && trim($this->date_last) != "")) {

                        $criteria->addBetweenCondition('t.start_date', '1000:01:01 00:00:00', $this->date_last.' 23:59:59');

                    }

               }



Akkor is működik, ha csak az egyik mezőt állítja be vagy csak a másikat.

Remélem tudtam segíteni, és nem maradt ki semmi.

üdv

Szia gyz!

nagyon szépen köszönöm a segítséget! A segítségeddel már eljutottam odáig, hogy megjelenik a CJuiDatePicker a mrsk2\protected\views\mrsk2\admin.php oldalon, és nem csak 1x (! :) ), de ha választok vmit, nem szűr rá.

ezeket reszelgettem hogy ez menjen:

ezt betettem az admin.php elejére:




$dateFilter = $this->widget('zii.widgets.jui.CJuiDatePicker', array(

	'name' => 'mrsk2[mrsktrvd]',

	'value' => $model->mrsktrvd,

	'options'=>array(

		'showAnim'=>'fold',

		'dateFormat'=>'yyyy-mm-dd',

		'changeMonth' => 'true',

		'changeYear'=>'true',

		'constrainInput' => 'false',

	),

),true);



a dateFormat az erősen sántít, mindenhol átírtam egységesre, de mintha 2x venné az évet egymás után, és nem mindenhol. van ahol jó, van ahol nem jó, mármint napfüggőnek tűnik nekem de csak egy pillanatra látom felvillanni.

aztán, ezt betettem a CGridView widget-be:




...

	'filter'=>$model,

	'ajaxUpdate'=>true,

                'afterAjaxUpdate'=>"function() {

                    jQuery('#mrsk2_mrsktrvd').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['hu'], {'showAnim':'fold','dateFormat':'yyyy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));

                }",


...

	'columns'=>array(

		...

		array(

			'name'=>'mrsktrvd',

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

			'filter'=>$dateFilter,

			),

...



aztán a models/Mrsk2.php-be betettem ezt:




public $mrsktrvd = null;



a




	public function search()



elé.

aztán a




	public function search()



-be (nem tudom pontosan van-e jelentősége hogy ezen belül hova rakom) beraktam ezt:




		if((isset($this->mrsktrvd) && trim($this->mrsktrvd) != ""))

			{

			$criteria->addBetweenCondition('t.start_date', $this->mrsktrvd, $this->mrsktrvd);

			};



ill hogy ki kell-e igtatni a meglévő




$criteria->compare('mrsktrvd',$this->mrsktrvd,true);



-t, de erős a gyanúm hogy ki kell.

egy picit még tudnál segíteni hogy miért lehet hogy nem működik?

köszi szépen!

Szia

Hát a te esetedben a addBetweenCondition nem jó, mivel az SQL-ben kb ezt jelenti:

mrsktrvd BETWEEN "…" AND "…"

Én azért használok két mezőt, mivel a gyakorlatban általában -tól -ig szoktak szűrni egy dátumra.

Neked a compare lesz jó!




		

   $criteria->compare('mrsktrvd', $this->mrsktrvd, false);

		



Az if előtte szerintem nem fog kelleni

Üdv

Szia!

azt kitapasztaltam hogy mindenhol meg kell hagyni a yy-mm-dd formátumot és akkor csinálja jól (mármint így: 2012-03-20).

viszont átraktam erre, if nélkül:




$criteria->compare('mrsktrvd', $this->mrsktrvd, false);



de sajnos továbbra sem szűr… :(

bekapcsoltam az Application Log-ot, és szűrés után sem látom hogy a Querying SQL-ekben szerepelne vhol a szűrési feltétel. (mondjuk most visszacsináltam az eredeti szűrési mechanizmust ami működik és annál se látok semmiféle változást. mintha nem is szűrne, vagy nem azt mutatná a log amit kell, nem tudom. lehet h nem is az SQL-lel szűri meg alapbol?)

nincs vmi ötleted miért lehet?

köszi

Szia!

van egy sejtésem:




'name' => 'mrsk2[mrsktrvd]',



a firebug minden változót nagy kezdőbetűvel ír.

tehát ennek sztem ilyennek kéne lenni:




'name' => 'Mrsk2[mrsktrvd]',



azonban ha átírom ennek a nevét is nagy kezdőbetűre, akkor nem jelenik meg a naptár. de az őrületbe kerget mert sehol máshol nem látok hivatkozást erre a változónévre ebben a formában. biztos valami mélyebben nyugvó yii logika (amire nem hiszem hogy mostanában rá fogok jönni magamtól) miatt nem okés. de sztem ez egy lehetséges hibaforrás. ha valakinek volna ötlete hogy ezen hogy lehet segíteni, megköszönöm.

ezaz!

firebug konzol, jobbgomb a GET http:…-n megnyitás új ablakban, ott a címsávban ha átírom Mrsk2[mrsktrvd]-re, akkor megy a szűrés. de miért nem engedi hogy a változó nevét átírjam nagy kezdőbetűre? ill. miért nem működik?

mivel nem találok megoldást, más útra terelem. most már azt mondom nem lényeg hogyan, csak bárhogy bármilyen datepicker-rel de szeretném megoldani. azon belül mindegy hogyan.

softark segített! link

Sziasztok!

Szintén yii/php kezdőként a következő problémám akadt.

A beviteli formon,ahol user inputot veszem tettem 2 CJuiDateTimePicker widgetet.(A user ezzel állítja be, hogy mettől meddig akar szűrni.)

A problémám ott akadt, hogy míg az első DateTimePicker felugrik az idő kiválasztó, a másodiknál nem, csak egy üres mezőm van.

Probáltam gyz verzióját átülteni,de akkor egyik beviteli mező sem jelenik meg.

Kérdésem, hogyan lehetne megoldani, hogy mindkét DateTimePicker kiválasztó felugorjon

Válaszokat előre is köszönöm.

Darksinter

A form említett része:


Yii::import(‘application.extensions.CJuiDateTimePicker.CJuiDateTimePicker’);

&#036;something=&#036;this-&gt;widget('CJuiDateTimePicker',array(


'model'=&gt;&#036;model,


'attribute'=&gt;'TimeStamp',


'language'=&gt;'hu',


'value'=&gt;date(&quot;Y.mm.dd H:i:s&quot;,&#036;model-&gt;TimeStamp),


'options'=&gt;array('dateFormat'=&gt;'yy.mm.dd'),





'options'=&gt;array('dateFormat'=&gt;'yy.mm.dd'),


'htmlOptions'=&gt;array(


      'style'=&gt;'width:120px;',),





));


echo &quot;-&quot;;


&#036;this-&gt;widget('CJuiDateTimePicker',array(


'model'=&gt;&#036;vmi,


'attribute'=&gt;'TimeStamp',


'language'=&gt;'hu',


'value'=&gt;date(&quot;Y.mm.dd H:i:s&quot;,&#036;vmi-&gt;TimeStamp),


'options'=&gt;array('dateFormat'=&gt;'yy.mm.dd'),





'options'=&gt;array('dateFormat'=&gt;'yy.mm.dd'),


'htmlOptions'=&gt;array(


      'style'=&gt;'width:120px;',),


));


?&gt;

A $vmi egy helyben generált model akar lenni.

Ui:Bocs ha rosszak a formai követelmények, nem vagyok nagy forumozó.

szia

erre lehet találni kimondottan időintervallumra szánt verziót, sőt leginkább mindig olyanokat találtam, ezért volt nehéz megoldani a saját problémámat hogy nekem csak 1 kellett. keress rá a neten simán lehet találni date range v ilyesmi. nézd egyszer meg ezt: edaterangepicker

Hy!

Először is kössz a gyors választ.

Gyorsan ránéztem amit említettél.

A probléma az, hogy nekem óra/perc is szükséges,másodperccel lenne a legjobb, de mindent azért nem lehet.

Update:

Megnéztem az extensionst, nem rossz, csak továbbra is a óra/perc hiányzik nekem.

Ha nincs más megoldás,akkor marad a következő a Yii playground-on talált megoldás.

Sorry,nincs link,túl zöldfűlű vagyok hozzá.

naja, nekem az nem volt kritérium sajnos…

Szerintem ne bánd, hogy nem volt az.Jelentősen meg tudja könnyíteni az ember életét, ha nincs kötve a karóhoz, hogy mit és hogyan.

PS.: Továbbra is várom az ötleteket, ha van valakinek.

Update:

Sikerült megcsinálni,a következő yiiplaygroundos példa tanulmányozásával és átírásával.

www.yiiplayground.cubedwater.com/index.php?r=InternationalizationModule/datetime/userinput