Yii 1.* экспорт в Excel
Простое и подробное описание импорта в Excel, а также работа с сущностями, которых нет в модели
Как я понял, самое простое - пользоваться встроенным механизмом yiiheart. В теме все детально расписано и есть ссылка на исходники
Для демонстрации создадим простую таблицу
генерим модель\круд
добавим пользователей
далеко не всегда в модели есть все необходимые поля. например, данные, котрые высчитываются динамически
создадим простенькую функцию определения дня рождения в \yiiHeart\protected\models\Birhtday.php
изменим \yiiHeart\protected\views\birhtday\admin.php
получаем
ну а как же с имопртом? из коробки экспорт умеет выгружать данные, которые выбраны с помощью фильтров.
но и можно добавить \yiiHeart\protected\controllers\BirhtdayController.php
и получим
P. S. кто знает как сделать проще - пишите в коментах или в теме http://yiiframework.ru/forum/viewtopic.php?f=3&t=31826
Как я понял, самое простое - пользоваться встроенным механизмом yiiheart. В теме все детально расписано и есть ссылка на исходники
Для демонстрации создадим простую таблицу
CREATE TABLE test_shema.birhtday (
id SERIAL,
name TEXT NOT NULL,
born DATE NOT NULL,
CONSTRAINT birhtday_name_key UNIQUE(name),
CONSTRAINT birhtday_pkey PRIMARY KEY(id)
)
WITH (oids = false);
COMMENT ON COLUMN test_shema.birhtday.id
IS 'id';
COMMENT ON COLUMN test_shema.birhtday.name
IS 'имя';
COMMENT ON COLUMN test_shema.birhtday.born
IS 'дата рождения';
генерим модель\круд
добавим пользователей
далеко не всегда в модели есть все необходимые поля. например, данные, котрые высчитываются динамически
создадим простенькую функцию определения дня рождения в \yiiHeart\protected\models\Birhtday.php
public static function iborn($date)
{
$cur_date = date('Y-m-d');
$iResult = floor((strtotime($cur_date) - strtotime($date)) / (3600 * 24));
if ($iResult == 0)
return 'сегодня';
elseif ($iResult > 10)
return NULL;
else
return $iResult;
}
изменим \yiiHeart\protected\views\birhtday\admin.php
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'birhtday-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'type' => 'striped hover', //bordered condensed
'columns' => array(
array('header' => 'No', 'value' => '($this->grid->dataProvider->pagination->currentPage*
$this->grid->dataProvider->pagination->pageSize
)+ ($row+1)',
'htmlOptions' => array('style' => 'width: 25px; text-align:center;'),
),
array(
'header' => 'Name',
'name' => 'name',
'type' => 'raw',
'value' => '($data->name)',
'class' => 'bootstrap.widgets.TbEditableColumn',
'headerHtmlOptions' => array('style' => 'text-align:center'),
'editable' => array(
'type' => 'textarea',
'url' => $this->createUrl('editable'),
'params' => array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken),
)
),
array(
'header' => 'дней до ДР',
'value' => 'Birhtday::iborn($data->born)',
),
array(
'class' => 'bootstrap.widgets.TbButtonColumn',
'buttons' => array
(
'view' => array
(
'url' => '$data->id."|".$data->name',
'click' => 'function(){
data=$(this).attr("href").split("|")
$("#myModalHeader").html(data[1]);
$("#myModalBody").load("' . $this->createUrl('view') . '&id="+data[0]+"&asModal=true");
$("#myModal").modal();
return false;
}',
),
)
),
),
));
получаем
ну а как же с имопртом? из коробки экспорт умеет выгружать данные, которые выбраны с помощью фильтров.
но и можно добавить \yiiHeart\protected\controllers\BirhtdayController.php
public function actionExport()
{
$model = new Birhtday;
$model->unsetAttributes(); // clear any default values
if (isset($_POST['Birhtday']))
$model->attributes = $_POST['Birhtday'];
$exportType = $_POST['fileType'];
$this->widget('ext.heart.export.EHeartExport', array(
'title' => 'List of Birhtday',
'dataProvider' => $model->search(),
'filter' => $model,
'grid_mode' => 'export',
'exportType' => $exportType,
'columns' => array(
'id',
'name',
array(
'header' => 'дней до ДР',
'value' => 'Birhtday::iborn($data->born)',
),
),
));
}
и получим
P. S. кто знает как сделать проще - пишите в коментах или в теме http://yiiframework.ru/forum/viewtopic.php?f=3&t=31826
Комментарии
Отправить комментарий