Здравствуйте !
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, и все это прозрачно для кода