В OpenCart при удалении товара, изображения, привязанные к нему, не удаляются а остаются на диске. Так сделано наверное потому, что можно привязать одно и то же фото к нескольким товарам. И если при удалении товара удалять и его фтото, то, если это фото привязано еще к одному или нескольким товарам - оно пропадет и не будет отображаться на страницах этих товаров.
Но зачастую это не нужно. В большинстве случаев у каждого товара свои фото. И если часто приходится удалять/добавлять товары, то со временем на диске накапливается много ненужных изображений.
Если у вас у каждого товара свое фото - можете сделать нижеописанную модификацию и не бояться, что у вас на хостинге внезапно закончится место из за накопившихся ненужных изображений.
В файле admin\model\catalog\product.php перед строкой
public function deleteProduct($product_id) {
добавляем функцию
private function delete_image($path) {
if (isset($path)) {
$path = rtrim(DIR_IMAGE . $path);
if (!file_exists($path)) {
$error= 1;
}
if ($path == rtrim(DIR_IMAGE . 'data/', '/')) {
$error = 1;
}
} else {
$error = 1;
}
if (!$this->user->hasPermission('modify', 'common/filemanager')) {
$error = 1;
}
if (!isset($error)) {
if (is_file($path)) {
unlink($path);
} elseif (is_dir($path)) {
//$this->recursiveDelete($path);
}
}
}
после строки
public function deleteProduct($product_id) {
добавляем пару строчек кода
$query = $this->db->query("SELECT p.image FROM " . DB_PREFIX . "product p WHERE p.product_id = '" . (int)$product_id . "'");
if($query->row){
$this->delete_image($query->row['image']);
$results = $this->getProductImages($product_id);
foreach ($results as $result) {
$this->delete_image($result['image']);
}
}
Модификация завершена. Удачи :)
PS: тестировалось на 1.5.1.3