Как сделать так, чтобы при удалении товара удалялись и его фото

В 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