Отмечаю галочками поля. по нажатию на кнопку,которая во Вью выгляди так:
Код: Выделить всё
<?= Html::a('<span class="glyphicon glyphicon-export"></span> Экспорт в XML',
array_merge(['exportxml'], Yii::$app->request->queryParams),
['class' => 'btn btn-default', 'id' => 'export']) ?>
Код: Выделить всё
$script = <<< JS
$("#export").on("click", function(e){
e.preventDefault();
var keys = $(".grid-view").yiiGridView("getSelectedRows");
$.ajax({
url: "exportxml",
type: "POST",
data: {id: keys},
success: function(data){
}
})
});
JS;
$this->registerJs($script/*, yii\web\View::POS_END*/);
Код: Выделить всё
public function actionExportxml()
{
//-- выбираем нужные данные
foreach (Yii::$app->request->post('id') as $obj) {
$data[] = $obj;
}
$model = Object::findAll($data);
//-- создаём XML-документ нужной версии и кодировки
$xml = new \DOMDocument('1.0', 'UTF-8');
// Создаём корневой элемент
$root = $xml->createElement('Obj');
$xml->appendChild($root);
foreach ($model as $record) {
$rec = $xml->createElement('rec');
$element = $xml->createElement('String1', htmlspecialchars($record['string1']));
$rec->appendChild($element);
$root->appendChild($rec);
//и тут много подобных строк xml-документа
}
$file_name = $data[0];
if (count($data) > 1) {
$file_name = $file_name . '-' . $data[count($data) - 1];
}
$file_name = $file_name . '.xml';
$file = $xml->saveXML();
if ($file == FALSE) {
exit();
}
return Yii::$app->response->sendContentAsFile($file, $file_name);
}
Вдальнейшем это переедет в модель, за это не пинайте.
Так вот id выбираются правильно и они попадают в контроллер, и создается неоходимый массив. Но файл на сохранение не открывается. Т.е. в дебаге я вижу правильно сформированную структуру xml-документа, а в файл на сохранение это дело не выводится. Методом GET так же не получается.
Изначально было без JS. Там все работало и сохранялось, но там грузились все id отображенные на странице, а мне нужны только отмеченные.