- moduł został kompletnie przepisany pod PrestaShop 9.x
- dodano sporo nowych funkcji / opcji w module
- kasowanie procesem ajaxowym z pominięciem czasu exe kucji skryptów php
Найважливіші функції
Три способи побудувати список товарів
- Файл CSV або TXT до 20 МБ. Ви вказуєте роздільник (крапка з комою, кома, табуляція, вертикальна риска) і номер колонки з ідентифікатором, рахуючи від нуля. Роздільник визначається автоматично під час завантаження, а модуль показує перший рядок файлу з номерами колонок, щоб не доводилося рахувати в голові. Решта колонок ігнорується, тож звіт, експортований з будь-якого інструмента, придатний до використання без обробки.
- Вставлений список — один ідентифікатор на рядок або розділені комами чи крапками з комою. Не потребує файлу чи прав на запис.
- Селектор товарів — список, побудований з умов, накладених на каталог, описаний нижче.
Селектор товарів: список без файлу CSV
Вкладка «Виберіть товари» будує той самий список з умов, а не з експорту. Доступні критерії:
- відсутність залишку на складі,
- відсутність продажів протягом вказаної кількості місяців,
- товар вимкнений у вибраному магазині,
- відсутність зображення,
- відсутність категорії, відмінної від стандартної,
- базова ціна дорівнює точно нулю,
- бренд, постачальник, категорія (за бажанням разом із підкатегоріями) та значення характеристики,
- шаблон артикулу, де зірочка замінює будь-який рядок символів, а знак питання — рівно один.
Позначені умови мають виконуватися одночасно — вони поєднуються через AND, а не OR. Кнопка «Порахувати» показує кількість збігів до створення проходу, їхню частку в каталозі та чинний поріг безпеки. Лічильник походить із того самого запиту, який наповнює чергу, тож показує те, чого проход насправді торкнеться, — а не оцінку. Зміна будь-якої умови одразу скидає попередній результат, щоб на екрані ніколи не залишалося число, яке не відповідає формі. Результат селектора потрапляє в ту саму чергу, що й список із файлу, тож успадковує пробний прохід, резервну копію, звіт, історію та відсотковий поріг.
Два вікові критерії описані саме так, як вони працюють: схема PrestaShop не зберігає, коли у товару закінчився залишок і коли його було вимкнено, тому кількість днів рахується від останньої зміни рядка товару. Умова звучить так: «зараз немає залишку, а товар ніхто не чіпав X днів».
За чим модуль розпізнає товари
- артикул (reference), EAN-13, UPC та ідентифікатор товару (id_product),
- MPN та ISBN у тих версіях PrestaShop, каталог яких має ці колонки — модуль перевіряє це сам і не пропонує поля, якого немає,
- префікс для видалення з початку кожного ідентифікатора, один раз (за префікса
ABрядокAB123шукається як123), - обробка кожного ідентифікатора лише один раз, коли список містить повтори,
- політика для ідентифікатора, що підходить до кількох товарів: залишити й повідомити, обробити всі або обробити перший.
Що модуль робить із товарами
- Вимкнути товари — оборотна дія, товар залишається в каталозі, і його можна знову ввімкнути.
- Видалити товари — видалення з каталогу, незворотне.
- Видалити лише комбінації — видаляє варіанти, а самі товари залишає.
Захист від помилки
- Пробний прохід, увімкнений за замовчуванням: читає весь список, повідомляє, скільки ідентифікаторів знайдено, а скільки ні, і нічого не записує в каталог.
- Відсотковий поріг каталогу — прохід, що охоплює більший відсоток товарів, ніж установлено (за замовчуванням 30%), відхиляється. Нуль вимикає цей захист. Поріг можна свідомо обійти одноразовим позначенням поля; пробного проходу це ніколи не стосується.
- Резервна копія CSV, що зберігається перед зміною, з п’ятнадцятьма колонками: id_product, id_product_attribute, reference, ean13, upc, name, link_rewrite, price, quantity, active, id_manufacturer, id_supplier, id_category_default, categories та виконана дія.
- Товари, що присутні в замовленнях — на вибір: вимкнути замість видалення, залишити й повідомити або все одно видалити.
- Права доступу, що зчитуються з вкладки Каталог → Товари: право редагування дозволяє вимикати, право видалення — видаляти. Якщо права неможливо визначити, модуль відмовляє замість того, щоб припускати згоду.
- Питання підтвердження точно називає те, що станеться: окреме для пробного проходу, окреме для вимкнення, окреме для видалення з одного магазину й окреме для видалення з усіх магазинів інсталяції.
- Ліміт 200 000 позицій на один прохід. Більший вибір відхиляється з проханням звузити його, а не тихо обрізається.
Прохід у фоновому режимі, без ліміту часу виконання
- Список потрапляє до черги в базі даних, а прохід просуває її короткими кроками через AJAX. Довжина кроку налаштовується в діапазоні від 2 до 30 секунд; модуль показує поруч
max_execution_time, заявлений сервером, і те, скільки реально має намір витратити на один крок. - Вікно прогресу показує смугу, кількість оброблених рядків, темп, час, що минув, і час, що залишився.
- Прохід можна призупинити, відновити та зупинити. Те, що вже оброблено, залишається обробленим.
- Закриття вкладки перериває прохід, але нічого не руйнує — після повторного входу модуль пропонує продовжити з місця зупинки й не обробляє рядок двічі.
- Дві вкладки браузера не ведуть один прохід паралельно: завдання займається однією з них, а друга отримує про це інформацію.
- За вимкненого JavaScript екран надає кнопку «Обробити один крок», яка просуває прохід вручну.
Звіт та історія
- Звіт CSV з одним рядком на ідентифікатор і колонками: line, identifier, result, id_product, id_product_attribute, message.
- Колонка результату приймає одне зі значень:
ok,not-found,skipped,errorтаpendingдля рядків, до яких зупинений прохід не дійшов. - Колонка повідомлення містить сталі англійські коди — понад двадцять розрізнюваних ситуацій, від
deletedіdetachedдоambiguous,in-orders: skippedчиrefused-by-core. Коди не змінюються разом із мовою панелі, тож фільтр у таблиці працює незалежно від налаштувань back office. Усі вони пояснені у вкладці Допомога. - Історія проходів показує номер, дату, магазин, дію, стан, кількість рядків, виконаних, незнайдених, пропущених і помилкових, а також тривалість.
- З історії можна завантажити звіт, резервну копію та вихідний список цього проходу, а непотрібний запис — видалити.
- Проходи, запущені із селектора, несуть в історії опис вибраних умов, з назвами бренду, постачальника, категорії та значення характеристики — а не лише номерами.
Налаштування
- відсотковий поріг каталогу,
- політика за замовчуванням для товарів, що присутні в замовленнях,
- політика за замовчуванням для ідентифікатора, що підходить до кількох товарів,
- позначення перемикача резервної копії за замовчуванням,
- довжина кроку в секундах,
- період зберігання проходів і файлів у днях (нуль означає «назавжди») та прибирання, що виконується одразу під час запису,
- інформація про те, чи каталог для файлів модуля доступний для запису.
Multistore і робота кількох людей
- Магазин, у якому шукаються товари, вибирається на екрані проходу.
- Охоплення визначає, що відбувається з товаром, який належить до кількох магазинів: «лише цей магазин» відв’язує його від поточного магазину й залишає в решті, «кожен магазин» видаляє його з усієї інсталяції.
- Обліковий запис із доступом до частини магазинів бачить лише свої магазини й не може запустити прохід з охопленням усієї інсталяції.
- Список магазинів заморожується разом із проходом, тож наступні кроки не сягнуть далі, ніж обліковий запис, який створив прохід.
- Списки брендів, постачальників, категорій і значень характеристик у селекторі звужуються до вибраного магазину.
Для кого цей модуль
- магазини, що впорядковують каталог після імпорту, міграції або зміни постачальника,
- магазини із сезонним асортиментом, у яких після сезону зникає кілька тисяч позицій,
- люди, які сьогодні видаляють товари вручну у списку в панелі або SQL-запитом прямо в базі,
- інсталяції multistore, де потрібно видалити товар з одного магазину, не чіпаючи решту,
- магазини, у яких над каталогом працює кілька людей із різними правами доступу.
Технічні вимоги
- PrestaShop від 1.6.0.0 до 9.x,
- PHP від 7.0 до 8.5,
- MySQL 5.6+ або MariaDB 10.x+,
- каталог
modules/pdproductdelete/files/з правом запису — модуль сам це перевіряє й повідомляє про це на екрані, - відсутність зовнішніх залежностей: жодного Composer, жодних бібліотек поза PrestaShop,
- модуль не реєструє хуків і не додає нічого до front office — працює виключно в адміністративній панелі,
- інтерфейс польською та англійською мовами.
Чого модуль не робить
Чесно, щоб не було сюрпризів:
- Резервна копія — це знімок, а не кнопка відновлення. Вона містить дані, достатні для відтворення запису товару та для побудови перенаправлень 301 зі старих адрес, але модуль не має функції «скасувати».
- Видалення товару є незворотним. PrestaShop видаляє його разом із зображеннями, комбінаціями, залишком на складі, цінами та зв’язками. Вимкнення товару залишається оборотним.
- Модуль не вимірює, відколи товар не має залишку або відколи він вимкнений — таких дат PrestaShop не зберігає. Вікові умови спираються на дату останньої зміни товару, і це прямо написано біля кожної з них.
- Немає завдання CRON чи розкладу. Прохід запускає людина з панелі.
- Зв’язки товарів із категоріями в PrestaShop не прив’язані до магазину, тому умова «відсутність категорії, відмінної від стандартної» неминуче зчитується для всієї інсталяції. Модуль повідомляє про це в Допомозі.