Перейти к содержимому


Фото
* * * * * 2 голосов

Экспорт заказов


Best Answer Goplyak , 01.03.2013 - 02:38

наверно из-за моей жадности или недостатка лишних средств, у меня получилось сделать, только вот не вышло общее количество товаров из заказа, поэтому решил отказаться от этого пункта, может кому понадобиться:

Создаем файл export_orders.php с содержанием:
 

<?php

chdir('../..');
require_once('api/Simpla.php');

class ExportAjax extends Simpla
{
private $columns_names = array(
'id'=> 'Заказ N',
'name'=> 'Имя пользователя',
'phone'=> 'Номер телефона',
'address'=> 'Адрес клиента',
'email'=> 'Почта клиента',
'comment'=> 'Комментарий клиента',
'discount'=> 'Скидка на заказ(если есть)',
'total_price'=> 'Общая сумма заказа',
'date'=> 'Дата заказа'
);

private $column_delimiter = ';';
private $orders_count = 5;
private $export_files_dir = 'simpla/files/export_orders/';
private $filename = 'orders.csv';

public function fetch()
{
// Эксель кушает только 1251
setlocale(LC_ALL, 'ru_RU.1251');
$this->db->query('SET NAMES cp1251');

// Страница, которую экспортируем
$page = $this->request->get('page');
if(empty($page) || $page==1)
{
$page = 1;
// Если начали сначала - удалим старый файл экспорта
if(is_writable($this->export_files_dir.$this->filename))
unlink($this->export_files_dir.$this->filename);
}

// Открываем файл экспорта на добавление
$f = fopen($this->export_files_dir.$this->filename, 'ab');

// Если начали сначала - добавим в первую строку названия колонок
if($page == 1)
{
fputcsv($f, $this->columns_names, $this->column_delimiter);
}

$filter = array();
$filter['page'] = $page;
$filter['limit'] = $this->orders_count;


// Выбираем заказы
$orders = array();
foreach($this->orders->get_orders($filter) as $u)
{
$str = array();
foreach($this->columns_names as $n=>$c)
$str[] = $u->$n;

fputcsv($f, $str, $this->column_delimiter);
}

$total_orders = $this->orders->count_orders();

if($this->orders_count*$page < $total_orders)
return array('end'=>false, 'page'=>$page, 'totalpages'=>$total_orders/$this->orders_count);
else
return array('end'=>true, 'page'=>$page, 'totalpages'=>$total_orders/$this->orders_count);

fclose($f);

}

}

$export_ajax = new ExportAjax();
$json = json_encode($export_ajax->fetch());
header("Content-type: application/json; charset=utf-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
print $json;


и кидаем его в вашсайт/simpla/ajax/

2) создаем файл export_orders.tpl с содержанием:

{capture name=tabs}
{/capture}
{$meta_title='Экспорт заказов' scope=parent}

<script>


{literal}
var in_process=false;

$(function() {

// On document load
$('input#start').click(function() {

$("#progressbar").progressbar({ value: 0 });

$("#start").hide('fast');
do_export();

});

function do_export(page)
{
page = typeof(page) != 'undefined' ? page : 1;

$.ajax({
url: "ajax/export_orders.php",
data: {page:page},
dataType: 'json',
success: function(data){

if(data && !data.end)
{
$("#progressbar").progressbar({ value: 100*data.page/data.totalpages });
do_export(data.page*1+1);
}
else
{
$("#progressbar").hide('fast');
window.location.href = 'files/export_orders/orders.csv';

}
},
error:function(xhr, status, errorThrown) {
alert(errorThrown+'\n'+xhr.responseText);
}

});

}
});
{/literal}
</script>

<style>
.ui-progressbar-value { background-image: url(design/images/progress.gif); background-position:left; border-color: #009ae2;}
#progressbar{ clear: both; height:29px; }
#result{ clear: both; width:100%;}
#download{ display:none; clear: both; }
</style>


{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$export_files_dir}
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}


<div>
<h1>Экспорт заказов</h1>
{if $message_error != 'no_permission'}
<div id='progressbar'></div>
<input class="button_green" id="start" type="button" name="" value="Экспорт заказов" />
{/if}
</div>


и ложем его в вашсайт/simpla/design/html/

3) создаем файл ExportOrdersAdmin.php с содержанием:
 

<?PHP
require_once('api/Simpla.php');

class ExportOrdersAdmin extends Simpla
{
private $export_files_dir = 'simpla/files/export_orders/';

public function fetch()
{
$this->design->assign('export_files_dir', $this->export_files_dir);
if(!is_writable($this->export_files_dir))
$this->design->assign('message_error', 'no_permission');
return $this->design->fetch('export_orders.tpl');
}

}


и ложем в вашсайт/simpla/

4) Далее создаем папку в /simpla/files/ под названием export_orders и туда ложем файл orders.csv

С наименованиями столбцов в порядке( Заказ N, Имя пользователя, Номер телефона, Адрес клиента, Почта клиента, Комментарий клиента, Скидка на заказ(если есть), Общая сумма заказа, Дата заказа )

5) выводим в админке, для этого в файле /simpla/design/html/orders.tpl в удобном для вас месте вставляем


 

{if $orders_count>0}
	<form method="post" action="{url module=ExportOrdersAdmin}" target="_blank">
	<input type="hidden" name="session_id" value="{$smarty.session.id}">
	<input type="image" src="./design/images/export_excel.png" name="export" title="Экспортировать заказы">
	</form>
	{/if}
 

 



Думаю кому-то пригодиться. Вот все файлы загрузил которые добавить надо http://yadi.sk/d/DQds6BXR2yWYE использовал.

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
19 ответов в теме

#1 Goplyak

Goplyak
  • Пользователь
  • 11 сообщений

Опубликовано 28.02.2013 - 08:10

Здравствуйте, требуется реализовать экспорт заказов в админке

пробовал сделать на примере выгрузки пользователей, сама функция идет, но дальше файл не выгружается, может кто-то подталкнет где копать? А лучше всего подскажет какие переменные отвечают за строки в екселе

Вот так на выходе хотелось бы видеть ексельный файл http://sendfile.su/769939



#2 Goplyak

Goplyak
  • Пользователь
  • 11 сообщений

Опубликовано 01.03.2013 - 02:38   Best Answer

наверно из-за моей жадности или недостатка лишних средств, у меня получилось сделать, только вот не вышло общее количество товаров из заказа, поэтому решил отказаться от этого пункта, может кому понадобиться:

Создаем файл export_orders.php с содержанием:
 

<?php

chdir('../..');
require_once('api/Simpla.php');

class ExportAjax extends Simpla
{
private $columns_names = array(
'id'=> 'Заказ N',
'name'=> 'Имя пользователя',
'phone'=> 'Номер телефона',
'address'=> 'Адрес клиента',
'email'=> 'Почта клиента',
'comment'=> 'Комментарий клиента',
'discount'=> 'Скидка на заказ(если есть)',
'total_price'=> 'Общая сумма заказа',
'date'=> 'Дата заказа'
);

private $column_delimiter = ';';
private $orders_count = 5;
private $export_files_dir = 'simpla/files/export_orders/';
private $filename = 'orders.csv';

public function fetch()
{
// Эксель кушает только 1251
setlocale(LC_ALL, 'ru_RU.1251');
$this->db->query('SET NAMES cp1251');

// Страница, которую экспортируем
$page = $this->request->get('page');
if(empty($page) || $page==1)
{
$page = 1;
// Если начали сначала - удалим старый файл экспорта
if(is_writable($this->export_files_dir.$this->filename))
unlink($this->export_files_dir.$this->filename);
}

// Открываем файл экспорта на добавление
$f = fopen($this->export_files_dir.$this->filename, 'ab');

// Если начали сначала - добавим в первую строку названия колонок
if($page == 1)
{
fputcsv($f, $this->columns_names, $this->column_delimiter);
}

$filter = array();
$filter['page'] = $page;
$filter['limit'] = $this->orders_count;


// Выбираем заказы
$orders = array();
foreach($this->orders->get_orders($filter) as $u)
{
$str = array();
foreach($this->columns_names as $n=>$c)
$str[] = $u->$n;

fputcsv($f, $str, $this->column_delimiter);
}

$total_orders = $this->orders->count_orders();

if($this->orders_count*$page < $total_orders)
return array('end'=>false, 'page'=>$page, 'totalpages'=>$total_orders/$this->orders_count);
else
return array('end'=>true, 'page'=>$page, 'totalpages'=>$total_orders/$this->orders_count);

fclose($f);

}

}

$export_ajax = new ExportAjax();
$json = json_encode($export_ajax->fetch());
header("Content-type: application/json; charset=utf-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
print $json;


и кидаем его в вашсайт/simpla/ajax/

2) создаем файл export_orders.tpl с содержанием:

{capture name=tabs}
{/capture}
{$meta_title='Экспорт заказов' scope=parent}

<script>


{literal}
var in_process=false;

$(function() {

// On document load
$('input#start').click(function() {

$("#progressbar").progressbar({ value: 0 });

$("#start").hide('fast');
do_export();

});

function do_export(page)
{
page = typeof(page) != 'undefined' ? page : 1;

$.ajax({
url: "ajax/export_orders.php",
data: {page:page},
dataType: 'json',
success: function(data){

if(data && !data.end)
{
$("#progressbar").progressbar({ value: 100*data.page/data.totalpages });
do_export(data.page*1+1);
}
else
{
$("#progressbar").hide('fast');
window.location.href = 'files/export_orders/orders.csv';

}
},
error:function(xhr, status, errorThrown) {
alert(errorThrown+'\n'+xhr.responseText);
}

});

}
});
{/literal}
</script>

<style>
.ui-progressbar-value { background-image: url(design/images/progress.gif); background-position:left; border-color: #009ae2;}
#progressbar{ clear: both; height:29px; }
#result{ clear: both; width:100%;}
#download{ display:none; clear: both; }
</style>


{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$export_files_dir}
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}


<div>
<h1>Экспорт заказов</h1>
{if $message_error != 'no_permission'}
<div id='progressbar'></div>
<input class="button_green" id="start" type="button" name="" value="Экспорт заказов" />
{/if}
</div>


и ложем его в вашсайт/simpla/design/html/

3) создаем файл ExportOrdersAdmin.php с содержанием:
 

<?PHP
require_once('api/Simpla.php');

class ExportOrdersAdmin extends Simpla
{
private $export_files_dir = 'simpla/files/export_orders/';

public function fetch()
{
$this->design->assign('export_files_dir', $this->export_files_dir);
if(!is_writable($this->export_files_dir))
$this->design->assign('message_error', 'no_permission');
return $this->design->fetch('export_orders.tpl');
}

}


и ложем в вашсайт/simpla/

4) Далее создаем папку в /simpla/files/ под названием export_orders и туда ложем файл orders.csv

С наименованиями столбцов в порядке( Заказ N, Имя пользователя, Номер телефона, Адрес клиента, Почта клиента, Комментарий клиента, Скидка на заказ(если есть), Общая сумма заказа, Дата заказа )

5) выводим в админке, для этого в файле /simpla/design/html/orders.tpl в удобном для вас месте вставляем


 

{if $orders_count>0}
	<form method="post" action="{url module=ExportOrdersAdmin}" target="_blank">
	<input type="hidden" name="session_id" value="{$smarty.session.id}">
	<input type="image" src="./design/images/export_excel.png" name="export" title="Экспортировать заказы">
	</form>
	{/if}
 

 



Думаю кому-то пригодиться. Вот все файлы загрузил которые добавить надо http://yadi.sk/d/DQds6BXR2yWYE использовал.



#3 Goplyak

Goplyak
  • Пользователь
  • 11 сообщений

Опубликовано 04.04.2013 - 11:26

ребята перестал работать импорт мой в новой версии, пиши доступ запрещен, не подскажите в каком файле подправить?



#4 Danya

Danya
  • Фрилансер
  • 908 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 15.09.2013 - 16:41

в файле simpla/IndexAdmin.php нужно добавить:

'ExportOrdersAdmin'    => 'export_orders',


#5 Danya

Danya
  • Фрилансер
  • 908 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 16.11.2013 - 10:37

Ребята, кто-то делал себе выгрузку заказов по определённым статусам?

К примеру все "ПРИНЯТЫЕ"

456546png_1841011_9748576.png

И экспорт пользователей по группам

453453png_2954932_9748656.png



#6 Sheeft

Sheeft
  • Тех. поддержка
  • 1 561 сообщений
  • Пользователь
  • Откуда:Москва

Опубликовано 16.11.2013 - 15:47

По статусам выгрузку просто добавляем поле статус, и фильтр статус и будет счастье ;)



#7 shop.miragro

shop.miragro
  • Пользователь
  • 13 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 29.03.2014 - 16:00

в файле simpla/IndexAdmin.php нужно добавить:

'ExportOrdersAdmin'    => 'export_orders',

 

Добрый день!

 

Подскажите, пожалуйста, как починить этот модуль? Все добавил, но не работает, пишет "Permission denied".

Версия Simpla 2.2.4



#8 Danya

Danya
  • Фрилансер
  • 908 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 04.04.2014 - 13:34

киньте в личку ftp, посмотрим!



#9 toxmost

toxmost
  • Пользователь
  • 1 сообщений

Опубликовано 06.04.2014 - 18:44

Добрый день!

 

Подскажите, пожалуйста, как починить этот модуль? Все добавил, но не работает, пишет "Permission denied".

Версия Simpla 2.2.4

Господа, как с этим бороться все таки???



#10 Kosjak76

Kosjak76
  • Модератор
  • 3 646 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 06.04.2014 - 23:11

Надо добавить в файл ИндексАдмин.пхп разрешения для этого модуля, я думаю, что-бы не городить огород - ордерс.

Смотрите, как там сделано, и делайте аналогично, только для своего модуля.

Примерно так:

        'ExportAjax'         => 'orders',



#11 damapic

damapic
  • Пользователь
  • 13 сообщений

Опубликовано 04.09.2014 - 07:40

в файле simpla/IndexAdmin.php нужно добавить:

'ExportOrdersAdmin'   => 'orders',
 


#12 shuba32

shuba32
  • Пользователь
  • 6 сообщений
  • Откуда:Bryansk

Опубликовано 23.09.2014 - 17:24

Ребята, кто-то делал себе выгрузку заказов по определённым статусам?

К примеру все "ПРИНЯТЫЕ"

456546png_1841011_9748576.png

И экспорт пользователей по группам

453453png_2954932_9748656.png

а кто нибудь может поточнее сказать как применить фильтр в экспорте с примером (я начинающий)



#13 Sharfik

Sharfik
  • Пользователь
  • 51 сообщений

Опубликовано 17.08.2015 - 23:57

очень дельная идея! спасибо за реализацию!

 

А что нужно добавить что бы было еще и содержимое заказа (название продукта + вариант, кол-во, стоимость за единицу, доставка, статус, оплата)?



#14 Joe

Joe
  • Пользователь
  • 57 сообщений

Опубликовано 14.10.2015 - 03:58

а в .xls этот экспорт может? Хотя тут импорт всех заказов. А нужно каждый отдельно(


Изменено: Joe, 14.10.2015 - 04:33


#15 Gloobus

Gloobus
  • Фрилансер
  • 133 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Москва

Опубликовано 14.10.2015 - 14:53

А чем CSV не устраивает? Я считаю что заморачиваться с экселем стоит только тогда, когда ппц как необходимо сложное форматирование или стили документа с последующими правками. В остальных случаях достаточно csv, ну или pdf, а в некоторых случая и голый html пойдет :)

 

Делал как то как раз выгрузку в xls перечня заказов, которые "приняты" и при этом не оплачены.

Там что-то со складом постоянно не сходилось, вот просили сделать сверять. В экселевский файл экспорта попадает номер и дата заказа, сам товар и его кол-во в этом заказе.

 

В принципе в эксель можно выгрузить что угодно, была бы фантазия :) Я помню даже кому то делал формирование в экселе что-то типа бирок заказов для почты, печатаешь, вырезаешь и клеишь готовую на посылку, а там уже индекс, адрес и кому отправлять, сумма наложного платежа прописью.

 

В эксель даже можно выгружать данные и тут же по ним строить графики, смотреть статистику.



#16 Noxter

Noxter
  • Фрилансер
  • 6 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.10.2015 - 15:33

А чем CSV не устраивает? Я считаю что заморачиваться с экселем стоит только тогда, когда ппц как необходимо сложное форматирование или стили документа с последующими правками. В остальных случаях достаточно csv, ну или pdf, а в некоторых случая и голый html пойдет :)

Все верно, я полностью согласен.
Реализовать экспорт через CSV не составит труда.

#17 DressCode

DressCode
  • Пользователь
  • 16 сообщений
  • Откуда:SPB

Опубликовано 07.11.2015 - 09:30

А чем CSV не устраивает?

 

Наверное автор собирался добавлять еще форматирование.



#18 makim925

makim925
  • Пользователь
  • 51 сообщений
  • Дизайн, Верстка, SEO, Заказчик
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 12.03.2017 - 19:32

сначала была "Permission denied" внес 'ExportOrdersAdmin'   => 'orders'


Изменено: makim925, 12.03.2017 - 19:39


#19 mukszwei

mukszwei
  • Пользователь
  • 31 сообщений

Опубликовано 17.11.2017 - 16:09

Спасибо за реализацию всё работает.

Подскажите как добавить в таблицу заказанный товар и его категорию?



#20 Dmitry86

Dmitry86
  • Пользователь
  • 130 сообщений
  • Пользователь
  • Откуда:Мск

Опубликовано 29.12.2017 - 08:53

Народ, подскажите, пожалуйста, как убирать перенос на новую строку \r\n из адреса, комментария к заказу и примечания при экспорте? Заменить просто на пробел. Спасибо!






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых