GridView CheckboxColumn и yii2-export

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Introvert
Сообщения: 139
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Киев

GridView CheckboxColumn и yii2-export

Сообщение Introvert »

Здравствуйте! Есть печать заявок на yii2-export, как экспортировать в Excel только отмеченные чек-боксы?

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

// Массив для виджета ExportMenu
	$array_excel = [
        'dataProvider' => $dataProvider,
        'columns' => $gridColumns,
		// Имя файла .xlsx
		'filename' => 'Giptel',
		'autoWidth' => false,
		// Название полей, убираем заливку
		'styleOptions' => 
		[
			ExportMenu::FORMAT_EXCEL_X => [
			'font' => [
				'bold' => true,
				'color' => [
					'argb' => '000000',
				],
			],
			// Выравнивание по центру
			'alignment' => [
		        'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
				'vertical' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
	        ],
			'fill' => [
				'type' => PHPExcel_Style_Fill::FILL_SOLID,
				'startcolor' => [
					'argb' => 'F5F5F5',
				],
				'endcolor' => [
					'argb' => 'F5F5F5',
				],
           ],
          ],
		],
		// Отключение окна подтверждения
		'showConfirmAlert' => false,
		'exportConfig' => [
        ExportMenu::FORMAT_TEXT => false,
        ExportMenu::FORMAT_PDF => false,
        ExportMenu::FORMAT_CSV => false,
        ExportMenu::FORMAT_HTML => false,
        ],
		'onInitSheet' => function (PHPExcel_Worksheet $sheet, $grid) {
			// Альбомная ориентация
            // $sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
			//Верхний контитул
			$sheet->getHeaderFooter()->setOddHeader('&C&17 Заявки на &D в &T ' . Yii::$app->user->identity->name);
			//Нижний контитул
			$sheet->getHeaderFooter()->setOddFooter('&C&B&11Страница &P из &N');
            // Лист А4
			$sheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
			// Страницу по центру
			$sheet->getPageSetup()->setHorizontalCentered(true);
			// Повторение первой строки
			$sheet->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
			// Показать сетку
			$sheet->setPrintGridlines(true);
            // Вписать все столбцы на одну страницу
			$sheet->getPageSetup()->setFitToHeight(0);
			// $sheet->getProtection()->setSheet(false);
			// Убрать отступы
			$sheet->getPageMargins()->setLeft(0);
			$sheet->getPageMargins()->setRight(0);
			$sheet->getPageMargins()->setTop(0.4);
			$sheet->getPageMargins()->setHeader(0);
			$sheet->getPageMargins()->setBottom(0);
			$sheet->getPageMargins()->setFooter(0);
			
			$styleArray = [
				// Выравнивание по центру
				'alignment' => [
					'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
					'vertical' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
				],
			];
            //$sheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
			// Выравнивание по центру + перенос по словам (Диапазон ячеек, квадрат A2:G100)
			$sheet->getStyle('A2:G100')->applyFromArray($styleArray)->getAlignment()->setWrapText(true);
			// Ширина колонок
			// Дата
			$sheet->getColumnDimension('A')->setWidth(18);
			// Адрес
			$sheet->getColumnDimension('B')->setWidth(30);
			// Ящик
			$sheet->getColumnDimension('C')->setWidth(30);
			// Номер телефона
			$sheet->getColumnDimension('D')->setWidth(15);
			// Перенос по словам
			$sheet->getStyle('D')->getAlignment()->setWrapText(true);
			// Описание
			$sheet->getColumnDimension('E')->setWidth(45);
			// Перенос по словам
			$sheet->getStyle('E')->getAlignment()->setWrapText(true);
			// Приоритет
			$sheet->getColumnDimension('F')->setWidth(19);
			
			$ArrStyle = array(
			'font'  => array(
				'size'  => 12,
			));
			$sheet->getStyle('A')->applyFromArray($ArrStyle);
			$sheet->getStyle('B')->applyFromArray($ArrStyle);
			$sheet->getStyle('C')->applyFromArray($ArrStyle);
			$sheet->getStyle('D')->applyFromArray($ArrStyle);
			$sheet->getStyle('E')->applyFromArray($ArrStyle);
			$sheet->getStyle('F')->applyFromArray($ArrStyle);
			
        },
        'columns' => [
		    // Дата
			[
			  'attribute' => 'date',
			  'format' => 'raw',
			  'value' => function($model) {
				  return substr($model->date, 0, -3);
			  },
			],
            // Адрес (Title заявки)
            [
              'attribute' => 'title',
              'format' => 'raw',
            ],
			// Ящик
            [
			  'attribute' => 'box',
			],
			// Номер телефона
            [
			  'attribute' => 'mob',
			],
			// Описание
			[
                  'attribute' => 'text',
                  'format' => 'raw',
				  // Заменяем   на пробел
				  'value' => function($model)
				  {
                     return str_replace(" ", " ", $model->text);
				  },
            ],
            // 'type',
			// Приоритет
			[
                'attribute' => 'priority',
				'format' => 'raw',
                'value' => function($model)
				{
		           switch($model->priority)
				   {
		         	 case 1:
				        return 'Высокий';
						break;
			         case 2:
				        return 'Средний';
						break;
			         case 3:
				        return 'Низкий';
						break;
			         default :
				        return 'Неизвестный статус';
		          }
	            },
            ],
			// Автор
			[
                'attribute' => 'author',
                'format' => 'raw',
                'value' => function($model)
				{
		           switch($model->author)
				   {
		         	 case 1:
				        return 'Влад';
						break;
			         case 2:
				        return 'Евгений';
						break;
					 case 3:
				        return 'Паша';
						break;
					 case 4:
				        return 'Егор';
						break;
			         default :
				        return 'Неизвестный автор';
		          }
	            },
            ],
        ],
    ];
	
	// Экспорт в Excel на странице открытых заявок
	 if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'team' || isset($_REQUEST['type']) && $_REQUEST['type'] == 'admins') 
	 {
       // Вывод кнопок экспорт в Excel
	   echo "<br/><div align='center'>".ExportMenu::widget($array_excel)."</div><br/>";
     };	
В GridView добавил колонку:

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

// Выбор заявок Checkboxs
			[
              'class' => 'yii\grid\CheckboxColumn',
			  'checkboxOptions' => function($model, $key, $index, $widget) {
                return ['value' => $model['id'] ];
              },
              'name' => 'id'
            ],

Расширение: https://github.com/kartik-v/yii2-export
Пишу социальную сеть заявок для фирм.
Ответить