JavaScript: Еще один вариант загрузки файла по клику на кнопку

Общая идея следующая: по клику на кнопку вызываем AJAX запрос на сервер с определенными параметрами передаваемыми в POST, затем получив в результат запроса файл — формируем в DOM на файл в формате blob, и тут-же её нажимаем. В результате браузер показывает диалоговое окно сохранения файла.

Таким необычным способом мы убиваем несколько зайцев сразу:

  1. Получаем возможность показать ошибку, если вдруг файл на сервере сформировать не удалось. Это полезно если например файл формируется на сервере «на лету» — например файл XLSX с отчётом
  2. Мы можем передать серверу какие-то условия для формирования файла в POST запросе
  3. На странице мы не размещаем заранее данные в тегах <form></form>, как практикуется в подобных решениях
  4. Пользователю достаточно нажать на кнопку один раз для получения результата.

В результате скрипт формирования файла может выглядеть примерно следующим образом:

На клиенте:

На сервере:

CS-Cart: массовое удаление товара

Как ни странно, в CS-Cart нет явного функционала удаления всего товара. Разработчики предполагали, что администратор должен листать список в разделе «товары» и удалять по 50-100 товаров за раз (т.е. страницу максимум). Это долго и не наш путь..

Есть другой способ: в разделе «Категории», переместить все категории в «Корзину». Хотя в админке и есть кнопка «очистить корзину», по факту она оказалась не в состоянии удалить 15000+ товаров, а просто подвешивала весь сервер. Поэтому далее открываем консоль SSH, и из консоли выполняем:

После чего ждем… По результату отработки скрипта весь товар с сайта будет удалён.

Если требуется удалить весь товар, НО! оставить все категории на месте, то можно пойти таким путём:

1) Выгрузить в файл id всех товаров:

      2) Скриптом удалить каждый товар:

      Chromedriver устаревших версий

      До версии 114 включительно, драйвера для тестирования можно было скачать по ссылке http://chromedriver.storage.googleapis.com/index.html Но с версии 115 и выше, гугл стал в открытом виде выкладывать chromedriver только для последних актуальных версий своего браузера. Тем не менее скачать вебдрайвер для «Устаревших» версий браузера остаётся возможным, но несколько надуманным способом.

      1. Открыть ссылку вида https://googlechromelabs.github.io/chrome-for-testing/127.0.6533.88.json, указав в URL необходимую версию
      2. В ответном json найти ссылку и скачать

      HTML: Ограничение ввода числа, с дробной частью более двух знаков

      Задача: позволять вносить в поле input числа со значимой частью не более 2-х знаков после запятой.

      Решение: к сожалению стандарт HTML на текущий момент не предусматривает в штатном виде такое колдовство. Единственно что возможно — проставить в теге тип равным «число», и шаг равным .01, например вот так:

      Но это будет действовать только если пользователь ввод числа осуществляет при помощи стрелочки. Если руками — то поле всё равно позволит ввести любое число. Значит придётся задействовать javascript. На обработчик onchange навесим задание приводить любое значение в поле к числу с разрядностью 2:

      два знака после запятой в поле input

      No module named ‘apt_pkg’

      Всё началось неплохо (с)… А именно захотел я обновить apache на одном из серверов, Ubuntu на «наисвежайший». Сначала попытался собрать из исходных кодов, но как-то не срослось, а потому чуть погуглив, нашел что в репозитарии ondrej/apache2 всегда лежат уже собраные пакеты самой свежей версии. Казалось бы дело простое:

      Но не тут то было..Получил ошибку «No module named ‘apt_pkg'»:

      При попытке доустановить пакет через pip3… вышло сообщение, что пакета то такого и нет..

      Долго гуглил почему так, выяснить так и не смог. Единственное что удалось выяснить, что если запускать pip3 для python3.10, то пакет ищется и устанавливается. Возможно дело в как-то криво установленном python3.11 В результате, пришлось перейти обратно на python3.10

      После чего всё штатно обновилось и установилось.

      No module named 'apt_pkg'
      1 2 3 54