Yii 1.* экспорт в Excel

Простое и подробное описание импорта в Excel, а также работа с сущностями, которых нет в модели


Как я понял, самое простое -  пользоваться встроенным механизмом 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















Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Учебник yii2