Jump to content
Sign in to follow this  
AlexBog

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

Recommended Posts

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

Может не там искал, но правильный ход мысли или нет, не знаю. По идее надо где выбираем картинки из таблиц в 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;
	} 

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

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

Share this post


Link to post
Share on other sites

в контроллере товара поставить заглушку надо (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) { ?>

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

файл: /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;

}

Edited by sergiosinicin
  • +1 1

Share this post


Link to post
Share on other sites

файл: /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;

}

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.