Поиск на сайте по product ID

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Dentar
Dentar
Репутация: 0
Сообщения: 25
Зарегистрирован: 05.12.2016
С нами: 7 лет 3 месяца

Сообщение #1 Dentar » 03.01.2017, 23:36

Всех с Новым Годом! Счастья, удачи, процветания ;)

Хочу использовать {$product->id} в качестве кода товара.
Ведь, например, если клиент позвонил и хочет проконсультироваться или сделать заказ, - куда проще попросить его назвать код товара (например шестизначный), чем просить назвать наименование/артикул, который может состоять из множества цифр и букв. Так собственно и сделано во всех серьёзных интернет-магазинах - каждый товар имеет свой цифровой код по которому можно точно и быстро найти нужный товар на сайте.
Вообщем хотел узнать как сделать так, чтобы товар можно было найти через поиск по product ID. Заранее спасибо.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #2 korshunov » 04.01.2017, 07:16

Поисков существует несколько:
П1. Обычный поиск на сайте и в админке через api/Products.php
П2. "Живой" поиск на сайте, работает через ajax/search_products.php
П3. Обычный поиск в админке, работает через backend/ajax/search_products.php

Пробуйте в них менять строки вида (несколько отличаются в разных файлах)

$keyword_filter .= $okay->db->placehold("AND (
$px.name LIKE '%$kw%'
OR $px.meta_keywords LIKE '%$kw%'
OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%')
) ");

на

$keyword_filter .= $okay->db->placehold("AND (
$px.name LIKE '%$kw%' OR $px.id='$kw'
OR $px.meta_keywords LIKE '%$kw%'
OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%')
) ");


А вообще по поискам возникают разные вопросы к разработчикам, например:

1. Код сильно повторяется (особенно в П2 и П3), это нерациональный плохой стиль.
2. В П1 в админке ищет только по одному текущему языку, это же неудобно, надо бы по всем. А еще лучше -дать админу разные возможности - по всем языкам, по текущему, по отдельно выбранному...
3. В П2 и П3 стоят почему-то существенно разные ограничения limit=30 и limit=100.
4. Само присутствие параметра limit в П1 может вести к ошибкам:
http://forum.simplacms.ru/topic/11402-большой-заказ-в-админке/

Dentar
Dentar
Репутация: 0
Сообщения: 25
Зарегистрирован: 05.12.2016
С нами: 7 лет 3 месяца

Сообщение #3 Dentar » 04.01.2017, 18:48

Сделал как вы сказали, но поиск по ID так и не работает (ничего не находит),плюс выдает ошибки:

Warning: Unknown column 'l.id' in 'where clause' in .../api/Database.php on line 115
Warning: Invalid argument supplied for foreach() in .../view/ProductsView.php on line 465

Vitaly
Аватара
Vitaly
Репутация: 20
Сообщения: 109
Зарегистрирован: 15.08.2016
С нами: 7 лет 7 месяцев

Сообщение #4 Vitaly » 04.01.2017, 21:26

Код: Выделить всё

$keyword_filter .= $okay->db->placehold("AND (
   $px.name LIKE '%$kw%'
   OR p.id LIKE '%$kw%'
   OR $px.meta_keywords LIKE '%$kw%'
   OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%')
) ");

Так будет работать. Но как по мне, искать по id не лучший способ.

Dentar
Dentar
Репутация: 0
Сообщения: 25
Зарегистрирован: 05.12.2016
С нами: 7 лет 3 месяца

Сообщение #5 Dentar » 04.01.2017, 22:45

Большое спасибо!!

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #6 korshunov » 05.01.2017, 06:38

Vitaly писал(а):

Код: Выделить всё

$keyword_filter .= $okay->db->placehold("AND (
   $px.name LIKE '%$kw%'
   OR p.id LIKE '%$kw%'
   OR $px.meta_keywords LIKE '%$kw%'
   OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%')
) ");

Так будет работать.

Я бы не был столь уверен и столь категоричен. Например, предложенный способ при поиске на "12" будет выдавать массу лишних номеров - 126, 712, 6012, 6125 и нужный, скорее всего, надо будет еще вылавливать в длинном списке...
Несколько лучше, на мой взгляд, OR p.id='$kw'. Но и там будут свои недостатки.

Vitaly писал(а):Но как по мне, искать по id не лучший способ.

Очень правильно замечено. Ибо ID товара предназначено вообще для внутреннего пользования в системе, а не для показа посетителю сайта.

Полностью правильно, думаю, было бы создать свой отдельный поиск именно по ID, либо в стандартном поиске в поисковой фразе обрабатывать специальные метки типа "**132" - искать только ID=132.


Название раздела: Предложения по улучшению OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Предложения по улучшению OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 10 гостей