ngr
(Vboscaro)
July 29, 2012, 5:28am
1
In a View File:
I have a php array named $eventsDays with dates.
I have a calendar:
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name'=>'inline_datepicker',
'flat' => true,
'options'=> array(
'async'=>false,
'beforeShowDay'=>'js:checkEventDay'
),
'htmlOptions'=>array(
'class'=>'calendar',
),
)); ?>
I have a js function that shows the events day on calendar (checkEventDay). It works fine with an ‘explicit array’, but I do not know how it works with my php array ($eventsDays).
<?php
$cs = Yii::app()->getClientScript();
$cs->registerScript('events.script', '
var $eventsDates = ["2012-07-23","2012-07-21","2012-07-22"];
function checkEventDay(mydate) {
$checkdate = $.datepicker.formatDate("yy-mm-dd", mydate);
if ($.inArray($checkdate, $eventsDates) < 0) {
return [true,"eventday"];
} else {
return [false,"noteventday"];
}
}
'); ?>
I read about json_encode, but I couldn’n make it work.
Thanks!!!
Drini
(Idrini)
July 29, 2012, 5:34am
2
$array = array('one'=>1,'two'=>2);
echo CJSON::encode($array);
gives {"one":1,"two":2}
so you could do
<script>var foo = <?=CJSON::encode($array);?>; alert(foo.one);</script>
ngr
(Vboscaro)
July 29, 2012, 7:01pm
3
$array = array('one'=>1,'two'=>2);
echo CJSON::encode($array);
gives {"one":1,"two":2}
so you could do
<script>var foo = <?=CJSON::encode($array);?>; alert(foo.one);</script>
Thanks you! But i still have a ¿syntaxis? problem:
$cs->registerScript('events.script', "
function checkEventDay(mydate) {
var eventsDates=<?=CJSON::encode($eventsDatesArray);?>;
var checkdate = $.datepicker.formatDate('yy-mm-dd', mydate);
if ($.inArray(checkdate, eventsDates) < 0) {
return [true,'eventday'];
} else {
return [false,'noteventday'];
}
}
");
In Firebug:
[color="#FF0000 "]SyntaxError: invalid XML markup
var eventsDates=<?=CJSON::encode(Array);?>;[/color]
Printing the array in screen:
echo CJSON::encode($eventsDatesArray);
["2013-01-01","2013-01-02","2013-01-03","2013-01-04","2013-01-31"]
I have dizzy using quotes and single quotes!
Thanks you again!
$cs->registerScript('events.script', "
function checkEventDay(mydate) {
var eventsDates=".CJSON::encode($eventsDatesArray).";
var checkdate = $.datepicker.formatDate('yy-mm-dd', mydate);
if ($.inArray(checkdate, eventsDates) < 0) {
return [true,'eventday'];
} else {
return [false,'noteventday'];
}
}
");
ngr
(Vboscaro)
July 29, 2012, 8:55pm
5
twisted1919:
$cs->registerScript('events.script', "
function checkEventDay(mydate) {
var eventsDates=".CJSON::encode($eventsDatesArray).";
var checkdate = $.datepicker.formatDate('yy-mm-dd', mydate);
if ($.inArray(checkdate, eventsDates) < 0) {
return [true,'eventday'];
} else {
return [false,'noteventday'];
}
}
");
I try but it generates this:
var eventsDates=[];
Keith
(Kburton)
July 30, 2012, 10:07am
6
That just means that your $eventsDatesArray variable is an empty array. Make sure it’s being populated correctly by your PHP code.
ngr
(Vboscaro)
August 5, 2012, 5:32pm
7
Thanks to all!
Finally, my working view file:
<?php
$events = $this->getEvents($data->id); // Return an array
global $eventsDatesArray; // global... my headache <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />
foreach ($events as $event) {
$eventsDatesArray[]=$event;
}
$cs = Yii::app()->getClientScript();
$cs->registerScript('events.script', '
function checkEventDay(mydate) {
var eventsDates='.CJSON::encode($eventsDatesArray).';
var checkdate = $.datepicker.formatDate("yy-mm-dd", mydate);
if ($.inArray(checkdate, eventsDates) < 0) {
return [true,"eventday"];
} else {
return [false,"noteventday"];
}
}
');
?>
ngr
(Vboscaro)
August 5, 2012, 8:04pm
8
EASY MODE ON xD:
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name'=>'inline_datepicker',
'flat' => true,
'options'=> array(
'async'=>false,
'minDate'=>'date("Y-m-d")',
'beforeShowDay'=>'js:function (mydate) {
var eventsDates='.CJSON::encode($this->getEvents($data->id)).';
var checkdate = $.datepicker.formatDate("yy-mm-dd", mydate);
if ($.inArray(checkdate, eventsDates) < 0) {
return [true,"eventday"];
} else {
return [false,"noteventday"];
}
}'
),
'htmlOptions'=>array(
'class'=>'calendar',
'id'=>'events'.$data->id
),
)); ?>