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

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

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

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

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 пользователей онлайн

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

×

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

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