Jump to content

Картинки товаров в результатах поиска в Prestashop 1.5.5.0


Recommended Posts

Мне нужно было показывать картинки товаров вместе с наименованием товаров в результатах быстрого поиска. Для Prestashop 1.5.4.1 я использовал следующий хак в файле \modules\blocksearch\blocksearch-instantsearch.tpl (75-я строка):

 

Заменил:

 

return value;

 

на

 

return "<img src=\"" + baseDir + "img/tmp/" + "product_mini_" + data.id_product + ".jpg\" alt=\"" + value + "\" />  " + value;

 

 

ПРИМЕЧАНИЕ: В качестве картинок товаров использовал картинки с именем product_mini_ , которые используются Prestashop для показа изображений товаров в каталоге со стороны админки. Поясню, что они генерируются автоматически в папке \img\tmp\ при просмотре каталога в админке. Их можно удалить, и они будут автоматически сгенерированы заново при первом заходе администратором в список товаров в админке.

 

Все работало отлично.

 

Поставил Prestashop 1.5.5.0. В нем этот хак не работает.

 

Я заметил, что нумерация картинок product_mini из папки \img\tmp\ изменила свой формат в Prestashop 1.5.5.0.

 

В Prestashop 1.5.4.1 файлы нумеровались так:

 

product_mini_1.jpg

product_mini_2.jpg

product_mini_3.jpg

 

и т.д.

 

 

В Prestashop 1.5.5.0 нумерация стала такая:

 

product_mini_1_1.jpg

product_mini_2_1.jpg

product_mini_3_1.jpg

 

и т.д.

 

Что за _1 в конце имен? Разработчики добавили еще какой-то ID? Например ID магазина (1.5.x - это же мультишоп)?

 

Никак не могу понять, как изменить этот хак, чтобы изображения товаров вновь появилисьв Prestashop 1.5.5.0?

 

Может кто-то подскажет, как скорректировать его. Или может использовать какое-то маленькое изображение из списка изображений товаров?

 

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

 

Так что скорректированный вариант будет полезен всем. Прошу помощи!

post-385044-0-54876600-1378035214_thumb.jpg

post-385044-0-87455900-1378035239_thumb.jpg

Share this post


Link to post
Share on other sites

Примерно так:

<img src=\"" + baseDir + "img/p/" + data.id_product + "-" + data.id_image + "-small.jpg\"  alt=\"" + value + "\" />

Единственное я точно не помню, но вроде чтобы вывести id_image нужно дописать немного в sql запрос

Edited by Kerm (see edit history)

Share this post


Link to post
Share on other sites

А чего тебе мешает создать свой уникальный тип изображений и выводить именно его в поиске?

Отсутствие знаний в программировании  :)

 

Ваш подход мне нравится больше, но сам я не решу этот вопрос. Простая подстановка Вашего варианта не решает проблемы - видимо надо делать еще что-то, как Вы и писали.

 

Вот в другом форуме написали, что это вновь добавленная цифра в конце файлов product_mini_ - это ID категории.

 

Я исправил код на:

<img src=\"" + baseDir + "img/tmp/" + "product_mini_" + data.id_product + "_" + data.id_category + ".jpg\" alt=\"" + value + "\" />

Но у меня не заработало. Я думаю, что они ошибаются - это не ID категории. Я проверил изображения товаров в product_mini_ у всех у них в конце стоит _1. А относятся они к категориям с разными ID.

 

Поэтому это не ID категории.

Share this post


Link to post
Share on other sites

Вот в одном форуме нашел такой код для вставки в blockcart.tpl, чтобы в ajax корзине в выпадающем списке показывались изображения товаров вместе с их наименованием:

<span style="display: inline-block; float:left"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'small_default')}" alt=""></span>

Нельзя это как-то задействовать в приведенном в начале поста коде, чтобы изображения показывались в результатах быстрого поиска? В корзине они показываются нормально.

Share this post


Link to post
Share on other sites

Примерно так:

<img src=\"" + baseDir + "img/p/" + data.id_product + "-" + data.id_image + "-small.jpg\"  alt=\"" + value + "\" />

Единственное я точно не помню, но вроде чтобы вывести id_image нужно дописать немного в sql запрос

 

Нужно переопределить метод

public static function find($id_lang, $expr, $page_number = 1, $page_size = 1, $order_by = 'position',
$order_way = 'desc', $ajax = false, $use_cookie = true, Context $context = null)

в классе Seach.php (линия 281), добавить в запрос выборку изображений.

if ($ajax)
{
    $sql = 'SELECT DISTINCT p.id_product, pl.name pname, cl.name cname,
                cl.link_rewrite crewrite, pl.link_rewrite prewrite, i.id_image image '.$score.'
            FROM '._DB_PREFIX_.'product p
            INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (
                p.`id_product` = pl.`id_product`
                AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
            )
            '.Shop::addSqlAssociation('product', 'p').'
            INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (
                product_shop.`id_category_default` = cl.`id_category`
                AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
            )
            LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
            Shop::addSqlAssociation('image', 'i', true, 'image_shop.cover=1').'
            WHERE p.`id_product` '.$product_pool.'
            ORDER BY position DESC LIMIT 10';
    return $db->executeS($sql);
}

и в шаблоне лучше использовать такой вывод

<img src=\"{$link->getImageLink('" + data.prewrite + "', '" + data.image + "', 'small_default')}\" />

Такое решение было предложено на форуме prestashop-forum.ru

Проверено на версиях 1.5.4 - 1.5.5

Share this post


Link to post
Share on other sites

 

Нужно переопределить метод

public static function find($id_lang, $expr, $page_number = 1, $page_size = 1, $order_by = 'position',
$order_way = 'desc', $ajax = false, $use_cookie = true, Context $context = null)

 

А где это надо переопределить и как?

 

Если сделать два изменения, что указаны были на форуме prestashop-forum.ru  в Search.php и blocksearch-instantsearch.tpl, вроде все работало в 1.5.5.0. Переопределение при этом необходимо?

Share this post


Link to post
Share on other sites

Переопределять метод не обязательно. Если вы измените этот метод в классе Search, то такой вариант тоже будет работать. Но после обновления пропадут все ваши изменения в стандарных классах и вам опять придеться изменять код.

В prestashop предусмотрена возможность расширения базовой функциональности через переопределение стандарных классов - Overriding a class 

Для переопределения стандарных классов нужно создать в папке override/classes/ файл php, с тем же названием, что класс, который вы хотите изменить. В нем переопределите нужный вам метод (функцию), добавьте или измените функциональность.

Share this post


Link to post
Share on other sites

  • 5 months later...

а можно по конкретнее, а именно куда какие изменения вносить?

Выше все написано.

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

http://prestashop-forum.ru/index.php?topic=1507.msg7387#msg7387

Share this post


Link to post
Share on other sites

у меня преста 1.5.6.2

Всё сделал как описано, но картинки по прежнему не загружаются... 

путь тот же /img/tmp/product_mini_11.jpg, а должно быть img/tmp/product_mini_11_1.jpg

 

такая проблема не только в быстром поиске, в подкатегориях и еще в товарах при наведении (например: /-home/sbornik-zhurnalov-1-4.jpg (/-home/  - такого пути вообще нет нигде)) 

Edited by grower (see edit history)

Share this post


Link to post
Share on other sites

Нет, отключение ЧПУ ни к чему не привело, может есть еще варианты, ошибки не со всеми картинками, а именно с теми которые в быстром поиске, подкатегориях и еще если не заливаешь второе фото для товара, то при наведении на картинку товара, изображение сменяется на битое (ссылку в никуда я написал постом выше)

 

где копать?

Share this post


Link to post
Share on other sites

  • 1 month later...

 

Заменил:

 

return value;

на

 

return "<img src=\"" + baseDir + "img/tmp/" + "product_mini_" + data.id_product + ".jpg\" alt=\"" + value + "\" /> " + value;

 

Только я заменял на

return "<img src=\"{$link->getImageLink('" + data.prewrite + "', '" + data.id_product + "', 'small_default')}\" />" + value;

 

Версия 1.5.6.2 работает с включеным чпу.

Share this post


Link to post
Share on other sites

  • 1 year later...

А как реализовать живой поиск с картинками в Prestashop 1.6?

 

Пользуйтесь поиском на сайте, было уже.

 

Я недавно делал, прикрепил файл который нужно положить в папку /override/classes/

 

Search.php

 

И js файл положить в themes\тема\js\modules\blocksearch\

 

blocksearch.txt

 

PS.: Ну и естественно txt надо переименовать в js и после всего удалить файл class_index.php и почистить кеш браузера.

 

По стилям как оформить полученный результат уже сам разберешься..

Edited by Kerm (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

  • 2 months later...

Пользуйтесь поиском на сайте, было уже.

 

Я недавно делал, прикрепил файл который нужно положить в папку /override/classes/

 

attachicon.gifSearch.php

 

И js файл положить в themes\тема\js\modules\blocksearch\

 

attachicon.gifblocksearch.txt

 

PS.: Ну и естественно txt надо переименовать в js и после всего удалить файл class_index.php и почистить кеш браузера.

 

По стилям как оформить полученный результат уже сам разберешься..

 

Большое спасибо! Всё работает! 

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More