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

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

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

/usr/bin/php  /var/www/www-root/data/www/каука.ru/g2.php -p --dispatch=categories.delete --category_id=код_категории

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

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

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

      mysql -e  "use db; select product_id from cscart_products" | grep awk 'print {$1}' > list.log

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

      <?php
      $ls=file_get_contents("list.log");
      $products_a= explode("\n", $ls);
      foreach ($products_a as $id) {
          $rz=/usr/bin/php  /var/www/www-root/data/www/цувцув.ru/g2.php -p --dispatch=products.delete --product_id=$id;    
          var_dump($rz);
          echo "$id\n";
      }

      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 найти ссылку и скачать

      Astra Linux и Apache

      При стандартной установке веб сервера на astra linux, после запуска сервиса apache, в браузере по адресу localhos всегда будем получать ошибку в логах «authentication not configured». Решением является добавление в /etc/apache2/apache2.conf тега:

      AstraMode off

      Зачем это и почему мне не ведомо..

      Распознавание картинки в текст при помощи yandex.cloud

      Довелось давече попробовать по распознавать текст при помощи сервиса Vision OCR от Яндекс облако. Результатом родился класс на PHP:

      <?php
      class TCloud {
          public $token="";
          public $cloud_id="";
          public $folder_id="";
          public $zone="";
          public $iam_token="";
          public $debig=false;
          /**
           * Инициализация класса
           * @param type $token - токен
           * @param type $cloud_id - идентификатор облака
           * @param type $folder_id - идентификатор папки
           * @param type $zone - идентификатор зоны     
           */
          public function __construct($token,$cloud_id,$folder_id,$zone,$debug=false) {
              $this->token=$token;
              $this->cloud_id=$cloud_id;
              $this->folder_id=$folder_id;
              $this->zone=$zone;
              $this->debug=$debug;
          }  
          
          /**
           * Получение IAM токена
           * Подробнее: https://yandex.cloud/ru/docs/iam/operations/iam-token/create#api_1
           * @return bool
           */
          public function GetIAMToken(){
              $ch = curl_init("https://iam.api.cloud.yandex.net/iam/v1/tokens");        
              curl_setopt($ch, CURLOPT_VERBOSE, $this->debug);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        
              curl_setopt($ch, CURLOPT_POST, 1);   
              $data["yandexPassportOauthToken"]=$this->token;
              curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data));
              
              $res=curl_exec($ch);        
                if (curl_errno($ch)) {
                  $error_msg = curl_error($ch);
                    var_dump($res);
                    var_dump($error_msg);
                    return false;
                }                
               $res= json_decode($res);
               if ($res==null){return false;};         
               $this->iam_token=$res->iamToken;         
              return true;
          }
          
          /**
           * Распознать картинку
           * @param type $mimetype - тип входящего файла (JPEG, PNG, PDF)
           * @param type $model - режим распозанвания (page)
           * @param type $content - контент в формате BASE64
           * @param type $languageCodes - языки для распознавания (*), массив
           * Подробнее: https://yandex.cloud/ru/docs/vision/quickstart
           */
          public function OCR($mimetype="JPEG",$model="page",$content,$languageCodes=["*"]){        
              $ch = curl_init("https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText");        
              curl_setopt($ch, CURLOPT_VERBOSE, $this->debug);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, [
                  "Content-Type: application/json",
                  "Authorization: Bearer ".$this->iam_token,
                  "x-folder-id: ".$this->folder_id,
                  "x-data-logging-enabled: true"
              ]);        
              $data["mimeType"]=$mimetype;
              $data["languageCodes"]=$languageCodes;
              $data["model"]=$model;
              $data["content"]=$content;
              curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data));
              
              $res=curl_exec($ch);        
                if (curl_errno($ch)) {
                  $error_msg = curl_error($ch);
                    var_dump($res);
                    var_dump($error_msg);
                    die();  
                }        
                return $res;
          }
          
      }
      
      

      Результатом возвращается json с блоками распознанного текста/таблиц.

      PHP: замена команды Eval

      В PHP версиях до 7.1, в некоторых скриптах используется команда Eval, позволяющая выполнить переданный на входе текст, как команду PHP. В последующих версия PHP, данная команда помечена как Deprecated. При апргрейде, соответственно часть скриптов перестают работать. Вот моё решение по замене:

      function eval($str){
       file_put_content("tmp.php",$str);
       include 'tmp.php';
      }

      P.S. Совсем если честно не понял зачем было удалять эту команду из за «безопасности», если тому кому нужно вполне заменят её подобным костылём как у меня. Моё мнение: любое обновление не должно ломать старый код, исключения — крайние случаи. Этот случай явно не крайний.

      1 17 18 19 20 21 310