Когда в Opencart удаляется товар, фото физически остается на сервере а удаляется лишь в базе сам товар и привязка к файлу.

Чем это плохо?

Первое - это накопление ненужных файлов. Как следствие,  для магазина требуется еще больше памяти на сервере, а это дополнительные затраты. Второе - при наличии большого количества файлов сайт может подтормаживать.

По-этому хочу поделится с вами скриптом, который сможет удалить все неиспользуемые фото товара. Скрипт достаточно простой и по желанию можно доработать под свои потребности.

Сразу хочу сказать, что фото должны быть в отдельной папке от всех остальных изображений, баннеров, картинок шаблона и т.п. То есть фото полностью отделено от магазина.

Код скрипта можно вставить например в admin/controller/common/header.php в функцию index

echo '
';
$net = 0;
$find_files = $this->scan_Dir(DIR_IMAGE . 'data'); // здесь указываем директория где есть только фото товаров
if($find_files){

foreach($find_files as $file){
$image = explode('www/image/', $file);


$query = $this->db->query('SELECT product_id FROM oc_product WHERE image = ''.$image[1].'''); //главное фото
if(!$query->rows){
$query_dop = $this->db->query('SELECT * FROM oc_product_image WHERE image = ''.$image[1].'''); //доп фото
if(!$query_dop->rows){
//echo $file . '
'; //можно раскомментировать строку - отображение файла который удаляется
unlink($file);
$net++;
}

}
}
}
echo 'Всего фото: ' . count($find_files) . '
';
echo 'Удалено: ' . $net . '
';

echo '
';















И перед функцией index вставляем функцию сканирования папки:

 public function scan_Dir($dir) {
$dir = str_replace('//', '/', $dir);
$arrfiles = array();
if (is_dir($dir)) {
if ($handle = opendir($dir)) {
chdir($dir);
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
if (is_dir($file)) {
$arr = $this->scan_Dir($file);
foreach ($arr as $value) {
$arrfiles[] = $dir.'/'.$value;
}
} else {
$arrfiles[] = $dir.'/'.$file;
}
}
}
chdir('../');
}
closedir($handle);
}
return $arrfiles;
}






















После сохранения - заходим в админку и смотрим на статистику сколько есть файлов и сколько удалено лишних.

В примере поставлен стандартный префикс oc_ для таблиц в Opencart, если у вас другой (смотрите конфиг) поменяйте.

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


17.11.2017 10959
Новости из этой категории
20.09.2019 5850
Обзор шаблона который сделал качественный рывок в мире готовых решений - UltraStore от Octemplates
Когда мы хотим получить что-то качественное мы обращаемся к узконаправленным специалистам. Выбор шаблона это очень серьезно, особенно на старте бизнеса, да и на любом его..
02.09.2019 3273
Принимаем Биткоин и Лайткоин в OpenСart 3
CMS Opencart это всемирно известная платформа, которая позволяет быстро и бесплатно создать интернет-магазин. Она получила широкую популярность в Европейских и Азиатских ..
28.03.2019 6334
Скрипт удаления BOM (лишний пробел или символ в начале сайта)
Очень часто на сайтах попадаются так называемые спецсимволы BOM (byte order mark). Они в самих файлах нигде не видны но на сайте проявляются в виде спецсимвола вверху док..
12.03.2019 10681
Как принимать платежи на сайте в Opencart
Создали интернет магазин, пошли продажи, но как их увеличить? Для начала можно сделать онлайн оплату картой прямо на сайте!Почему это хорошо. Потому что очень сильно сокр..
05.10.2018 4580
Что такое настоящий сервис и как завоевать клиента
Сейчас бизнесов очень много и много конкуренции. Казалось бы, как выделиться среди конкурентов при большом их наличии?В поисковой системе например можно это сделать с пом..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее