mishanya Posted March 29, 2016 Report Share Posted March 29, 2016 (edited) 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/GU8lrd2RqaWybhttps://yadi.sk/i/8yap0FhjqaWzGhttps://yadi.sk/i/rYot5oU1qaWzphttps://yadi.sk/i/EcAAuKm6qaX3x Edited March 31, 2016 by mishanya Quote Link to post Share on other sites
Kors Posted March 30, 2016 Report Share Posted March 30, 2016 Разработка весьма симпатичная. Спасибо! Некоторые замечания:1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы к значениям по умолчанию - это неудобно.2. В колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования... Quote Link to post Share on other sites
mishanya Posted March 30, 2016 Author Report Share Posted March 30, 2016 3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования... не вижу усложнений. только ваши домыслы. 1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы к значениям по умолчанию - это неудобно.2. В колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.по п2 уже исправил, вечером перегружу архив. по п1 возможно и так. Quote Link to post Share on other sites
Kors Posted March 30, 2016 Report Share Posted March 30, 2016 3. Ваше решение требует загрузки на сервер 3M скриптов PHPExcel. Это мощнейший инструмент для работы с форматом XLS из PHP. Из него ВЫ используете практически почти что одну функцию setCellValueByColumnAndRow. А ради чего? В стандарте Simpla при импорте используется fputcsv - просто-препросто.Впрочем, это все дело вкуса. Как по мне - так неоправданное усложнение. Quote Link to post Share on other sites
mishanya Posted March 30, 2016 Author Report Share Posted March 30, 2016 (edited) UPD. выводит все покупки и сохраняет поля когда не найдены заказы, добавлен авторазмер ячеек. Edited March 30, 2016 by mishanya Quote Link to post Share on other sites
Kors Posted March 31, 2016 Report Share Posted March 31, 2016 1. Не исправлено.Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено. Quote Link to post Share on other sites
mishanya Posted March 31, 2016 Author Report Share Posted March 31, 2016 1. Не исправлено.Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено. если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить. Quote Link to post Share on other sites
Kors Posted March 31, 2016 Report Share Posted March 31, 2016 если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить. 1. Если Вам так удобнее, дело ваше. Но обычно при передаче формы на сервер все значения этой формы сохраняются независимо от того, относятся ли поля формы к полям таблицы, к фильтрации записей таблицы или еще чему другому. Делается не случайно, если чуть поразмыслить, легко понять, почему это удобно. Если надо сбросить значения полей, для этого ставят специальную кнопку - это можно увидеть и на форуме в различных разработках фильтров по свойствам. 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку. Quote Link to post Share on other sites
mishanya Posted March 31, 2016 Author Report Share Posted March 31, 2016 (edited) 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку. у меня все хорошо генерирует и в пустых закзах https://yadi.sk/i/OzaEGaYnqcxRc Edited March 31, 2016 by mishanya Quote Link to post Share on other sites
Kors Posted March 31, 2016 Report Share Posted March 31, 2016 4. Должно, зависит от настройки показа ошибок.У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:Warning: Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106И само содержимое файла - в виде HTML. Quote Link to post Share on other sites
mishanya Posted March 31, 2016 Author Report Share Posted March 31, 2016 4. Должно, зависит от настройки показа ошибок.У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:Warning: Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106И само содержимое файла - в виде HTML. да, исправил Quote Link to post Share on other sites
simplashop Posted April 6, 2016 Report Share Posted April 6, 2016 PHPExcel - адский ад для ограниченного сервера. жрет уж сильно много памяти, соответственно время выполнения тоже страдает Quote Link to post Share on other sites
baarseek Posted April 9, 2016 Report Share Posted April 9, 2016 А для чего вот этот фрагмент в ExportXLAdmin.php: if($status<4) $filter['status'] = $status; Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. Quote Link to post Share on other sites
mishanya Posted April 9, 2016 Author Report Share Posted April 9, 2016 А для чего вот этот фрагмент в ExportXLAdmin.php: if($status<4) $filter['status'] = $status; Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать. Quote Link to post Share on other sites
baarseek Posted April 9, 2016 Report Share Posted April 9, 2016 (edited) обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. Про форму - это очевидно, даже для меня, так что я и писать не стал. Edited April 9, 2016 by baarseek Quote Link to post Share on other sites
mishanya Posted April 9, 2016 Author Report Share Posted April 9, 2016 Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. я не нападаю, спрашиваю), можете убрать условие, но нужно добавить будет в tpl файл ваши статусы. сложности в чем с всеми заказами и выполненными? Quote Link to post Share on other sites
baarseek Posted April 9, 2016 Report Share Posted April 9, 2016 я не нападаю, спрашиваю), можете убрать условие, но нужно добавить будет в 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 Quote Link to post Share on other sites
mishanya Posted April 9, 2016 Author Report Share Posted April 9, 2016 Прошу прощения, что-то я очень мнительный сегодня Да, я уже так и сделал.Однако, проблема, похоже, в том, что их очень много. При попытке экспорта сыплются варнинги: 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 на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся Quote Link to post Share on other sites
baarseek Posted April 9, 2016 Report Share Posted April 9, 2016 Да, это должно решить проблему.Спасибо за экспорт, в остальном все отлично, осталось только допилить под себя вывод. Quote Link to post Share on other sites
Kors Posted April 9, 2016 Report Share Posted April 9, 2016 на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся Было бы очень интересно посмотреть.У меня как-то возникал подобный вопрос, и я с ним справиться не сумел. PHPExcel, кажется, не умеет создавать файл частями и должен сформировать все данные в оперативной памяти. И тут возникает вопрос достаточности ресурсов сервера.А вот если отказаться от PHPExcel и создавать файл в .csv, то проблемы отпадают... Quote Link to post Share on other sites
baarseek Posted April 20, 2016 Report Share Posted April 20, 2016 Появилась еще одна проблема, кажется, прямое следствие этой доработки: 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 Появляется в тех случаях, когда я на вкладке "выполненные" пытаюсь перейти на последнюю страницу и в тех случаях, когда я пользуюсь поиском на вкладке заказы. Quote Link to post Share on other sites
mishanya Posted April 20, 2016 Author Report Share Posted April 20, 2016 Появилась еще одна проблема, кажется, прямое следствие этой доработки: 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 тоесть оно пытается все заказы выбрать? помотрите что передается в лимит и какая страница передается Quote Link to post Share on other sites
baarseek Posted April 21, 2016 Report Share Posted April 21, 2016 Проверил. Точно, дело в доработке. Если меняю код в 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"); Quote Link to post Share on other sites
baarseek Posted April 21, 2016 Report Share Posted April 21, 2016 Кажется, доработка просто усугубляет проблему с количеством заказов. Вкладка "все заказы" теперь открывается, однако очень медленно, а переход на последнюю страницу на вкладке "все заказы" - не работает. Похоже, что это уже новая проблема, сейчас создам отдельную тему. Quote Link to post Share on other sites
baarseek Posted April 22, 2016 Report Share Posted April 22, 2016 (edited) Благодаря помощи в соседней теме удалось убрать ошибки, но ситуация следующая: с стандартным запросом из симплы $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), и переход на последнюю страницу в них - занимает еще больше времени. Edited April 22, 2016 by baarseek Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.