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

[Решено] Еще одно изображение товара, нужна ваша помощь


Recommended Posts

Хочу сделать полную копию функции "изображение товара", для своих идей и потребностей. 

post-681040-0-42603300-1423187802_thumb.png

Для полного счастья не хватает немного знаний, поэтому прошу немного ваших советов как это сделать и какие есть нюансы.

 

На сколько я понимаю мне нужно сделать копии всех файлов и кодов, ну и возможно переименовать.....

 

Основной вопрос, это в каких файл задействована функция изображения, подскажите какие файлы ковырять нужно?

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

Для версий 1.5.х

 

Сперва делаем SQL-запрос, чтоб добавить в таблицу поле нового изображения товара:

ALTER TABLE `oc_product` ADD `moreimage` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci 

Ваш префикс может отличаться, не забываем об этом.

 

 

Дальше идем в модель

admin/model/catalog/product.php

дважды находим такую конструкцию:

if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET image = '" . $this->db->escape(html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8')) . "' WHERE product_id = '" . (int)$product_id . "'");
}
дважды вставляем после нее:
if (isset($data['moreimage'])) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET moreimage = '" . $this->db->escape(html_entity_decode($data['moreimage'], ENT_QUOTES, 'UTF-8')) . "' WHERE product_id = '" . (int)$product_id . "'");
}
 
 
Теперь контроллер
admin/controller/catalog/product.php
Ищем
$this->data['entry_image'] = $this->language->get('entry_image');
За ним добавляем
$this->data['entry_moreimage'] = $this->language->get('entry_moreimage');
Ищем
if (isset($this->request->post['image'])) {
$this->data['image'] = $this->request->post['image'];
} elseif (!empty($product_info)) {
$this->data['image'] = $product_info['image'];
} else {
$this->data['image'] = '';
}
За ним добавляем
if (isset($this->request->post['moreimage'])) {
$this->data['moreimage'] = $this->request->post['moreimage'];
} elseif (!empty($product_info)) {
$this->data['moreimage'] = $product_info['moreimage'];
} else {
$this->data['moreimage'] = '';
}
Ищем
if (isset($this->request->post['image']) && file_exists(DIR_IMAGE . $this->request->post['image'])) {
$this->data['thumb'] = $this->model_tool_image->resize($this->request->post['image'], 100, 100);
} elseif (!empty($product_info) && $product_info['image'] && file_exists(DIR_IMAGE . $product_info['image'])) {
$this->data['thumb'] = $this->model_tool_image->resize($product_info['image'], 100, 100);
} else {
$this->data['thumb'] = $this->model_tool_image->resize('no_image.jpg', 100, 100);
$this->data['image'] = 'no_image.jpg';
}
За ним добавляем
if (isset($this->request->post['moreimage']) && file_exists(DIR_IMAGE . $this->request->post['moreimage'])) {
$this->data['morethumb'] = $this->model_tool_image->resize($this->request->post['moreimage'], 100, 100);
} elseif (!empty($product_info) && $product_info['moreimage'] && file_exists(DIR_IMAGE . $product_info['moreimage'])) {
$this->data['morethumb'] = $this->model_tool_image->resize($product_info['moreimage'], 100, 100);
} else {
$this->data['morethumb'] = $this->model_tool_image->resize('no_image.jpg', 100, 100);
$this->data['moreimage'] = 'no_image.jpg';
}
 
 
Теперь шаблон
admin/view/template/product_form.tpl
Ищем
<tr>
              <td><?php echo $entry_image; ?></td>
              <td><div class="image"><img src="<?php echo $thumb; ?>" alt="" id="thumb" /><br />
                  <input type="hidden" name="image" value="<?php echo $image; ?>" id="image" />
                  <a onclick="image_upload('image', 'thumb');"><?php echo $text_browse; ?></a>  |  <a onclick="$('#thumb').attr('src', '<?php echo $no_image; ?>'); $('#image').attr('value', 'no_image.jpg');"><?php echo $text_clear; ?></a></div></td>
            </tr>
За ним добавляем
<tr>
              <td><?php echo $entry_moreimage; ?></td>
              <td><div class="image"><img src="<?php echo $morethumb; ?>" alt="" id="morethumb" /><br />
                  <input type="hidden" name="moreimage" value="<?php echo $moreimage; ?>" id="moreimage" />
                  <a onclick="image_upload('moreimage', 'morethumb');"><?php echo $text_browse; ?></a>  |  <a onclick="$('#thumb').attr('src', '<?php echo $no_image; ?>'); $('#moreimage').attr('value', 'no_image.jpg');"><?php echo $text_clear; ?></a></div></td>
            </tr>
 
 
Ну и в языке не помешает
admin/language/russian/catalog/product.php
Ищем
$_['entry_image']            = 'Изображение товара:';
За ним добавляем
$_['entry_moreimage']            = 'Еще одно изображение товара:';
 
Вуаля! Теперь у нас есть доп. изображение для товара. На витрине вывод аналогичен. Получаем переменную - передаем в шаблон. Где там ваши идеи и потребности нужно организовать.
Как-то так.

 

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

Благодарю за такую подробную инструкцию!
Сейчас возьмусь за реализацию

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

Спасибо еще раз, все получилось!

 

Я сделал возможность задавать самостоятельно мини картинки 170х170 которые выводятся в категориях...

Если кому такое решение понадобится, тогда, тогда смотрите ниже, уже продолжение от меня.

 

 

Файл

catalog/model/catalog/product.php

в нем ищем

'image'            => $query->row['image'],

и ниже добавляем 

'moreimage'        => $query->row['moreimage'],

Далее файл контролера

catalog/controller/product/category.php

находим

if ($result['image']) {
   $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
   $imagewidth = $this->config->get('config_image_product_width');
   $imageheight = $this->config->get('config_image_product_height');
} else {
   $image = false;
   $imagewidth = '';
   $imageheight = '';
}

Ниже добавляем код

if ($result['moreimage']) {
   $moreimage = $this->model_tool_image->resize($result['moreimage'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
   $imagewidth = $this->config->get('config_image_product_width');
   $imageheight = $this->config->get('config_image_product_height');
} else {
   $moreimage = false;
   $imagewidth = '';
   $imageheight = '';
}

Ищем

'thumb'       => $image,

Ниже добавляем

'morethumb'  => $moreimage,

Теперь идем к файлу шаблона для вывода в категории

catalog/view/theme/*/template/product/category.tpl

Находим

<?php if ($product['thumb']) { ?>
   <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
<?php } ?>

Заменяем на этот

<?php if ($product['morethumb']) { ?>
   <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['morethumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
<?php } ?>

Ну, вот и все, теперь в категориях можно выводить нужные миниатьюры самостоятельно.

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

Вот это дело, я понимаю.

Предлагаю пойти дальше, и для этих доп.картинок размеры в админке в settings проставлять.

Вообще прекрасно будет =)

 

З.Ы. и в шаблоне все-же лучше условие ставить на пустую доп.картинку. Нет ее - выводим основное изображение.

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

Если с решением по поводу пустой картинки если основной нет все понятно, то вот на счет задания размера из админки, тут дело немного посложнее будет....((

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

Не так уж и сложно. Обратим внимание на следующий код:

$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));

вот эти данные

config_image_product_width;
config_image_product_height

Задаются в

admin/controller/setting/setting.php

Это контроллер - остальное аналогично. Модель, шаблон, язык. Просто добавим дополнительные поля в Админка -> Система -> Настройки -> Изображения.

 

Ну и в базу два поля для размеров добавить.

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

Так ааа........  :-)

там уже есть эта настройка, задается размер из настроек "Размер изображения в списке товаров:"

 

хотя я уже и сообразил как это сделать, разве что с полями в базе мне сложнее

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

Пытался избавиться от ресайза для готовых эскизов (вырезав вызов $this->model_tool_image->resize), оно таким макаром выдает некорректный путь до картинки типа scr=data/product_icon_1.png.

Помню где-то тут проскакивала темка с отключением ресайза. Будем искать.

 

Вроде победил через

$image_thumb = '/image/'. $result['image_thumb'];
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

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

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

Important Information

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