Показать сообщение отдельно
Старый 12.01.2011, 18:46   #6
savao
Новенький
 
Регистрация: 26.12.2010
Сообщений: 26
По умолчанию

Проблема нашла свое решение.
Calendar Base берет эти названия из локали на сервере. Поэтому есть два варианта, поменять значения в локали, но это черевато большими проблемами, либо переписать сами функции плагина которые выдают даты. Я пошел вторым путем, изменил функции в файле /cal/res/PEAR/Date/Calc.php там нужно поменять всего две функции по сути. Так как названия дней недели берутся то правильно, просто их обрезание делается с ошибкой(когда отображаются укороченные названия дней недели). В первой функции
PHP код:
    function getMonthNames()
    {
        
$months = array();
        
$months[1] = "Январь";
        
$months[2] = "Февраль";
        
$months[3] = "Март";
        
$months[4] = "Апрель";
        
$months[5] = "Май";
        
$months[6] = "Июнь";
        
$months[7] = "Июль";
        
$months[8] = "Август";
        
$months[9] = "Сентябрь";
        
$months[10] = "Октябрь";
        
$months[11] = "Ноябрь";
        
$months[12] = "Декабрь";
 
//       for ($i = 1; $i < 13; $i++) {
 //           $months[$i] = strftime('%B', mktime(0, 0, 0, $i, 1, 2001));
 //       }
        
return $months;
    } 
Здесь закоменчено то что нужно убрать(то что было в исходном файле).
Вторая функция:
PHP код:
    function getWeekDays()
    {
        
$weekdays = array();
        
$weekdays[1] = "Понедельник";
        
$weekdays[2] = "Вторник";
        
$weekdays[3] = "Среда";
        
$weekdays[4] = "Четверг";
        
$weekdays[5] = "Пятница";
        
$weekdays[6] = "Суббота";
        
$weekdays[0] = "Воскресенье";
//        for ($i = 0; $i < 7; $i++) {
//            $weekdays[$i] = strftime('%A', mktime(0, 0, 0, 1, $i, 2001));
//        }
        
return $weekdays;
    } 
Это можно не делать, так как из локали берутся правильные названия дней недели, но я добавил чтобы дни недели были с большой буквы.
Третья функция:
PHP код:
    function getWeekdayAbbrname($day 0$month 0$year 0$length 3)
    {
        if (empty(
$year)) {
            
$year Date_Calc::dateNow('%Y');
        }
        if (empty(
$month)) {
            
$month Date_Calc::dateNow('%m');
        }
        if (empty(
$day)) {
            
$day Date_Calc::dateNow('%d');
        }
        switch(
Date_Calc::getWeekdayFullname($day$month$year)) {
                    case 
'Понедельник':
                        return 
'Пн';
                        break;
                    case 
'Вторник':
                        return 
'Вт';
                        break;
                    case 
'Среда':
                        return 
'Ср';
                        break;
                    case 
'Четверг':
                        return 
'Чт';
                        break;
                    case 
'Пятница':
                        return 
'Пт';
                        break;
                    case 
'Суббота':
                        return 
'Сб';
                        break;
                    case 
'Воскресенье':
                        return 
'Вс';
                        break;
                    default:
                     return 
substr(Date_Calc::getWeekdayFullname($day$month$year),04);
        }
    } 
Это как раз для того чтобы сокращенные названия дней недели выводились корректно.
savao вне форума   Ответить с цитированием