Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

1. добавляем в api/Orders.php в ф-ю get_orders ПОСЛЕ
$id_filter = '';

код

$date_from = '';
$date_to = '';
$order_by = '';

2. добавить в api/Orders.php в ф-ю get_orders фильтры (примерно 60я строка)

/***************************/
if($filter['order_by']==1)
	$order_by  = $this->db->placehold('ORDER BY id ASC');
else
	$order_by  = $this->db->placehold('ORDER BY id DESC');

if(isset($filter['date_from']))
	$date_from = $this->db->placehold('AND DATE(o.date) >= ?', $filter['date_from']);
if(isset($filter['date_to']))
	$date_to = $this->db->placehold('AND DATE(o.date) <= ?', $filter['date_to']);		
/***************************/

3. заменяем в api/Orders.php в ф-и get_orders следующий участок кода (примерно строка 88)

$id_filter $status_filter $user_filter $keyword_filter $label_filter $modified_since_filter GROUP BY o.id ORDER BY status, id DESC $sql_limit", "%Y-%m-%d");

на код

$id_filter $date_from $date_to $status_filter $user_filter $keyword_filter $label_filter $modified_since_filter GROUP BY o.id $order_by $sql_limit", "%Y-%m-%d");
4. в simpla/IndexAdmin.php ПОСЛЕ
'OrdersAdmin'         => 'orders',

добавляем

'ExportXLAdmin'	      => 'orders',

5. в simpla/design/html/orders.tpl ПОСЛЕ

<a class="add" href="{url module=OrderAdmin}">Добавить заказ</a>

добавляем ссылку на экспорт

<a href="{url module=ExportXLAdmin}" style="float: right; margin-right: 44px;" title="Выгрузить все заказы"><img src="./design/images/export_excel.png"></a>

6. закидываем из архива в /simpla все из папки simpla

 

 

Скрины:

https://yadi.sk/i/GU8lrd2RqaWyb

https://yadi.sk/i/8yap0FhjqaWzG

https://yadi.sk/i/rYot5oU1qaWzp

https://yadi.sk/i/EcAAuKm6qaX3x

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 55
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Разработка весьма симпатичная. Спасибо!

 

Некоторые замечания:

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

2. В  колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.

3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования...

Ссылка на сообщение
Поделиться на другие сайты

 3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования...

 

не вижу усложнений. только ваши домыслы.

 

 

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

2. В  колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.

по п2 уже исправил, вечером перегружу архив. по п1 возможно и так.

Ссылка на сообщение
Поделиться на другие сайты

3. Ваше решение требует загрузки на сервер 3M скриптов PHPExcel.  Это мощнейший инструмент для работы с форматом XLS из PHP. Из него ВЫ используете практически почти что одну функцию setCellValueByColumnAndRow.  А ради чего? В стандарте Simpla при импорте  используется fputcsv - просто-препросто.

Впрочем,  это все дело вкуса. Как по мне  - так неоправданное усложнение.

Ссылка на сообщение
Поделиться на другие сайты

UPD. выводит все покупки и сохраняет поля когда не найдены заказы, добавлен авторазмер ячеек.

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

1. Не исправлено.

Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено.

Ссылка на сообщение
Поделиться на другие сайты

1. Не исправлено.

Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено.

 

если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить.

Ссылка на сообщение
Поделиться на другие сайты

если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить.

 

1. Если Вам так удобнее, дело ваше. Но обычно при передаче формы на сервер все значения этой формы сохраняются независимо от того, относятся ли поля формы к полям таблицы, к фильтрации записей таблицы или еще чему другому. Делается не случайно, если чуть поразмыслить, легко понять, почему это удобно. Если надо сбросить значения полей, для этого ставят специальную кнопку - это можно увидеть и на форуме в различных разработках фильтров по свойствам.

 

4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку.

Ссылка на сообщение
Поделиться на другие сайты

 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку.

 

у меня все хорошо генерирует и в пустых закзах https://yadi.sk/i/OzaEGaYnqcxRc

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

4. Должно, зависит от настройки показа ошибок.

У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:

Warning:  Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106

И само содержимое файла - в виде HTML.

Ссылка на сообщение
Поделиться на другие сайты

4. Должно, зависит от настройки показа ошибок.

У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:

Warning:  Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106

И само содержимое файла - в виде HTML.

 

да, исправил 

Ссылка на сообщение
Поделиться на другие сайты

PHPExcel - адский ад для ограниченного сервера. жрет уж сильно много памяти, соответственно время выполнения тоже страдает

Ссылка на сообщение
Поделиться на другие сайты

А для чего вот этот фрагмент в ExportXLAdmin.php:

if($status<4)
$filter['status'] = $status;

Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. 

Ссылка на сообщение
Поделиться на другие сайты

А для чего вот этот фрагмент в ExportXLAdmin.php:

if($status<4)
$filter['status'] = $status;

Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. 

 

обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.

Ссылка на сообщение
Поделиться на другие сайты

обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.

Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. Про форму - это очевидно, даже для меня, так что я и писать не стал.

Изменено пользователем baarseek
Ссылка на сообщение
Поделиться на другие сайты

Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе.

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

Прошу прощения, что-то я очень мнительный сегодня ;) Да, я уже так и сделал.

Однако, проблема, похоже, в том, что их очень много. При попытке экспорта сыплются варнинги:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 0, 8774 ] in htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in htdocs/api/Orders.php on line 105
Ссылка на сообщение
Поделиться на другие сайты

 

Прошу прощения, что-то я очень мнительный сегодня ;) Да, я уже так и сделал.

Однако, проблема, похоже, в том, что их очень много. При попытке экспорта сыплются варнинги:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 0, 8774 ] in htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in htdocs/api/Orders.php on line 105

 

на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся

Ссылка на сообщение
Поделиться на другие сайты

Да, это должно решить проблему.

Спасибо за экспорт, в остальном все отлично, осталось только допилить под себя вывод.

Ссылка на сообщение
Поделиться на другие сайты

на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся

 

Было бы очень интересно посмотреть.

У меня как-то возникал подобный вопрос, и я с ним справиться не сумел. PHPExcel, кажется, не умеет создавать файл частями и должен сформировать все данные в оперативной памяти. И тут возникает вопрос достаточности ресурсов сервера.

А вот если отказаться от PHPExcel  и создавать файл в .csv, то проблемы отпадают...

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Появилась еще одна проблема, кажется, прямое следствие этой доработки:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 8840, 40 ] in /htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in /htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in /htdocs/api/Orders.php on line 105

Появляется в тех случаях, когда я на вкладке "выполненные" пытаюсь перейти на последнюю страницу и в тех случаях, когда я пользуюсь поиском на вкладке заказы.

Ссылка на сообщение
Поделиться на другие сайты

Появилась еще одна проблема, кажется, прямое следствие этой доработки:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 8840, 40 ] in /htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in /htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in /htdocs/api/Orders.php on line 105

Появляется в тех случаях, когда я на вкладке "выполненные" пытаюсь перейти на последнюю страницу и в тех случаях, когда я пользуюсь поиском на вкладке заказы.

 

кажется или точно? попробуйте удалить ее и посмореть. вообще модуль никак не должен влиять на выборку заказов на странице заказов. сколько всего у вас их? у вас LIMIT 0, 8774 тоесть оно пытается все заказы выбрать? помотрите что передается в лимит и какая страница передается

Ссылка на сообщение
Поделиться на другие сайты

Проверил. Точно, дело в доработке. Если меняю код в api/orders.php на старый - все окей. Всего заказов 9500 тысяч, примерно.

$id_filter $status_filter $user_filter $keyword_filter $label_filter $modified_from_filter GROUP BY o.id ORDER BY status, id DESC $sql_limit", "%Y-%m-%d");
Ссылка на сообщение
Поделиться на другие сайты

Кажется, доработка просто усугубляет проблему с количеством заказов. Вкладка "все заказы" теперь открывается, однако очень медленно, а переход на последнюю страницу на вкладке "все заказы" - не работает. Похоже, что это уже новая проблема, сейчас создам отдельную тему.

Ссылка на сообщение
Поделиться на другие сайты

Благодаря помощи в соседней теме удалось убрать ошибки, но ситуация следующая: с стандартным запросом из симплы 

$id_filter $status_filter $user_filter $keyword_filter $label_filter $modified_from_filter GROUP BY o.id ORDER BY status, id DESC $sql_limit", "%Y-%m-%d");

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

$id_filter $date_from $date_to $status_filter $user_filter $keyword_filter $label_filter $modified_from_filter ORDER BY status, id DESC $sql_limit", "%Y-%m-%d");

выгружаются все заказы, но вкладка "все заказы" и "выполненные" открывается очень долго (иногда падая в internal server error), и переход на последнюю страницу в них - занимает еще больше времени.

Изменено пользователем baarseek
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...