Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Удаление картинок товара + вопрос о cache.


Alina20

Recommended Posts

Есть вопрос к Вам уважаемые:

Возможно кому-то пришло в голову,возможно уже есть решение - если так укажите где плиз если нет-вот в чем суть

Когда в магазине очень много товару становиться не представляется возможным (с комфортом) удалить товар - его картинки остаются на сервере. есть ли возможность сделать так,чтоб вместе с удалением товара из магазина удалялись с серера фотографии которые этот товар цепляет??

что делать с кешем? он кушает почти 50% пространства =\

Надіслати
Поділитися на інших сайтах


Есть вопрос к Вам уважаемые:

Возможно кому-то пришло в голову,возможно уже есть решение - если так укажите где плиз если нет-вот в чем суть

Когда в магазине очень много товару становиться не представляется возможным (с комфортом) удалить товар - его картинки остаются на сервере. есть ли возможность сделать так,чтоб вместе с удалением товара из магазина удалялись с серера фотографии которые этот товар цепляет??

что делать с кешем? он кушает почти 50% пространства =\

Решение зделать не сложно, если у Вас 100% гарантируется что два и более товаров не используют одно изображение...
Надіслати
Поділитися на інших сайтах

Решение зделать не сложно, если у Вас 100% гарантируется что два и более товаров не используют одно изображение...

Грамотное решение будет само проверять, включая доп картинки, а не одну главную. При создании поработать придется
Надіслати
Поділитися на інших сайтах


а зачем создавать два товара с одинаковыми картинками??? и так места мало на хостинге )

я даже помогу чем смогу...правда в программировании я полный 0 :(, но мне кажется вообще все скажут спасибо за эту наработку,как считаете?

а вот по поводу кеша (как всегда уж-вопрос от меня,скорее всего, не блещет грамотностью но задам)вообще есть доля разумного в том,чтоб папку кеш\дадта сделать искомой для всех картинок на сервере - тогда и думать про этот кэш не нужно будет или это бред?

Надіслати
Поділитися на інших сайтах


ocStore 1.0.1RC2

./admin/model/catalog/product.php

Найти

public function deleteProduct($product_id) {
Добавить ниже

$query = $this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE  product_id = '" . (int)$product_id . "' UNION ALL SELECT image FROM " . DB_PREFIX . "product_image WHERE  product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
	$query2 = $this->db->query("SELECT count(*) c FROM (SELECT p.image FROM " . DB_PREFIX . "product p WHERE p.image = '".$result['image']."' UNION ALL SELECT pi.image FROM " . DB_PREFIX . "product_image pi WHERE pi.image = '".$result['image']."' UNION ALL SELECT ct.image FROM " . DB_PREFIX . "category ct WHERE ct.image = '".$result['image']."') t");        
	if (((int)$query2->row['c'] < 2) && file_exists(DIR_IMAGE . $result['image'])) @unlink(DIR_IMAGE . $result['image']);
}
Надіслати
Поділитися на інших сайтах


ocStore 1.0.1RC2

./admin/model/catalog/product.php

Найти

public function deleteProduct($product_id) {
Добавить ниже

$query = $this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE  product_id = '" . (int)$product_id . "' UNION ALL SELECT image FROM " . DB_PREFIX . "product_image WHERE  product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
	$query2 = $this->db->query("SELECT count(*) c FROM (SELECT p.image FROM " . DB_PREFIX . "product p WHERE p.image = '".$result['image']."' UNION ALL SELECT pi.image FROM " . DB_PREFIX . "product_image pi WHERE pi.image = '".$result['image']."' UNION ALL SELECT ct.image FROM " . DB_PREFIX . "category ct WHERE ct.image = '".$result['image']."') t");        
	if (((int)$query2->row['c'] < 2) && file_exists(DIR_IMAGE . $result['image'])) @unlink(DIR_IMAGE . $result['image']);
}

попробовала - не удаляет картинки, они остаются и в папке кэш и в папке дата =\ может я что не так сделала. но сам товар удаляется а все его картинки остаются.

Надіслати
Поділитися на інших сайтах


а зачем создавать два товара с одинаковыми картинками??? и так места мало на хостинге )

Есть производители, выпускающие товары под разными торговыми марками - продаются по разным ценам, выглядят одинаково. Вряд ли это великая тайна.

Один движок OpenCart может обслуживать несколько магазинов-витрин, и в принципе ничего не мешает продавать на одной для бедных перочинные ножики по 5$, а на витрине для богатых VIP клиентов - по $50. Не дублируя при этом массивный контент.

а вот по поводу кеша (как всегда уж-вопрос от меня,скорее всего, не блещет грамотностью но задам)вообще есть доля разумного в том,чтоб папку кеш\дадта сделать искомой для всех картинок на сервере - тогда и думать про этот кэш не нужно будет или это бред?

Про кеш вообще можете не думать, а чистить его регулярно - раз в месяц или в неделю. Да хоть и ежедневно. Файлы в нём быстро перегенерируются первым же посетителем, остальные просмотры этого товара будут брать картинки уже из кеша. Если у Вас не многомиллионная аудитория и адская нагрузка, разницу никто не заметит :)
Надіслати
Поділитися на інших сайтах


Про кеш вообще можете не думать, а чистить его регулярно - раз в месяц или в неделю. Да хоть и ежедневно. Файлы в нём быстро перегенерируются первым же посетителем, остальные просмотры этого товара будут брать картинки уже из кеша. Если у Вас не многомиллионная аудитория и адская нагрузка, разницу никто не заметит :)

нет не многомиллионная -увы =\ но места на сервере тоже не много а папка с кэшем по размеру не многим меньше папки с картинками-немного напрягает т.е. мне кажется если картинок на 150 метров кэш не должен быть 120...нет? я не права?

Надіслати
Поділитися на інших сайтах


Вполне может быть и 120. Вы заливаете одну большую картинку товара, а это фото выводится в 3-4 разных размерах на разных страницах: превьюшки на странице товара одного размера, картинка в списке категорий может быть другого, может где-то ещё в баннерах, и т.д. и т.п. Чтобы каждый раз эти картинки не масштабировать на лету, несколько превьюшек разного размера генерируются и хранятся в кеше.

Надіслати
Поділитися на інших сайтах


Вполне может быть и 120. Вы заливаете одну большую картинку товара, а это фото выводится в 3-4 разных размерах на разных страницах: превьюшки на странице товара одного размера, картинка в списке категорий может быть другого, может где-то ещё в баннерах, и т.д. и т.п. Чтобы каждый раз эти картинки не масштабировать на лету, несколько превьюшек разного размера генерируются и хранятся в кеше.

а как-то бороться с этим можно??

вопрос об удалении картинок товара вместе с товаром открытый - помогите пожалуйста, пробовала вариант выше не помогло..

Надіслати
Поділитися на інших сайтах


  • 10 months later...
  • 3 months later...
  • 1 year later...

Как то так

 

/admin/model/catalog/product.php

 

Найти 

public function deleteProduct($product_id) {

Добавить ниже

$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'");
    unlink($_SERVER['DOCUMENT_ROOT'].'/image/'.$img->row['image']);
	
	$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'");
	$i=0;
	while($i <= $img->num_rows-1){
	unlink($_SERVER['DOCUMENT_ROOT'].'/image/'.$img->rows[$i]['image']);
	$i++;
	}
Надіслати
Поділитися на інших сайтах


  • 9 months later...

 

Как то так

 

/admin/model/catalog/product.php

 

Найти 

public function deleteProduct($product_id) {

Добавить ниже

$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'");
    unlink($_SERVER['DOCUMENT_ROOT'].'/image/'.$img->row['image']);
	
	$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'");
	$i=0;
	while($i <= $img->num_rows-1){
	unlink($_SERVER['DOCUMENT_ROOT'].'/image/'.$img->rows[$i]['image']);
	$i++;
	}

1.5.4.1 не работает

2015-06-08 18:42:05 - PHP Notice: Undefined index: image in /var/www/mysite.com/admin/model/catalog/product.php on line 257

2015-06-08 18:42:05 - PHP Warning: unlink(/var/www/mysite.com/image/): Is a directory in /var/www/mysite.com/admin/model/catalog/product.php on line 257

вот 257-я строка

unlink($_SERVER['DOCUMENT_ROOT'] . '/image/' . $img->row['image']);

 

я пока-что не понял в чем дело. Не настолько глубоко знаю PHP...

Надіслати
Поділитися на інших сайтах


1.5.4.1 не работает

2015-06-08 18:42:05 - PHP Notice: Undefined index: image in /var/www/mysite.com/admin/model/catalog/product.php on line 257

2015-06-08 18:42:05 - PHP Warning: unlink(/var/www/mysite.com/image/): Is a directory in /var/www/mysite.com/admin/model/catalog/product.php on line 257

вот 257-я строка

unlink($_SERVER['DOCUMENT_ROOT'] . '/image/' . $img->row['image']);

 

я пока-что не понял в чем дело. Не настолько глубоко знаю PHP...

- картинки на месте

- права для удаления картинок имеются

Надіслати
Поділитися на інших сайтах


1.5.4.1 не работает

2015-06-08 18:42:05 - PHP Notice: Undefined index: image in /var/www/mysite.com/admin/model/catalog/product.php on line 257

2015-06-08 18:42:05 - PHP Warning: unlink(/var/www/mysite.com/image/): Is a directory in /var/www/mysite.com/admin/model/catalog/product.php on line 257

вот 257-я строка

unlink($_SERVER['DOCUMENT_ROOT'] . '/image/' . $img->row['image']);

 

я пока-что не понял в чем дело. Не настолько глубоко знаю PHP...

вывел значение $img->row['image']);  помощью кода

$message = print_r($img, true);
$this->log->write($message);

в журнал для дебага и вижу, что он пустой

(

    [row] => Array

        (

        )

    [rows] => Array

        (

        )

    [num_rows] => 0

)

 

вроде код и правильный а почему не работает?

Надіслати
Поділитися на інших сайтах


вывел значение $img->row['image']);  помощью кода

$message = print_r($img, true);
$this->log->write($message);

в журнал для дебага и вижу, что он пустой

(

    [row] => Array

        (

        )

    [rows] => Array

        (

        )

    [num_rows] => 0

)

 

вроде код и правильный а почему не работает?

проблема в переводе числа в целое почему-то

Если запрос поменять вместо

$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'");

написать, к примеру, так

$img=$this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE product_id = '54'");

или так

$img   = $this->db->query("SELECT image FROM " . DB_PREFIX . "product WHERE product_id = 54");

то в массив попадает нужное значение!!!

 

почему оно не попадает с (int)$product_id - загадка

Надіслати
Поділитися на інших сайтах


  • 2 months later...

все действительно работает. Это я - тормоз. Сначала удалял товар в базе, а потом пытался найти запись в базе для удаления файла. А ведь написано же было

 

Найти 

public function deleteProduct($product_id) {

Добавить ниже

то-есть добавить в начало функции, а не в конец.

 

Но зато теперь я знаю что делает каждое слово данного кода :)

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.