mishanya Опубликовано 29 марта, 2016 Жалоба Поделиться Опубликовано 29 марта, 2016 (изменено) 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 Изменено 31 марта, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 30 марта, 2016 Жалоба Поделиться Опубликовано 30 марта, 2016 Разработка весьма симпатичная. Спасибо! Некоторые замечания:1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы к значениям по умолчанию - это неудобно.2. В колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования... Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 марта, 2016 Автор Жалоба Поделиться Опубликовано 30 марта, 2016 3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования... не вижу усложнений. только ваши домыслы. 1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы к значениям по умолчанию - это неудобно.2. В колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.по п2 уже исправил, вечером перегружу архив. по п1 возможно и так. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 30 марта, 2016 Жалоба Поделиться Опубликовано 30 марта, 2016 3. Ваше решение требует загрузки на сервер 3M скриптов PHPExcel. Это мощнейший инструмент для работы с форматом XLS из PHP. Из него ВЫ используете практически почти что одну функцию setCellValueByColumnAndRow. А ради чего? В стандарте Simpla при импорте используется fputcsv - просто-препросто.Впрочем, это все дело вкуса. Как по мне - так неоправданное усложнение. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 марта, 2016 Автор Жалоба Поделиться Опубликовано 30 марта, 2016 (изменено) UPD. выводит все покупки и сохраняет поля когда не найдены заказы, добавлен авторазмер ячеек. Изменено 30 марта, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2016 Жалоба Поделиться Опубликовано 31 марта, 2016 1. Не исправлено.Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 31 марта, 2016 Автор Жалоба Поделиться Опубликовано 31 марта, 2016 1. Не исправлено.Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено. если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2016 Жалоба Поделиться Опубликовано 31 марта, 2016 если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить. 1. Если Вам так удобнее, дело ваше. Но обычно при передаче формы на сервер все значения этой формы сохраняются независимо от того, относятся ли поля формы к полям таблицы, к фильтрации записей таблицы или еще чему другому. Делается не случайно, если чуть поразмыслить, легко понять, почему это удобно. Если надо сбросить значения полей, для этого ставят специальную кнопку - это можно увидеть и на форуме в различных разработках фильтров по свойствам. 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 31 марта, 2016 Автор Жалоба Поделиться Опубликовано 31 марта, 2016 (изменено) 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку. у меня все хорошо генерирует и в пустых закзах https://yadi.sk/i/OzaEGaYnqcxRc Изменено 31 марта, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2016 Жалоба Поделиться Опубликовано 31 марта, 2016 4. Должно, зависит от настройки показа ошибок.У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:Warning: Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106И само содержимое файла - в виде HTML. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 31 марта, 2016 Автор Жалоба Поделиться Опубликовано 31 марта, 2016 4. Должно, зависит от настройки показа ошибок.У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:Warning: Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106И само содержимое файла - в виде HTML. да, исправил Цитата Ссылка на сообщение Поделиться на другие сайты
simplashop Опубликовано 6 апреля, 2016 Жалоба Поделиться Опубликовано 6 апреля, 2016 PHPExcel - адский ад для ограниченного сервера. жрет уж сильно много памяти, соответственно время выполнения тоже страдает Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 9 апреля, 2016 Жалоба Поделиться Опубликовано 9 апреля, 2016 А для чего вот этот фрагмент в ExportXLAdmin.php: if($status<4) $filter['status'] = $status; Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 9 апреля, 2016 Автор Жалоба Поделиться Опубликовано 9 апреля, 2016 А для чего вот этот фрагмент в ExportXLAdmin.php: if($status<4) $filter['status'] = $status; Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать. Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 9 апреля, 2016 Жалоба Поделиться Опубликовано 9 апреля, 2016 (изменено) обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. Про форму - это очевидно, даже для меня, так что я и писать не стал. Изменено 9 апреля, 2016 пользователем baarseek Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 9 апреля, 2016 Автор Жалоба Поделиться Опубликовано 9 апреля, 2016 Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. я не нападаю, спрашиваю), можете убрать условие, но нужно добавить будет в tpl файл ваши статусы. сложности в чем с всеми заказами и выполненными? Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 9 апреля, 2016 Жалоба Поделиться Опубликовано 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 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 9 апреля, 2016 Автор Жалоба Поделиться Опубликовано 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 на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 9 апреля, 2016 Жалоба Поделиться Опубликовано 9 апреля, 2016 Да, это должно решить проблему.Спасибо за экспорт, в остальном все отлично, осталось только допилить под себя вывод. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 9 апреля, 2016 Жалоба Поделиться Опубликовано 9 апреля, 2016 на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся Было бы очень интересно посмотреть.У меня как-то возникал подобный вопрос, и я с ним справиться не сумел. PHPExcel, кажется, не умеет создавать файл частями и должен сформировать все данные в оперативной памяти. И тут возникает вопрос достаточности ресурсов сервера.А вот если отказаться от PHPExcel и создавать файл в .csv, то проблемы отпадают... Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 20 апреля, 2016 Жалоба Поделиться Опубликовано 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 Появляется в тех случаях, когда я на вкладке "выполненные" пытаюсь перейти на последнюю страницу и в тех случаях, когда я пользуюсь поиском на вкладке заказы. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 20 апреля, 2016 Автор Жалоба Поделиться Опубликовано 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 тоесть оно пытается все заказы выбрать? помотрите что передается в лимит и какая страница передается Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 21 апреля, 2016 Жалоба Поделиться Опубликовано 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"); Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 21 апреля, 2016 Жалоба Поделиться Опубликовано 21 апреля, 2016 Кажется, доработка просто усугубляет проблему с количеством заказов. Вкладка "все заказы" теперь открывается, однако очень медленно, а переход на последнюю страницу на вкладке "все заказы" - не работает. Похоже, что это уже новая проблема, сейчас создам отдельную тему. Цитата Ссылка на сообщение Поделиться на другие сайты
baarseek Опубликовано 22 апреля, 2016 Жалоба Поделиться Опубликовано 22 апреля, 2016 (изменено) Благодаря помощи в соседней теме удалось убрать ошибки, но ситуация следующая: с стандартным запросом из симплы $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), и переход на последнюю страницу в них - занимает еще больше времени. Изменено 22 апреля, 2016 пользователем baarseek Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.