Перейти к содержанию
AlexBog

[Решено] Удалить запись из таблицы

Рекомендуемые сообщения

Подскажите как сделать удаление из таблицы записи о доп изображении если файл не существует. То есть мне надо чтобы в доп. изображениях небыло картинки "нет фото". Нужно именно удалить запись из таблицы.

Может не там искал, но правильный ход мысли или нет, не знаю. По идее надо где выбираем картинки из таблиц в catalog/model/catalog/product.php 

 

public function getProductImages($product_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "' ORDER BY sort_order ASC");

		return $query->rows;
	} 

добавить проверку на пустоту значения. Вообщем нужен совет и помощь.

Заранее спасибо за советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в контроллере товара поставить заглушку надо (1.5.5.)

$this->data['images'] = array();

 

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

 

foreach ($results as $result) {

$this->data['images'][] = array(

'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),

'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))

);

}

Хотя в TPL файле есть условие вывода при переборе массива <?php if ($images) { ?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в контроллере товара проверка есть (1.5.5.)

А как оттуда удалить запись из таблицы?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в контроллере товара проверка есть (1.5.5.)

А как оттуда удалить запись из таблицы?!
Какую именно запись ? если нет доп. изображения - нет и записи в таблице соотв.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какую именно запись ? если нет доп. изображения - нет и записи в таблице соотв.

В том то и дело что запись есть, но изображения при редактировании и проверки некоторые удаляются,а потом заливаются на сервер и чтобы не редактировать затем страницу товара нужно удалить запись из таблицы oc_product_image

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть мне надо чтобы в доп. изображениях небыло картинки "нет фото". Нужно именно удалить запись из таблицы.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть мне надо чтобы в доп. изображениях небыло картинки "нет фото". Нужно именно удалить запись из таблицы.

 

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

Да наверно проще при открытии товара в каталоге.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

файл: /catalog/controller/product/product.php

 

foreach ($results as $result) {
  $this->data['images'][] = array('popup' => $this->model_tool_image->resize($result['image'],      $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))	);
}	

 

заменяем на 
 

foreach ($results as $result) {
  if (!$this->imageExists($result)) continue;
  $this->data['images'][] = array('popup' => $this->model_tool_image->resize($result['image'],     $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
					'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))	);
}	

 

и добавляем функцию, например, перед public function review() {
 

private function imageExists($result){

  if (!file_exists(IMAGE.$result['image'])){
     $this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_image_id=".(int)$result['product_image_id']);
     return '';
  }

  return $result;

}

Изменено пользователем sergiosinicin
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

файл: /catalog/controller/product/product.php

 

foreach ($results as $result) {
  $this->data['images'][] = array('popup' => $this->model_tool_image->resize($result['image'],      $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))	);
}	

 

заменяем на 

 

foreach ($results as $result) {
  if (!$this->imageExists($result)) continue;
  $this->data['images'][] = array('popup' => $this->model_tool_image->resize($result['image'],     $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
					'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))	);
}	

 

и добавляем функцию, например, перед public function review() {

 

private function imageExists($result){

  if (!file_exists(IMAGE.$result['image'])){
     $this->db->query("DELETE " . DB_PREFIX . "product_image WHERE product_image_id=".(int)$result['product_image_id']);
     return '';
  }

  return $result;

}

При изменении не открывается страница товара.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В смысле после данных изменений не открывается?
Напишите в скайп sergiosinicin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При изменении не открывается страница товара.

Поправил ошибку 

private function imageExists($result){
//DIR_IMAGE или IMAGE в зависимости от версии, смотреть файл config.php путь к картинкам вида /.../.../...
  if (!file_exists(DIR_IMAGE.$result['image'])){
     $this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_image_id=".(int)$result['product_image_id']);
     return '';
  }

  return $result;

}
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том то и дело что запись есть, но изображения при редактировании и проверки некоторые удаляются,а потом заливаются на сервер и чтобы не редактировать затем страницу товара нужно удалить запись из таблицы oc_product_image

Да наверно проще при открытии товара в каталоге.

Предположу, что после проверки и удаления части картинок, перед заливкой на сервер папка с изображениями на сервере удаляется, затем на её место заливается почищенная папка.

Процесс более-менее объёмный обычно. И за эти несколько минут или десятков минут вполне может нагрянуть бот поисковика и запросить эдак пару тысяч страниц. А папка с картинками, напомню, пустая (или частично залитая). Неплохо так база почистится. От картинок, которые должны быть, но просто не успели в этот момент закачаться и отсутствовали во время запросов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.