Здравствуйте !
CGridView выводит надпись типа:
Displaying 1-5 of 5 result(s).
как ее сделать на русском языке.
Спасибо!
Здравствуйте !
CGridView выводит надпись типа:
Displaying 1-5 of 5 result(s).
как ее сделать на русском языке.
Спасибо!
В protected/config/main.php добавляем:
'sourceLanguage'=>'ru',
и теперь на русском не только грид, но и все сообщения фреймворка
Ух ты, класс!
Спасибо огромное!
А можно еще вопросики:
как-то изменять ширину колонок, например колонка ‘№’ - 50, а колонка ‘name’ - 350 - ну что-то вроде того.
изменить оформление содержимого (например выводит дату - переносит типа так
2012-01-
25
к примеру добавить что-то вроде <nobr> и вообще какие-то теги, оформление в ячейку и т.п.
Спасибо!
Вот небольшой пример:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'order-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'rowCssClassExpression'=>'$data->status == Order::STATUS_DONE ? "order-grid-row-done" : "order-grid-row-pending"',
'columns'=>array(
array(
'name'=>'order_id',
'htmlOptions'=>array('style'=>'width: 50px; text-align: center;'),
),
array(
'name'=>'user_id',
'htmlOptions'=>array('style'=>'width: 100px; text-align: center;'),
),
array(
'type'=>'raw',
'name'=>'search_user',
'value'=>'CHtml::link($data->user->full_name, array("/user/user/update", "id"=>$data->user->user_id))',
'htmlOptions'=>array('style'=>'text-align: center;'),
),
array(
'name'=>'item_count',
'htmlOptions'=>array('style'=>'width: 100px; text-align: center;'),
),
array(
'name'=>'price',
'htmlOptions'=>array('style'=>'width: 100px; text-align: center;'),
),
array(
'name'=>'status',
'value'=>'$data->getStatusLabel()',
'filter'=>$model->statusLabels(),
'htmlOptions'=>array('style'=>'text-align: center;'),
),
array(
'name'=>'date',
'htmlOptions'=>array('style'=>'width: 130px; text-align: center;'),
),
array(
'class'=>'CButtonColumn',
'template'=>'{view} {delete}',
'htmlOptions'=>array('style'=>'width: 75px;'),
'buttons'=>array(
'view'=>array(
'label'=>'Просмотр корзины',
'url'=>'url("/cart/order/view", array("id"=>$data->order_id))',
'imageUrl'=>url().'/images/cart.png',
'options'=>array(
'ajax'=>array(
'type'=>'GET',
'url'=>"js:$(this).attr('href')",
'success'=>'js:function(data){$("#dlg-cart-content").html(data); $("#dlg-cart").dialog("open");}',
),
),
),
),
),
),
));
?>
А вот небольшая документация: http://www.yiiframework.com/doc/api/1.1/CGridView
Так вроде смотрел, (точнее эти страницы и не закрываю никогда), вроде и расписано много, но все равно все нюансы понятны тому, кто уже знает, а кто только изучает, тому понятнее на таких примерах:
Просто ОГРОМНОЕ спасибо!
Можно еще один вопрос?
несколько значений в гриде выглядят так
array(
'name'=>'owner',
'value'=>'$data->getOwnerName($data->owner)',
'headerHtmlOptions'=>array('class'=>'myhead2'),
),
array(
'name'=>'dep_head',
'value'=>'$data->getDepHead($data->owner)',
'headerHtmlOptions'=>array('class'=>'myhead2'),
),
функция getOwner - берет номер работника (число из поля owner) и выводит фамилию
функция getDepHead - берет в базе номер работника и по нему из другой базы определяет начальника отдела (фамилию).
все хорошо, в гриде пишет что нужно.
Поиск реализован функцией search - создано автоматически при помощи gii как стандартный crud.
В поиске в форме сделано так:
echo $form->label($model,'owner');
echo $form->dropDownList($model, 'owner', $model->getOwnersList());
echo $form->label($model,'dep_head');
echo $form->dropDownList($model, 'dep_head', $model->getOwnersList());
getOwnersList - возвращает список всех работников, он общий.
При выборе owner - делает отбор, но поле owner как раз есть в базе
Как сделать, чтобы отбиралось по dep_head - в гриде оно есть, в базе нет?
Спасибо!
Нужно завести в классе модели поле dep_head, сделать его "safe" для сценария "search", а в методе search() уже добавлять условия (join, with и т.п.) в зависимости от значения $this->dep_head.
Сделал так:
class CmrClients extends CActiveRecord
{
public $dep_head;
public function rules()
{
return array(
...
array('dep_head', 'safe', 'on'=>'search'),
);
}
public function search($id=0)
{
...
$criteria->compare('dep_head',1);
Решил проверить и поставил фиксированное значение 1 - руководитель.
Выдает:
CDbException
CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42S22]: Column not found: 1054
Unknown column 'dep_head' in 'where clause'. The SQL statement executed was:
SELECT COUNT(*) FROM `cmr_clients` `t` WHERE dep_head=:ycp0
т.е. он все равно dep_head как поле в таблице ищет.
как правильно сделать, подскажите, что-то непонятно…
Внутри search() нужно делать join таблиц или использовать with, если у вас прописаны связи в relations():
public function search($id=0)
{
$criteria->with = array('otdel.nachalnik');
$criteria->compare('nachalnik.name', 1);
Я названий и структуры таблиц не знаю, поэтому написал так, как написал
собственно понял, хотя реализовал только теперь то, что нужно. Разбил на несколько коротких запросов.
Зато теперь понял, как оно делается Не так страшно, как сразу казалось.
Проблема была в том, что в кондишине я указывал название поля dep_head, которого нет, а нужно было сравнивать с переменной $this->dep_head, которую я объявил. а в качестве поля - то, которое существует, т.к. оно идет в sql запрос.
Спасибо ОГРОМНОЕ-ПРЕОГРОМНОЕ !!!
Для одной формы понадобилось, чтобы все было в кодировке cp-1251, как тогда быть?
пробовал добавлять ‘charset’ => ‘Windows-1251’, в конфиг - да, все ок, страница в кодировке 1251, но сообщения в том же CGrid-e в ‘кракозябликах’
(Рлементы 1—25 РёР· 475) типа такого
Что сделать?
Спасибо!
Файлы с переводами в кодировке utf8, вот и думайте, а надо ли вам оно менять их
оно, конечно, не надо…
тогда вопрос по-другому:
есть база в кодировке cp-1251 (и это изменить нельзя), как ее приделать к CGrid-у (или скорее к yii), чтобы выводило на экран в utf-8, а база была в cp-1251?
где-то так…
Multibyte String
чуточку смешно
не что такое uft-8 или что такое кодировка или т.п.
вопрос как сделать, чтобы yii на ходу менял кодировку при работе с базой
А что тут смешного? Это была наводка куда смотреть… вот мой пример, только каждую колонку руками нужно настривать…
'columns'=>array(
array(
'type'=>'raw',
'name'=>'alias',
'value'=>'mb_convert_encoding($data->alias, "UTF-8", "UCS-2")',
),
..........................
Конечно, способ расточительный… но это для примера.
спасибо, такой способ в принципе не нужен.
и я же сказал вопрос не в том, как конвертируются кодировки,
вопрос в том, чтобы "на лету" преобразовывалась кодировка, без моего участия
вполне возможно, чтобы база была в cp-1251, а отдавалось все в utf-8, и все это прозрачно для кода