Jump to content

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


Go to solution Solved by Goplyak,

Recommended Posts

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

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

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

Link to post
Share on other sites
  • Solution

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

Создаем файл 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 использовал.

Link to post
Share on other sites
  • 1 month later...
  • 5 months later...
  • 2 months later...
  • 4 months later...

 

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

'ExportOrdersAdmin'    => 'export_orders',

 

Добрый день!

 

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

Версия Simpla 2.2.4

Link to post
Share on other sites

Добрый день!

 

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

Версия Simpla 2.2.4

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

Link to post
Share on other sites

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

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

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

        'ExportAjax'         => 'orders',

Link to post
Share on other sites
  • 4 months later...
  • 3 weeks later...

 

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

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

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

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

Link to post
Share on other sites
  • 10 months later...

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

 

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

Link to post
Share on other sites
  • 1 month later...

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

 

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

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

 

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

 

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

Link to post
Share on other sites

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

Все верно, я полностью согласен.

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

Link to post
Share on other sites
  • 4 weeks later...
  • 1 year later...
  • 8 months later...
  • 1 month later...

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...