Maksclub Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 (изменено) Подскажите как это можно сделать? Просто ID — число, а артикулы не что иное как шифр немецкой разведки... клиент язык сломает, у меня уши завянут Изменено 27 июня, 2015 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 (изменено) в файле /api/Products.php нужно заменить запрос к базе по введенному ключевому слову: $keyword_filter .= $this->db->placehold("AND (p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); добавив проверку на айди (если нужно, убрать оттуда проверку на артикул) p.id=$kw: $keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); также это можно сделать для поиска ajax в /simpla/ajax/search_products.php Изменено 27 июня, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 Обратите внимание что в этом случае будет искать и в фронтенде. для того чтобы не искало в фронтенде, нужно сделать другой фильтр например $filter['keyword_admin'], и прописать его так-же как и $filter['keyword'] в api/Products.php, добавив запрос написанный выше. и из админки в /simpla/ProductsAdmin.php передавать не $filter['keyword'] а $filter['keyword_admin'] Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 27 июня, 2015 Автор Жалоба Поделиться Опубликовано 27 июня, 2015 Что то не ищет... Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 27 июня, 2015 Автор Жалоба Поделиться Опубликовано 27 июня, 2015 я имею в виду ID не варианта, а именно товара, который в Яндекс xml выводится так: group_id='$p->product_id'а вшаблоне так: {$product->id} Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 вы заменили в функции get_products() ? if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); if($kw!=='') $keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 (изменено) я имею в виду ID не варианта, а именно товара, который в Яндекс xml выводится так: group_id='$p->product_id'а вшаблоне так: {$product->id} ну так p.id=$kw и есть айди товара. у себя попробовал, выводит все. еще нужно добавить этот исправленный запрос в count_products(). для правильного вывода количества найденного товара Изменено 27 июня, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2015 Жалоба Поделиться Опубликовано 27 июня, 2015 вот скрин работающего примера: https://yadi.sk/i/rmBpI1o-hX7mo Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 27 июня, 2015 Автор Жалоба Поделиться Опубликовано 27 июня, 2015 ну так p.id=$kw и есть айди товара. у себя попробовал, выводит все. еще нужно добавить этот исправленный запрос в count_products(). для правильного вывода количества найденного товаране в той функции заменил, все работает, спасибо! )) Круто все Цитата Ссылка на сообщение Поделиться на другие сайты
Tarasbulba Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 что то не работает. ошибки сыпет при поиске. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 что то не работает. ошибки сыпет при поиске.какие Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 (изменено) какие сегодня кстати тоже были проблемки.... в админке при поиске выводит "Найдено n товаров" при этом нет товаров... хотя должны бвыть, именно столько сколько и написал вводил часть названия, при том по ID ищет отлично Изменено 30 июня, 2015 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 сегодня кстати тоже были проблемки.... в админке при поиске выводит "Найдено n товаров" при этом нет товаров... хотя должны бвыть, именно столько сколько и написал вводил часть названия, при том по ID ищет отлично значит количество товара( get_count_products() ) ищет правильно. а сами товары выбирает не так. посмотрите, может вы где-то в get_products() что-то не так вписали, или скиньте файл Products.php я посмотрю Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 значит количество товара( get_count_products() ) ищет правильно. а сами товары выбирает не так. посмотрите, может вы где-то в get_products() что-то не так вписали, или скиньте файл Products.php я посмотрюhttps://yadi.sk/d/17nwZNBNhajWq Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 https://yadi.sk/d/17nwZNBNhajWq не ProductsView, а api/Products.php, за выборку товаров отвечает же он. Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 не ProductsView, а api/Products.php, за выборку товаров отвечает же он. упс... извнини https://yadi.sk/d/xisitRdphajhU Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 в функции count_products должен быть такой же фильтр по кейфордам как и в get_products() if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); $keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 (изменено) в функции count_products должен быть такой же фильтр по кейфордам как и в get_products() if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); $keyword_filter .= $this->db->placehold("AND (p.id=$kw OR p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } сейчас не находит вообще, пишет нет товаров! По ID ищет Изменено 30 июня, 2015 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 можно пример названия товара. в личку. или сюда.сейчас у себя проверну Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 можно пример названия товара. в личку. или сюда.сейчас у себя проверну"Комплект постельного белья Фамилье OMP-06", в поиске забиваю "OMP-06" Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 "Комплект постельного белья Фамилье OMP-06", в поиске забиваю "OMP-06"ну все тогда логично... в get_products уже не искало товары... добавил исправления в count и тут перестало....получается в запросе дело Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 июня, 2015 Жалоба Поделиться Опубликовано 30 июня, 2015 да. но в count_products() тоже не правильный был. не учитывал артикул и тд. вот: if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); if($kw!=='') { $fid = ''; if( is_numeric($kw) ) $fid = 'p.id='.$kw.' OR'; $keyword_filter .= $this->db->placehold("AND ($fid p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } проблема в том, что когда сравнивается строка не число с айди была ошибка. теперь все должно работать. Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 30 июня, 2015 Автор Жалоба Поделиться Опубликовано 30 июня, 2015 (изменено) да. но в count_products() тоже не правильный был. не учитывал артикул и тд. вот: проблема в том, что когда сравнивается строка не число с айди была ошибка. теперь все должно работать. все круто! Изменено 30 июня, 2015 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
Tarasbulba Опубликовано 1 июля, 2015 Жалоба Поделиться Опубликовано 1 июля, 2015 вот мой базовый products.php делал манипуляции с запросами но ничего не выходит. https://yadi.sk/d/p6lzWWi2hbXZu Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 1 июля, 2015 Автор Жалоба Поделиться Опубликовано 1 июля, 2015 вот мой базовый products.php делал манипуляции с запросами но ничего не выходит. https://yadi.sk/d/p6lzWWi2hbXZu нужно в функции get_products и в count_products производить изменения if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) $keyword_filter .= $this->db->placehold('AND (p.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR p.meta_keywords LIKE "%'.mysql_real_escape_string(trim($keyword)).'%") '); } у вас это строки: 96-101, 170-175, заменить на if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); if($kw!=='') { $fid = ''; if( is_numeric($kw) ) $fid = 'p.id='.$kw.' OR'; $keyword_filter .= $this->db->placehold("AND ($fid p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } } Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.