Установил скрипт календаря. В нём есть функция перевода на любой язык, т.е. загружается файл английской версии и рядом с каждым словом вводишь перевод на русском. Всё сделал, но календарь начал показывать вопросики и квадратики. Кодировка utf-8, база тоже. После этого удалил файл с переводом, сделал перевод ещё раз но уже локально в редакторе. Сохранил в utf-8 и залил обратно. Теперь всё работает кроме дней недели. http://calendar.julianahome.com/?id_item=2〈=ru посмотрите пожалуйста, я просто не понимаю почему так происходит. Если нужно какие-то файлы выложить, то выложу.
P.S. Теперь в редакторе скрипта когда открываю языковой файл, то иероглифы появляются
Спустя 25 минут, 2 секунды (20.02.2011 - 19:47) Invis1ble написал(а):
Rustam26
Цитата |
Error getting item name |
Цитата |
Теперь в редакторе скрипта когда открываю языковой файл, то иероглифы появляются |
какой редактор? возможно, нужно поковыряться в настройках редактора
Спустя 3 минуты, 28 секунд (20.02.2011 - 19:50) Rustam26 написал(а):
PSPad. Я уже не знаю куда смотреть.
Спустя 2 минуты (20.02.2011 - 19:52) Invis1ble написал(а):
Rustam26
ты покажи, в чем проблема, ибо не ясно. Я прохожу по ссылке, а мне выдает:
Error getting item name
ты покажи, в чем проблема, ибо не ясно. Я прохожу по ссылке, а мне выдает:
Error getting item name
Спустя 3 минуты, 23 секунды (20.02.2011 - 19:55) Rustam26 написал(а):
Цитата (Invis1ble @ 20.02.2011 - 16:52) |
Rustam26 ты покажи, в чем проблема, ибо не ясно. Я прохожу по ссылке, а мне выдает: Error getting item name |
Спустя 5 минут, 8 секунд (20.02.2011 - 20:01) Invis1ble написал(а):
Rustam26
приведи те участки кода, в которых формируются и выводятся дни недели
приведи те участки кода, в которых формируются и выводятся дни недели
Спустя 5 минут, 15 секунд (20.02.2011 - 20:06) Rustam26 написал(а):
ниже
Спустя 2 минуты, 50 секунд (20.02.2011 - 20:09) Invis1ble написал(а):
подсвети код
Спустя 9 минут, 31 секунда (20.02.2011 - 20:18) Rustam26 написал(а):
Цитата (Invis1ble @ 20.02.2011 - 17:09) |
подсвети код |
А я не знаю как это делается
Спустя 2 минуты, 13 секунд (20.02.2011 - 20:20) Invis1ble написал(а):
кнопка "PHP" на панели над окном, где сообщение пишешь. Выделяешь код и нажимаешь на эту кнопку
Спустя 4 минуты, 19 секунд (20.02.2011 - 20:25) Rustam26 написал(а):
<?php
/*
script: Ajax availability calendar
author: Chris Bolson
file: functions.inc.php
use: common functions for all pages
inst:
*/
// create calendar for given month
function draw_cal($id_item,$month,$year){
global $lang;
$month=sprintf("%02s",$month);
// define vars
$today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y')); # current timestamp - used to check if date is in past
$this_month = getDate(mktime(0, 0, 0, $month, 1, $year)); # convert month to timestamp
$first_week_day = $this_month["wday"]; # define first weekday (0-6)
$days_in_this_month = cal_days_in_month(CAL_GREGORIAN,$month,$year); # define number of days in week
$day_counter_tot = 0; # count total number of days showin INCLUDING previous and next months - use to get 6th row of dates
// get num days in previous month - used to add dates to "empty" cells
$month_last = $month-1;
$year_last = $year;
if($month_last<1){
$month_last=12;
$year_last=$year-1;
}
$days_in_last_month = cal_days_in_month(CAL_GREGORIAN,$month_last,$year_last);
// CREATE THE CALENDAR
// day column titles - using first letter of each day
if($show_week_num) $list_day_titles='<li class="weeknum_spacer"></li>';
if(AC_START_DAY=="sun"){
//$cal_row_counter=0;
for($k=0; $k<7; $k++){
$weekday = substr($lang["day_".$k.""],0,1);
$list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>';
}
}else{
//$cal_row_counter=1;
if ($first_week_day == 0) $first_week_day =7;
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if($k==7) $weekday = substr($lang["day_0"][0],0,1);
else $weekday = substr($lang["day_".$k.""],0,1);
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
// Fill the first week of the month with the appropriate number of blanks.
$j=1;
if(AC_START_DAY=="sun") $first_week_day_start = $first_week_day; # start sunday
else $first_week_day = $first_week_day-1; # start monday
if($first_week_day!=7){
if($show_week_num) $list_days.='<li class="weeknum">-</li>';
$last_month_start_num=$days_in_last_month-$first_week_day+1;
for($week_day = 0; $week_day < $first_week_day; $week_day++){
$list_days.='<li class="cal_empty">'.$last_month_start_num.'</li>';
++$last_month_start_num;
++$j;
++$day_counter_tot;
}
}
$week_day=$j;
// get bookings for this month and item from database
$booked_days=array();
$sql = "
SELECT
t1.the_date,
t2.class,
t2.desc_".LANG." AS the_state
FROM
".T_BOOKINGS." AS t1
LEFT JOIN ".T_BOOKING_STATES." AS t2 ON t2.id=t1.id_state
WHERE
t1.id_item=".$id_item."
AND MONTH(t1.the_date)=".$month."
AND YEAR(t1.the_date)=".$year."
";
if(!$res=mysql_query($sql)) die("ERROR checking id item availability dates<br>".mysql_error());
while($row=mysql_fetch_assoc($res)){
$booked_days[$row["the_date"]]=array("class"=>$row["class"],"state"=>$row["the_state"]);
}
// loop thorugh days (til max in month) to draw calendar
for($day_counter = 1; $day_counter <= $days_in_this_month; $day_counter++){
// reset xtra classes for each day
// note - these classes acumulate for each day according to state, current and clickable
$day_classes = "";
$day_title_state= " - ".$lang["available"];
// set all dates to clickable for now.... need to control this for admin OR for user side booking
$day_classes.=' clickable';
// turn date into timestamp for comparison with current timestamp (defined above)
$date_timestamp = mktime(0,0,0, $month,($day_counter),$year);
// get week number
$week_num=date("W",$date_timestamp);
if($week_num!=$last_week_num){
// new week
//$list_days .= '<li>-</li>';
}
// highlight current day
if($date_timestamp==$today_timestamp) $day_classes.=' today';
// format date for db modifying - the date is passed via ajax
$date_db = $year."-".sprintf("%02s",$month)."-".sprintf("%02s",$day_counter);
// format date for display only
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = $month."/".$day_counter."/".$year;
else $date_format = $day_counter."/".$month."/".$year;
// check if day is available
if(array_key_exists($date_db,$booked_days)){
$day_classes.=" ".$booked_days[$date_db]["class"];
$day_title_state=" - ".$booked_days[$date_db]["state"];
}
// check if date is past
if( $date_timestamp<$today_timestamp){
$day_classes.=" past"; #add "past" class to be modified via mootools if required
// overwrite clickable state if CLICKABLE_PAST is off
if(AC_ACTIVE_PAST_DATES=="off"){
// date is previous - strip out "clickable" from classes
$day_classes=str_replace(' clickable','',$day_classes);
}
}
// add weekend class - used in javascript to alter class or set opacity
$getdate=getdate($date_timestamp);
$day_num=$getdate["wday"]+1;
if ($day_num % 7 == 1) $day_classes.=' weekend';
elseif ($day_num % 6 == 1) $day_classes.=' weekend';
//'.$lang["day_".$getdate["wday"].""].'
$list_days .= '
<li class="'.$day_classes.' " id="'.$date_db.'" title="'.$date_format.$day_title_state.'">'.$day_counter.'</li>';
// reset weekday counter if 7 (6)
$week_day %= 7; # reset weekday to 0
++$week_day; # increase weekday counter
++$day_counter_tot; # add 1 to total days shown
//echo "<br>".$week_day;
if($show_week_num){
if ($week_day==1) $list_days .= '<li class="weeknum">'.$week_num.'</li>';
}
$last_week_num=$week_num;
}
// add empty days till end of row
$next_month_day=1;
/*
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
/*
echo $day_counter_tot % 6;
// now check that we have the full six rows...
if ($day_counter_tot % 6 !=0){
// add empty row
for($till_day = 1; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
// add more rows untill we get to 6
while($day_counter_tot % 6 !=0){
//add days until it does :)
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
$week_day=1;
}
// add empty dates (with next month numbers) until we get to 7
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
// put it all together (parent div defined in parent file)
$the_cal='
<div id="'.$month.'_'.$year.'" class="cal_title">'.$lang["month_".$month.""].' '.$year.'</div>
<ul class="cal_weekday">
'.$list_day_titles.'
</ul>
<ul>
'.$list_days.'
</ul>
<div class="clear"></div>
';
return $the_cal;
}
function get_cal_update_date($id_item){
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = "%m-%d-%Y";
else $date_format = "%d-%m-%Y";
$sql="SELECT DATE_FORMAT(date_mod, '".$date_format."') as date_mod FROM `".T_BOOKING_UPDATE."` WHERE id_item=".$id_item."";
$res=mysql_query($sql) or die("error getting last calendar update date");
$row=mysql_fetch_assoc($res);
return $row["date_mod"];
}
// get calendar items for select list
function sel_list_items($id_item_current){
$list_items="";
$sql="SELECT id, desc_".LANG." as the_item FROM ".T_BOOKINGS_ITEMS." WHERE state=1 ORDER BY list_order";
$res=mysql_query($sql) or die("Error checking items");
while($row=mysql_fetch_assoc($res)){
$list_items.='<option value="'.$row["id"].'"';
if($row["id"]==$id_item_current) $list_items.=' selected="selected"';
$list_items.='>'.$row["the_item"].'</option>';
}
return $list_items;
}
function list_numbers($start,$end,$num){
$list_numbers='';
for($k=$start;$k<=$end;$k++){
$list_numbers.='<option value="'.$k.'"';
if($k==$num) $list_numbers.=' selected="selected"';
$list_numbers.='>'.$k.'</option>';
}
return $list_numbers;
}
// get item title
function itemTitle($id){
$sql="SELECT desc_".LANG." as item_title FROM ".T_BOOKINGS_ITEMS." WHERE id=".$id."";
$res=mysql_query($sql) or die("Error getting item name");
$row=mysql_fetch_assoc($res);
return $row["item_title"];
}
?>
Только я не уверен, что это именно этот файл, который отвечает за вывод дней
Спустя 30 минут, 28 секунд (20.02.2011 - 20:55) Invis1ble написал(а):
Rustam26
найди все строчки, в которых есть
и замени их на
например есть
зменяешь ее на
найди все строчки, в которых есть
$weekday = substr( ... );
и замени их на
$weekday = mb_substr( ... , 'utf-8');
например есть
else $weekday = substr($lang["day_".$k.""],0,1);
зменяешь ее на
else $weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');и т.д.
Спустя 2 минуты, 14 секунд (20.02.2011 - 20:57) Rustam26 написал(а):
Спасибо, сейчас буду пробовать. Это в этом только файле или везде где найду?
Спустя 45 секунд (20.02.2011 - 20:58) Invis1ble написал(а):
наверно только в этом
Спустя 1 минута, 54 секунды (20.02.2011 - 21:00) Rustam26 написал(а):
Цитата (Invis1ble @ 20.02.2011 - 17:58) |
наверно только в этом |
Хорошо. Отпишусь
Спустя 14 минут, 25 секунд (20.02.2011 - 21:15) Rustam26 написал(а):
Получилось !!! Всё работает кроме "Воскресенье". Такая же абракадабра и ещё не всплывает название, как у остальных дней.
Спустя 6 минут, 15 секунд (20.02.2011 - 21:21) Invis1ble написал(а):
Rustam26
у тебя и до этого оно не всплывало. Попробуй
заменить на
хотя врядли это поможет....
В скрипте используется глобальная переменная $lang, а как она формируется - не видно из листинга. Ищи формирование этой переменной и пробуй разобраться, где у тебя там бок с воскресеньем
у тебя и до этого оно не всплывало. Попробуй
$weekday = mb_substr($lang["day_0"][0],0,1, 'utf-8');
заменить на
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
хотя врядли это поможет....
В скрипте используется глобальная переменная $lang, а как она формируется - не видно из листинга. Ищи формирование этой переменной и пробуй разобраться, где у тебя там бок с воскресеньем
Спустя 6 минут, 13 секунд (20.02.2011 - 21:27) Rustam26 написал(а):
Цитата (Invis1ble @ 20.02.2011 - 18:21) |
хотя врядли это поможет.... |
Помогло! Огромное спасибо. Сейчас главное было сделать адекватное отображение дней. Ещё раз большое спасибо!!!
А этот блок не так уж принципиален, хотя ради спортивного интереса постараюсь найти:)
Спустя 2 минуты, 45 секунд (20.02.2011 - 21:30) Invis1ble написал(а):
попробуй так:
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if ($k==7){
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';
}
else{
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
Спустя 11 минут, 38 секунд (20.02.2011 - 21:41) Rustam26 написал(а):
//$cal_row_counter=1;
if ($first_week_day == 0) $first_week_day =7;
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if($k==7) { $weekday = mb_substr($lang["day_0"],0,1,'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';}
else { $weekday = mb_substr($lang["day_".$k.""],0,1,'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
Вот так я сделал и получил ответ:
Parse error: syntax error, unexpected $end in /home/u78330/calendar.julianahome.com/www/ac-includes/functions.inc.php on line 268
Может я не так написал. Не вижу.
Спустя 3 минуты, 37 секунд (20.02.2011 - 21:45) Invis1ble написал(а):
Видимо ты случайно фигурную скобку затер. Еще раз:
вот это
меняешь на
вот это
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if($k==7) $weekday = substr($lang["day_0"][0],0,1);
else $weekday = substr($lang["day_".$k.""],0,1);
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
меняешь на
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if ($k==7){
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';
}
else{
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
Спустя 3 минуты, 39 секунд (20.02.2011 - 21:49) Rustam26 написал(а):
if ($first_week_day == 0) $first_week_day =7;
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if ($k==7){
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';
}
else{
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
Parse error: syntax error, unexpected $end in /home/u78330/calendar.julianahome.com/www/ac-includes/functions.inc.php on line 271
Всё так же.
Спустя 2 минуты, 17 секунд (20.02.2011 - 21:51) Invis1ble написал(а):
Скинь полностью код, в котором ошибку выдает
Спустя 6 минут, 56 секунд (20.02.2011 - 21:58) Rustam26 написал(а):
<?php
/*
script: Ajax availability calendar
author: Chris Bolson
file: functions.inc.php
use: common functions for all pages
inst:
*/
// create calendar for given month
function draw_cal($id_item,$month,$year){
global $lang;
$month=sprintf("%02s",$month);
// define vars
$today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y')); # current timestamp - used to check if date is in past
$this_month = getDate(mktime(0, 0, 0, $month, 1, $year)); # convert month to timestamp
$first_week_day = $this_month["wday"]; # define first weekday (0-6)
$days_in_this_month = cal_days_in_month(CAL_GREGORIAN,$month,$year); # define number of days in week
$day_counter_tot = 0; # count total number of days showin INCLUDING previous and next months - use to get 6th row of dates
// get num days in previous month - used to add dates to "empty" cells
$month_last = $month-1;
$year_last = $year;
if($month_last<1){
$month_last=12;
$year_last=$year-1;
}
$days_in_last_month = cal_days_in_month(CAL_GREGORIAN,$month_last,$year_last);
// CREATE THE CALENDAR
// day column titles - using first letter of each day
if($show_week_num) $list_day_titles='<li class="weeknum_spacer"></li>';
if(AC_START_DAY=="sun"){
//$cal_row_counter=0;
for($k=0; $k<7; $k++){
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>';
}
}else{
//$cal_row_counter=1;
if ($first_week_day == 0) $first_week_day =7;
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if ($k==7){
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';
}
else{
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
// Fill the first week of the month with the appropriate number of blanks.
$j=1;
if(AC_START_DAY=="sun") $first_week_day_start = $first_week_day; # start sunday
else $first_week_day = $first_week_day-1; # start monday
if($first_week_day!=7){
if($show_week_num) $list_days.='<li class="weeknum">-</li>';
$last_month_start_num=$days_in_last_month-$first_week_day+1;
for($week_day = 0; $week_day < $first_week_day; $week_day++){
$list_days.='<li class="cal_empty">'.$last_month_start_num.'</li>';
++$last_month_start_num;
++$j;
++$day_counter_tot;
}
}
$week_day=$j;
// get bookings for this month and item from database
$booked_days=array();
$sql = "
SELECT
t1.the_date,
t2.class,
t2.desc_".LANG." AS the_state
FROM
".T_BOOKINGS." AS t1
LEFT JOIN ".T_BOOKING_STATES." AS t2 ON t2.id=t1.id_state
WHERE
t1.id_item=".$id_item."
AND MONTH(t1.the_date)=".$month."
AND YEAR(t1.the_date)=".$year."
";
if(!$res=mysql_query($sql)) die("ERROR checking id item availability dates<br>".mysql_error());
while($row=mysql_fetch_assoc($res)){
$booked_days[$row["the_date"]]=array("class"=>$row["class"],"state"=>$row["the_state"]);
}
// loop thorugh days (til max in month) to draw calendar
for($day_counter = 1; $day_counter <= $days_in_this_month; $day_counter++){
// reset xtra classes for each day
// note - these classes acumulate for each day according to state, current and clickable
$day_classes = "";
$day_title_state= " - ".$lang["available"];
// set all dates to clickable for now.... need to control this for admin OR for user side booking
$day_classes.=' clickable';
// turn date into timestamp for comparison with current timestamp (defined above)
$date_timestamp = mktime(0,0,0, $month,($day_counter),$year);
// get week number
$week_num=date("W",$date_timestamp);
if($week_num!=$last_week_num){
// new week
//$list_days .= '<li>-</li>';
}
// highlight current day
if($date_timestamp==$today_timestamp) $day_classes.=' today';
// format date for db modifying - the date is passed via ajax
$date_db = $year."-".sprintf("%02s",$month)."-".sprintf("%02s",$day_counter);
// format date for display only
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = $month."/".$day_counter."/".$year;
else $date_format = $day_counter."/".$month."/".$year;
// check if day is available
if(array_key_exists($date_db,$booked_days)){
$day_classes.=" ".$booked_days[$date_db]["class"];
$day_title_state=" - ".$booked_days[$date_db]["state"];
}
// check if date is past
if( $date_timestamp<$today_timestamp){
$day_classes.=" past"; #add "past" class to be modified via mootools if required
// overwrite clickable state if CLICKABLE_PAST is off
if(AC_ACTIVE_PAST_DATES=="off"){
// date is previous - strip out "clickable" from classes
$day_classes=str_replace(' clickable','',$day_classes);
}
}
// add weekend class - used in javascript to alter class or set opacity
$getdate=getdate($date_timestamp);
$day_num=$getdate["wday"]+1;
if ($day_num % 7 == 1) $day_classes.=' weekend';
elseif ($day_num % 6 == 1) $day_classes.=' weekend';
//'.$lang["day_".$getdate["wday"].""].'
$list_days .= '
<li class="'.$day_classes.' " id="'.$date_db.'" title="'.$date_format.$day_title_state.'">'.$day_counter.'</li>';
// reset weekday counter if 7 (6)
$week_day %= 7; # reset weekday to 0
++$week_day; # increase weekday counter
++$day_counter_tot; # add 1 to total days shown
//echo "<br>".$week_day;
if($show_week_num){
if ($week_day==1) $list_days .= '<li class="weeknum">'.$week_num.'</li>';
}
$last_week_num=$week_num;
}
// add empty days till end of row
$next_month_day=1;
/*
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
/*
echo $day_counter_tot % 6;
// now check that we have the full six rows...
if ($day_counter_tot % 6 !=0){
// add empty row
for($till_day = 1; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
// add more rows untill we get to 6
while($day_counter_tot % 6 !=0){
//add days until it does :)
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
$week_day=1;
}
// add empty dates (with next month numbers) until we get to 7
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
// put it all together (parent div defined in parent file)
$the_cal='
<div id="'.$month.'_'.$year.'" class="cal_title">'.$lang["month_".$month.""].' '.$year.'</div>
<ul class="cal_weekday">
'.$list_day_titles.'
</ul>
<ul>
'.$list_days.'
</ul>
<div class="clear"></div>
';
return $the_cal;
}
function get_cal_update_date($id_item){
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = "%m-%d-%Y";
else $date_format = "%d-%m-%Y";
$sql="SELECT DATE_FORMAT(date_mod, '".$date_format."') as date_mod FROM `".T_BOOKING_UPDATE."` WHERE id_item=".$id_item."";
$res=mysql_query($sql) or die("error getting last calendar update date");
$row=mysql_fetch_assoc($res);
return $row["date_mod"];
}
// get calendar items for select list
function sel_list_items($id_item_current){
$list_items="";
$sql="SELECT id, desc_".LANG." as the_item FROM ".T_BOOKINGS_ITEMS." WHERE state=1 ORDER BY list_order";
$res=mysql_query($sql) or die("Error checking items");
while($row=mysql_fetch_assoc($res)){
$list_items.='<option value="'.$row["id"].'"';
if($row["id"]==$id_item_current) $list_items.=' selected="selected"';
$list_items.='>'.$row["the_item"].'</option>';
}
return $list_items;
}
function list_numbers($start,$end,$num){
$list_numbers='';
for($k=$start;$k<=$end;$k++){
$list_numbers.='<option value="'.$k.'"';
if($k==$num) $list_numbers.=' selected="selected"';
$list_numbers.='>'.$k.'</option>';
}
return $list_numbers;
}
// get item title
function itemTitle($id){
$sql="SELECT desc_".LANG." as item_title FROM ".T_BOOKINGS_ITEMS." WHERE id=".$id."";
$res=mysql_query($sql) or die("Error getting item name");
$row=mysql_fetch_assoc($res);
return $row["item_title"];
}
?>
Спустя 5 минут, 33 секунды (20.02.2011 - 22:03) Invis1ble написал(а):
я же говорю - скобку затер. Внимательней надо быть. Вот:
Свернутый текст
<?php
/*
script: Ajax availability calendar
author: Chris Bolson
file: functions.inc.php
use: common functions for all pages
inst:
*/
// create calendar for given month
function draw_cal($id_item,$month,$year){
global $lang;
$month=sprintf("%02s",$month);
// define vars
$today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y')); # current timestamp - used to check if date is in past
$this_month = getDate(mktime(0, 0, 0, $month, 1, $year)); # convert month to timestamp
$first_week_day = $this_month["wday"]; # define first weekday (0-6)
$days_in_this_month = cal_days_in_month(CAL_GREGORIAN,$month,$year); # define number of days in week
$day_counter_tot = 0; # count total number of days showin INCLUDING previous and next months - use to get 6th row of dates
// get num days in previous month - used to add dates to "empty" cells
$month_last = $month-1;
$year_last = $year;
if($month_last<1){
$month_last=12;
$year_last=$year-1;
}
$days_in_last_month = cal_days_in_month(CAL_GREGORIAN,$month_last,$year_last);
// CREATE THE CALENDAR
// day column titles - using first letter of each day
if($show_week_num) $list_day_titles='<li class="weeknum_spacer"></li>';
if(AC_START_DAY=="sun"){
//$cal_row_counter=0;
for($k=0; $k<7; $k++){
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>';
}
}else{
//$cal_row_counter=1;
if ($first_week_day == 0) $first_week_day =7;
for($k=1; $k<=7; $k++){
//echo "<br>".$k;
if ($k==7){
$weekday = mb_substr($lang["day_0"],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_0"].'"> '.$weekday.'</li>';
}
else{
$weekday = mb_substr($lang["day_".$k.""],0,1, 'utf-8');
$list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
}
}
}
// Fill the first week of the month with the appropriate number of blanks.
$j=1;
if(AC_START_DAY=="sun") $first_week_day_start = $first_week_day; # start sunday
else $first_week_day = $first_week_day-1; # start monday
if($first_week_day!=7){
if($show_week_num) $list_days.='<li class="weeknum">-</li>';
$last_month_start_num=$days_in_last_month-$first_week_day+1;
for($week_day = 0; $week_day < $first_week_day; $week_day++){
$list_days.='<li class="cal_empty">'.$last_month_start_num.'</li>';
++$last_month_start_num;
++$j;
++$day_counter_tot;
}
}
$week_day=$j;
// get bookings for this month and item from database
$booked_days=array();
$sql = "
SELECT
t1.the_date,
t2.class,
t2.desc_".LANG." AS the_state
FROM
".T_BOOKINGS." AS t1
LEFT JOIN ".T_BOOKING_STATES." AS t2 ON t2.id=t1.id_state
WHERE
t1.id_item=".$id_item."
AND MONTH(t1.the_date)=".$month."
AND YEAR(t1.the_date)=".$year."
";
if(!$res=mysql_query($sql)) die("ERROR checking id item availability dates<br>".mysql_error());
while($row=mysql_fetch_assoc($res)){
$booked_days[$row["the_date"]]=array("class"=>$row["class"],"state"=>$row["the_state"]);
}
// loop thorugh days (til max in month) to draw calendar
for($day_counter = 1; $day_counter <= $days_in_this_month; $day_counter++){
// reset xtra classes for each day
// note - these classes acumulate for each day according to state, current and clickable
$day_classes = "";
$day_title_state= " - ".$lang["available"];
// set all dates to clickable for now.... need to control this for admin OR for user side booking
$day_classes.=' clickable';
// turn date into timestamp for comparison with current timestamp (defined above)
$date_timestamp = mktime(0,0,0, $month,($day_counter),$year);
// get week number
$week_num=date("W",$date_timestamp);
if($week_num!=$last_week_num){
// new week
//$list_days .= '<li>-</li>';
}
// highlight current day
if($date_timestamp==$today_timestamp) $day_classes.=' today';
// format date for db modifying - the date is passed via ajax
$date_db = $year."-".sprintf("%02s",$month)."-".sprintf("%02s",$day_counter);
// format date for display only
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = $month."/".$day_counter."/".$year;
else $date_format = $day_counter."/".$month."/".$year;
// check if day is available
if(array_key_exists($date_db,$booked_days)){
$day_classes.=" ".$booked_days[$date_db]["class"];
$day_title_state=" - ".$booked_days[$date_db]["state"];
}
// check if date is past
if( $date_timestamp<$today_timestamp){
$day_classes.=" past"; #add "past" class to be modified via mootools if required
// overwrite clickable state if CLICKABLE_PAST is off
if(AC_ACTIVE_PAST_DATES=="off"){
// date is previous - strip out "clickable" from classes
$day_classes=str_replace(' clickable','',$day_classes);
}
}
// add weekend class - used in javascript to alter class or set opacity
$getdate=getdate($date_timestamp);
$day_num=$getdate["wday"]+1;
if ($day_num % 7 == 1) $day_classes.=' weekend';
elseif ($day_num % 6 == 1) $day_classes.=' weekend';
//'.$lang["day_".$getdate["wday"].""].'
$list_days .= '
<li class="'.$day_classes.' " id="'.$date_db.'" title="'.$date_format.$day_title_state.'">'.$day_counter.'</li>';
// reset weekday counter if 7 (6)
$week_day %= 7; # reset weekday to 0
++$week_day; # increase weekday counter
++$day_counter_tot; # add 1 to total days shown
//echo "<br>".$week_day;
if($show_week_num){
if ($week_day==1) $list_days .= '<li class="weeknum">'.$week_num.'</li>';
}
$last_week_num=$week_num;
}
// add empty days till end of row
$next_month_day=1;
/*
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
/*
echo $day_counter_tot % 6;
// now check that we have the full six rows...
if ($day_counter_tot % 6 !=0){
// add empty row
for($till_day = 1; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
*/
// add more rows untill we get to 6
while($day_counter_tot % 6 !=0){
//add days until it does :)
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
$week_day=1;
}
// add empty dates (with next month numbers) until we get to 7
if($week_day > 1){
for($till_day = $week_day; $till_day <=7; $till_day++){
$list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
++$next_month_day;
++$day_counter_tot; # add 1 to total days shown
}
}
// put it all together (parent div defined in parent file)
$the_cal='
<div id="'.$month.'_'.$year.'" class="cal_title">'.$lang["month_".$month.""].' '.$year.'</div>
<ul class="cal_weekday">
'.$list_day_titles.'
</ul>
<ul>
'.$list_days.'
</ul>
<div class="clear"></div>
';
return $the_cal;
}
function get_cal_update_date($id_item){
if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = "%m-%d-%Y";
else $date_format = "%d-%m-%Y";
$sql="SELECT DATE_FORMAT(date_mod, '".$date_format."') as date_mod FROM `".T_BOOKING_UPDATE."` WHERE id_item=".$id_item."";
$res=mysql_query($sql) or die("error getting last calendar update date");
$row=mysql_fetch_assoc($res);
return $row["date_mod"];
}
// get calendar items for select list
function sel_list_items($id_item_current){
$list_items="";
$sql="SELECT id, desc_".LANG." as the_item FROM ".T_BOOKINGS_ITEMS." WHERE state=1 ORDER BY list_order";
$res=mysql_query($sql) or die("Error checking items");
while($row=mysql_fetch_assoc($res)){
$list_items.='<option value="'.$row["id"].'"';
if($row["id"]==$id_item_current) $list_items.=' selected="selected"';
$list_items.='>'.$row["the_item"].'</option>';
}
return $list_items;
}
function list_numbers($start,$end,$num){
$list_numbers='';
for($k=$start;$k<=$end;$k++){
$list_numbers.='<option value="'.$k.'"';
if($k==$num) $list_numbers.=' selected="selected"';
$list_numbers.='>'.$k.'</option>';
}
return $list_numbers;
}
// get item title
function itemTitle($id){
$sql="SELECT desc_".LANG." as item_title FROM ".T_BOOKINGS_ITEMS." WHERE id=".$id."";
$res=mysql_query($sql) or die("Error getting item name");
$row=mysql_fetch_assoc($res);
return $row["item_title"];
}
?>
Спустя 10 минут, 22 секунды (20.02.2011 - 22:14) Rustam26 написал(а):
Ну, что я могу сказать... Спасибо! А невнимательность наверное из-за недосыпания. Сейчас пойду отсыпаться . Ещё раз спасибо!
ЗЫ Если кому нужен будет скрипт календаря - стучите, скину. Исправленный
ЗЫ Если кому нужен будет скрипт календаря - стучите, скину. Исправленный
Спустя 1 день, 23 часа, 6 минут, 36 секунд (22.02.2011 - 21:20) Rustam26 написал(а):
Это опять я со своим календарём, будь он неладен!
Если добавлять месяцы и дни через админку получаются кряказябры. До этого правил файл и всё работало, но нужно сделать, что бы именно через админку добавлять языки. Их будет много и переводить не я буду. Опять прошу помощи.
Этот код по-моему отвечает за админку. Могу выложить все файлы.
Вот ещё один файлик
Если добавлять месяцы и дни через админку получаются кряказябры. До этого правил файл и всё работало, но нужно сделать, что бы именно через админку добавлять языки. Их будет много и переводить не я буду. Опять прошу помощи.
Этот код по-моему отвечает за админку. Могу выложить все файлы.
<?php
// active states
function active_state($state,$id,$table,$field='state'){
global $icons,$lang;
if($state==1) $icon=$icons["tick"];
elseif($state==0) $icon=$icons["cross"];
elseif($state==2) $icon=$icons["pending"];
return '<span class="update_state" id="state_'.$id.'" rel="'.$table.'" state="'.$state.'" field="'.$field.'" title="'.$lang["click_update_state"].'">'.$icon.'</a>';
}
// get item
function get_item($table,$id,$sql_condition=""){
$sql="SELECT b.* FROM ".$table." AS b WHERE b.id='".$id."' $sql_condition LIMIT 1";
$res=mysql_query($sql) or die("Error getting item.<br>".mysql_error());
if(mysql_num_rows($res)==0) return false;
else return mysql_fetch_assoc($res);
}
// get last order number
function get_next_order($table){
$sql="SELECT list_order FROM ".$table." WHERE state=1 ORDER BY list_order DESC";
$res=mysql_query($sql) or die("Error getting highest list order");
$row=mysql_fetch_assoc($res);
return ($row["list_order"]+1);
}
// add item
function add_item($table,$values,$debug=false){
$add_data="";
foreach($values AS $field=>$val){
if($field=="password") $add_data.="`".$field."` = md5('".$val."'),";
else $add_data.="`".$field."` = '".mysql_real_escape_string($val)."',";
}
$add_data=substr($add_data,0,-1);
$add="INSERT INTO `".$table."` SET ".$add_data."";
if($debug) echo $add."<br>";
if(mysql_query($add)) return true;
else{
if($debug) echo "<br>".mysql_error();
return false;
}
}
// modify item
function mod_item($table,$id_item,$values,$debug=false){
$mod_data="";
foreach($values AS $field=>$val){
if($field=="password" && $val!="") $mod_data.="`".$field."` = md5('".$val."'),";
else $mod_data.="`".$field."` = '".mysql_real_escape_string($val)."',";
}
$mod_data=substr($mod_data,0,-1);
$update="UPDATE `".$table."` SET ".$mod_data." WHERE id='".$id_item."' LIMIT 1";
if($debug) echo $update."<br>";
if(mysql_query($update)) return true;
else{
if($debug) echo "<br>".mysql_error();
return false;
}
}
function delete_item($table,$id,$debug=false){
$del="DELETE FROM ".$table." WHERE id='".$id."' LIMIT 1";
if($debug) echo $del."<br>";
if(mysql_query($del)) return true;
else return false;
}
// multi_array_key_exists function.
function multi_array_key_exists( $needle, $haystack ) {
foreach ( $haystack as $key => $value ) :
if ( $needle == $key )
return true;
if ( is_array( $value ) ) :
if ( multi_array_key_exists( $needle, $value ) == true )
return true;
else
continue;
endif;
endforeach;
return false;
}
?>
Вот ещё один файлик
<?php
/***********************************************/
/*
File: common.inc.php
Author: cbolson.com
Script: availability calendar
Version: 3.03.03
Modified: 2010-02-11
Use: get calendar configuration data and define constants
get available languages from "lang" folder
Instructions: No need to modify this file UNLESS you don't want to define the config via a database
*/
/***********************************************/
error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors", 1);
define("CAL_VERSION","v3.03.03");
// define tables
define("T_BOOKINGS_ITEMS", "".AC_DB_PREFIX."bookings_items"); # calendar items
define("T_BOOKINGS", "".AC_DB_PREFIX."bookings"); # bookings dates
define("T_BOOKING_STATES", "".AC_DB_PREFIX."bookings_states"); # booking types (am, pm, etc)
define("T_BOOKING_UPDATE", "".AC_DB_PREFIX."bookings_last_update");# holds las calendar update date
define("T_BOOKINGS_ADMIN", "".AC_DB_PREFIX."bookings_admin_users");# admin users
define("T_BOOKINGS_CONFIG", "".AC_DB_PREFIX."bookings_config"); # general config
// get config from database - can be defined manually below if needed
$sql="SELECT cal_url,title,default_lang,start_day,date_format,click_past_dates,num_months,theme FROM ".T_BOOKINGS_CONFIG."";
$res=mysql_query($sql) or die("error getting calendar config data<br>".mysql_Error());
$row_config=mysql_fetch_assoc($res);
// define calendar constants
define("AC_CALENDAR_PUBLIC" , "".$row_config["cal_url"]."/");
define("AC_INLCUDES_PUBLIC" , "".AC_CALENDAR_PUBLIC."ac-includes/");
define("AC_TITLE" , "".$row_config["title"]."");
define("AC_DEFAULT_LANG" , "".$row_config["default_lang"]."");
define("AC_START_DAY" , "".$row_config["start_day"]."");
define("AC_DATE_DISPLAY_FORMAT" , "".$row_config["date_format"]."");
define("AC_ACTIVE_PAST_DATES" , "".$row_config["click_past_dates"]."");
define("AC_NUM_MONTHS" , "".$row_config["num_months"]."");
define("AC_THEME" , "".$row_config["theme"]."");
// define directories
define("AC_CONTENTS_ROOT" , AC_ROOT."ac-contents/");
define("AC_CONTENTS_PUBLIC" , AC_CALENDAR_PUBLIC."ac-contents/"); # content - themes, languages etc.
define("AC_DIR_LANG" , AC_CONTENTS_ROOT."lang/"); # lang folder
define("AC_DIR_ADMIN" , AC_ROOT."ac-admin/"); # administration
define("AC_DIR_AJAX" , AC_INLCUDES_PUBLIC."ajax/"); # ajax files
define("AC_DIR_JS" , AC_INLCUDES_PUBLIC."js/");
// contents for themes
define("AC_DIR_THEMES_ROOT" , AC_CONTENTS_ROOT."themes/");
define("AC_DIR_THEMES" , AC_CONTENTS_PUBLIC."themes/");
define("AC_DIR_CSS" , AC_DIR_THEMES.AC_THEME."/css/");
define("AC_DIR_IMAGES" , AC_DIR_THEMES.AC_THEME."/images/");
// logos
define("LOGO_CALENDAR_ADMIN" , '<img src="images/logo_aac.png" title="Availability Calendar - Admin">');
define("LOGO_CALENDAR" , '<img src="'.AC_DIR_IMAGES.'logo_aac.png" title="Availability Calendar">');
// get available languages from lang file
$list_languages="";
$list_languages_config="";
$list_languages_web="";
if(isset($_REQUEST["lang"])) $cur_lang=$_REQUEST["lang"];
else $cur_lang=AC_DEFAULT_LANG;
if ($handle = opendir(AC_DIR_LANG)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && substr($file,-8,4)=="lang") {
// define select list of languages for web and admin
if($_REQUEST["lang_file"]==$file) $selected=' selected="selected"';
else $selected="";
$list_languages.="<option value='".$file."' ".$selected.">".$file."</option>\n";
// get lang code
$lang_code=str_replace(".lang.php","",$file);
// for web
//select list for admin config
if($cur_lang==$lang_code) $selected=' selected="selected"';
else $selected="";
$list_languages_web.="<option value='".$lang_code."' ".$selected.">".$lang_code."</option>\n";
//select list for admin config
if($_REQUEST["lang"]==$lang_code) $selected=' selected="selected"';
elseif(AC_DEFAULT_LANG==$lang_code) $selected=' selected="selected"';
else $selected="";
$list_languages_config.="<option value='".$lang_code."' ".$selected.">".$lang_code."</option>\n";
// define lang codes for admin
$languages[$lang_code]=1;
}
}
closedir($handle);
}
// admin icons
$icons=array();
$icons["add"] = '<img src="icons/icon_add.png" alt="add">';
$icons["edit"] = '<img src="icons/icon_edit_s.png" alt="edit">';
$icons["delete"] = '<img src="icons/icon_trash_s.png" alt="delete">';
$icons["calendar"] = '<img src="icons/icon_calendar_s.png" alt="cal">';
$icons["tick"] = '<img src="icons/icon_tick.png" alt="tick">';
$icons["cross"] = '<img src="icons/icon_cross.png" alt="cross">';
$icons["pending"] = '<img src="icons/icon_pending.png" alt="pending">';
?>