кодировка CJuiDatePicker в CGridView после AjaxUpdate

Уже исправленные репорты или принятые предложения
Ответить
DuD
Сообщения: 4
Зарегистрирован: 2012.08.14, 03:45

кодировка CJuiDatePicker в CGridView после AjaxUpdate

Сообщение DuD » 2013.02.02, 21:50

Приветствую всех.
Столкнулся со следующей проблемой.
У меня в CGridView один из фильтров это поле с CJuiDatePicker.
Всё работает нормально только до AjaxUpdate. После него CJuiDatePicker отображает символьный код заместо русских обозначений дней и месяцев.
Прилагаю скрины для понимания проблемы.

До AjaxUpdate
Изображение

После ajaxUpdate
Изображение

Аватара пользователя
yiijeka
Сообщения: 2958
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: кодировка CJuiDatePicker в CGridView после AjaxUpdate

Сообщение yiijeka » 2013.02.04, 08:40

Да с этими DatePicker постоянные проблемы со слётом языка.
Я использовал ru прямо в конечных официальных файлах, поменяв их там, и они всегда по умолчанию подключаются только с русским, никаких других языков даже не пытается искать. Раз и навсегда искоренил эту проблему.

Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: кодировка CJuiDatePicker в CGridView после AjaxUpdate

Сообщение Koduc » 2013.02.06, 22:28

Это не символьный код, это "слетает" интернационализация в js и берется "дефолтовый" язык, состоящий из иероглифов.
Как вариант: в CGridView в свойство afterAjaxUpdate прописать js код либо переинициализации поля, либо применения нужного языка. Код, к сожалению не подскажу, чего-то не могу найти где делал такое.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate

Tokha
Сообщения: 23
Зарегистрирован: 2013.05.31, 08:48

Re: кодировка CJuiDatePicker в CGridView после AjaxUpdate

Сообщение Tokha » 2013.06.07, 07:35

yiijeka писал(а):Я использовал ru прямо в конечных официальных файлах, поменяв их там, и они всегда по умолчанию подключаются только с русским, никаких других языков даже не пытается искать. Раз и навсегда искоренил эту проблему.
А можно ли уточнить, что и где?

Не могу победить иероглифы. После того, как дата выбрана из календаря на русском, он японизируется и остается таким до рефреша страницы.

Это более чем странно, так как в datepicker'е по умолчанию стоит английский язык. :roll:

Пробовал в функцию AfterAjaxUpdate ставить regional["ru"],
в файле jquery.ui.min.js в функции datepicker менял regional на ["ru"] и в ините и в "defaults",
в CDatePicker.php ставил $language="ru",
ничего не помогло.

Изменение файлов фрейма не критично, так как они падают в репозиторий вместе с проектом и product-версия будет браться оттуда же.

Аватара пользователя
yiijeka
Сообщения: 2958
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: кодировка CJuiDatePicker в CGridView после AjaxUpdate

Сообщение yiijeka » 2013.06.07, 08:29

Изменение файлов фреймворка всегда критично, для этого существует наследование и переопределение...
С тех пор столько времени прошло, я уже и не сталкиваюсь с этой проблемой, в новых версиях, язык сам определяется из конфига приложения и подключает нужный язык.

На той старой версии уже не помню как и что там менял, вот такой код нашёл в архивах своих :) jquery.ui.datepicker-ru.js:

Код: Выделить всё

/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */
jQuery(function($){
        $.datepicker.regional['ru'] = {
                closeText: 'Закрыть',
                prevText: '<Пред',
                nextText: 'След>',
                currentText: 'Сегодня',
                monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
                'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
                monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
                'Июл','Авг','Сен','Окт','Ноя','Дек'],
                dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
                dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
                dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
                weekHeader: 'Нед',
                dateFormat: 'yy-mm-dd',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''};
        $.datepicker.setDefaults($.datepicker.regional['ru']);
});
Этот файл лежит в \themes\default\js\jquery.ui.datepicker-ru.js
в форме использовал код:

Код: Выделить всё

$this->widget(
                'zii.widgets.jui.CJuiDatePicker',
                array(
                    'model' => $request,
                    'attribute' => 'date_send_energoSbit',
                    'i18nScriptFile' => 'jquery.ui.datepicker-ru.js',
                )
            ); 

Код: Выделить всё

<?php
$clientScript = Yii::app()->clientScript;
$clientScript->registerScriptFile(Yii::app()->theme->baseUrl . '/js/jquery.ui.datepicker-ru.js');
?>
ещё в фильтрах нашёл:

Код: Выделить всё

'afterAjaxUpdate' => 'reinstallDatePicker',

Код: Выделить всё

'filter' => $this->widget(
                    'zii.widgets.jui.CJuiDatePicker',
                    array(
                        'model' => $model,
                        'attribute' => 'login_time',
                        'language' => 'ru',
                        'i18nScriptFile' => 'jquery.ui.datepicker-ru.js',
                        'htmlOptions' => array(
                            'id' => 'datepicker_for_login_time',
                            'size' => '10',
                        ),
                        'defaultOptions' => array( // (#3)
                            'showOn' => 'focus',
                            'dateFormat' => 'yy/mm/dd',
                            'showOtherMonths' => true,
                            'selectOtherMonths' => true,
                            'changeMonth' => true,
                            'changeYear' => true,
                            'showButtonPanel' => true,
                        )
                    ),
                    true
                ),

Код: Выделить всё

Yii::app()->clientScript->registerScript(
    're-install-date-picker',
    "
   function reinstallDatePicker(id, data) {
       $('#datepicker_for_login_time').datepicker();
       $('#datepicker_for_create_time').datepicker();
       $.datepicker.setDefaults($.datepicker.regional['ru']);
   }
   "
);
и кажется пользовался тогда http://www.yiiframework.com/wiki/318/us ... ew-filter/, повторюсь сейчас уже всё работает из коробки.

Ответить