gluck Posted May 13, 2013 Share Posted May 13, 2013 Сделал себе вывод на странице товара тегов, относящихся именно к этому товару. Теперь надо подумать, как организовать поиск по ним Если использовать метод из модуля "облако тегов", то при клике на тег получается строка поискового запроса: /search.php?tag={тег} и в этом режиме ищутся товары, у которых {тег} встречается не только в тегах, а еще и в названии и описании. Что в общем-то неплохо, но хотелось бы организовать работу с тегами по-человечески: искать те товары, у которых {тег} встречается именно в тегах и больше нигде. С ходу такого способа не нашел, может быть подскажете — сущетсвует ли такой? Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 14, 2013 Share Posted May 14, 2013 /search.php?tag={тег} По такому запросу преста ищет только в таблице "tag". Логику можно посмотреть в методе Search::searchTag Просто в этой таблице есть названия товаров 1 Link to comment Share on other sites More sharing options...
gluck Posted May 14, 2013 Author Share Posted May 14, 2013 У меня нет такого метода, ни в классе, ни в модуле :) В классе есть getTags, насколько я понял, это чисто для определения веса тега, который меня не интересует. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 15, 2013 Share Posted May 15, 2013 Какая версия престы? 1 Link to comment Share on other sites More sharing options...
gluck Posted May 15, 2013 Author Share Posted May 15, 2013 1.2.5, кстати могли и перекроить. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 15, 2013 Share Posted May 15, 2013 Можно создать вот такой метод в классе Search: public static function findTags($query, $id_lang) { $tags = ''; $result = Db::getInstance()->ExecuteS(' SELECT SQL_CALC_FOUND_ROWS id_product, t.name FROM '._DB_PREFIX_.'product_tag pt LEFT JOIN '._DB_PREFIX_.'tag t ON (pt.id_tag = t.id_tag AND t.id_lang = '.intval($id_lang).') WHERE pt.name = "%' . pSQL($query) . '%"'); return array('total' => Db::getInstance()->getValue('SELECT FOUND_ROWS()'),'result' => Product::getProductsProperties($id_lang, $result));; } и использовать в контроллере search.php 1 Link to comment Share on other sites More sharing options...
gluck Posted May 15, 2013 Author Share Posted May 15, 2013 (edited) Йоу, спасибо, сегодня же попробую. Я так и предполагал, что для решения этой задачи придется создавать новый метод, но выразить это в коде пока не осилил — сварщик ненастоящий И чтоб два раза не вставать: я правильно понял,что предпоследня строка должна быть WHERE name = "' . pSQL($query) . '"'); ? Спасибо за помощь. Edited May 15, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 16, 2013 Share Posted May 16, 2013 Йоу, спасибо, сегодня же попробую. Я так и предполагал, что для решения этой задачи придется создавать новый метод, но выразить это в коде пока не осилил — сварщик ненастоящий И чтоб два раза не вставать: я правильно понял,что предпоследня строка должна быть WHERE name = "' . pSQL($query) . '"'); ? Спасибо за помощь. Да, в запросе Link to comment Share on other sites More sharing options...
gluck Posted May 17, 2013 Author Share Posted May 17, 2013 По ходу действия появился вопрос: Есть ли в классах 1.2.5 такая функция, которой можно скормить массив из id_product и которая выдаст на выходе пригодный для вывода список товаров? Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 17, 2013 Share Posted May 17, 2013 Да, в классе Product есть метод getProductsProperties Link to comment Share on other sites More sharing options...
gluck Posted May 17, 2013 Author Share Posted May 17, 2013 (edited) Спасибо! Но она уже содержится в findTags и, собственно, выдает мне мой массив с id_product, tags итд. Но информации из этого массива недостаточно для вывода товара на страницу - там нет name товара и еще нескольких нужных вещей. Поэтому я и ищу, как бы на основе работы findTags получить пригодный для вывода массив. Edited May 17, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 17, 2013 Share Posted May 17, 2013 Можно так сделать: $result = array(); foreach ($products as $product) { $result[] = new Product($product['id_product']); } Link to comment Share on other sites More sharing options...
gluck Posted May 18, 2013 Author Share Posted May 18, 2013 (edited) Сделал иначе, но все равно спасибо Собственно, уже практически закончил, отчитываюсь. По ходу действия возник вопрос: При формировании "штабеля" товаров в шаблон product-list.tpl откуда-то приходит массив $products. Где он формируется? Edited May 18, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 20, 2013 Share Posted May 20, 2013 В файле category.php (62 строчка) Link to comment Share on other sites More sharing options...
gluck Posted May 20, 2013 Author Share Posted May 20, 2013 Ага, static public function getProducts по задумке разработчиков не выдает теги товара... ну с этим понятно как бороться, но сначала надо найти способ красиво вывести теги в моем дизайне в стандартный штабель. Задача нетривиальная — пошел думать, а стоит ли оно того... Спасибо за помощь, Dzianis! Link to comment Share on other sites More sharing options...
lightman Posted November 24, 2013 Share Posted November 24, 2013 столкнулся с той же задачей! Нужно на странице товара вывести теги по этому товара (использую их для вывода и других товаров из этой же серии). здесь 2-а момента: нужно обязательно на странице товара выводить тег с возможностью на него нажать прямо под ценой за товар и 2-й момент - нужно доработать (переделать) модуль и другие 30-ть товаров из этой категории чтобы в нем выдавались товары с тем же тегом (чтобы выводилась серия). Как это реализовать - помогите пожалуйста? Link to comment Share on other sites More sharing options...
gluck Posted November 24, 2013 Author Share Posted November 24, 2013 Попробуйте прочитать топик и решение найдется. Link to comment Share on other sites More sharing options...
lightman Posted November 24, 2013 Share Posted November 24, 2013 если бы я разбирался в програмировании то конечно бы нашел - но я поверхностно разбираюсь в том то и дело поэтому и попросил помощи? Link to comment Share on other sites More sharing options...
gluck Posted November 24, 2013 Author Share Posted November 24, 2013 Уверяю вас, я тоже полный валенок в программировании. Все дело во внимательности. Перечитайте топик, решение там описано. Link to comment Share on other sites More sharing options...
lightman Posted November 24, 2013 Share Posted November 24, 2013 Спасибо! Частично удалось решить: http://www.lustravik.ru/lustry/3374-Odeon-Palacio-19[spam-filter]6-4690344005005.html а как у производителя ссылку проставить на производителя? и еще бы в модуле 30 других же товаров сделать вывод по тегу - было бы вообще чудесно! Link to comment Share on other sites More sharing options...
Kerm Posted November 25, 2013 Share Posted November 25, 2013 И на что там смотреть?) Link to comment Share on other sites More sharing options...
gluck Posted November 25, 2013 Author Share Posted November 25, 2013 (edited) Я тже не вижу там тегов... но раз человек считает, что он это сделал — пусть так будет. а как у производителя ссылку проставить на производителя? Это уже сделано в движке, вам осталось только включить. и еще бы в модуле 30 других же товаров сделать вывод по тегу - было бы вообще чудесно! Переведите на русский плиз. Edited November 25, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted November 25, 2013 Share Posted November 25, 2013 (edited) // Получаем ID тэгов у товара $id_tag = 'select `id_tag` from `'._DB_PREFIX_.'product_tag` where `id_product` = 12795'; $result_tag = Db::getInstance()->ExecuteS($id_tag); // И тут главная проблема в том что если у товара один тэг, то результат будет таким: Array ( [0] => Array ( [id_tag] => 1 ) ) // А если несколько тэгов то вот так: Array ( [0] => Array ( [id_tag] => 1 ) [1] => Array ( [id_tag] => 2 ) ) // Т.е. если у нас будут несколько тэгов то для каждого товара будет несколько результатов, то тогда по какому тэгу искать? //или искать товары у которых есть и первый и второй тэг? // Приведу пример ниже в том случае если мы ищем похожие товары по первому тэгу в списке тэгов: $first_tag = $result_tag[0]['id_tag']; // Далее ищем ID товаров у которых есть совпадения по первому тэгу: $id_products = 'select `id_product` from `'._DB_PREFIX_.'product_tag` where `id_tag` = '.$first_tag.''; $result_products = Db::getInstance()->ExecuteS($id_products); //Если у нас несколько товаров то получаем примерно такой массив: Array ( [0] => Array ( [id_product] => 12535 ) [1] => Array ( [id_product] => 12795 ) ) // Получаем из массива только нужные значения foreach($result_products as $k=>$r) { $result_products[$k] = $r['id_product']; } // Преобразуем массив в строчный список значений через запятую $result_products = implode(", ", $result_products); // На выходе получаем: 12535, 12795 //И с этим можно уже работать дальше. //ID языка, 6 это Россия у меня $id_lang = 6; // если это модуль то там можно получить это значение автоматически, тогда эту строчку нужно будет просто стереть. // Получаем список товаров $getproducts = 'select p.*, pl.* FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`) WHERE p.`id_product` IN ( '.$result_ids.' ) AND pl.`id_lang` = '.(int)($id_lang).' '; $tag_products = Db::getInstance()->ExecuteS($getproducts); Далее выводим полученные товары в шаблон: self::$smarty->assign(array( 'tag_products' => $tag_products )); Далее в шаблоне: <ul> {foreach from=$tag_products item=tag_product name=tag_product} <li>{$tag_product.name|escape:'htmlall':'UTF-8'}</li> {/foreach} </ul> Готово! PS.: Все это очень легко подключается к AJAX и можно сделать вообще чтобы по клику по тэгу возле него появлялся список товаров с этим же тэгом. Код вставляем в нужное место в модуле categoryproducts к примеру или новом модуле, ID товара конкретного получаем там же, там же идет как то вывод категории к которой товар принадлежит значит и ID товара этого можно там получить. Edited November 25, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 (edited) Это как это нету то??? Рядом с ценой - по Русски написано - Серия и под ней тег: http://www.lustravik.ru/lustry/3-a890-pt40-g-maytoni-diamant-1-lustra.html Серия: Maytoni Diamant 1 ---------- Это уже сделано в движке, вам осталось только включить. -- мне нужно в блоке где цена над серией проставить ссылку на производителя. что касается модуля - другие 30-ть товаров из той же категории - его мне нужно переделать на то чтобы выдавалось по тегу из этой же серии проще картинки прикладываю - там все написано Edited November 25, 2013 by lightman (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted November 25, 2013 Share Posted November 25, 2013 (edited) Читай решение выше, если все равно соображалки не хватает то 500р мне на кашелек и сделаю. Только скрол товаров, чтобы только по 30 выводилось, будешь уже сам допиливать. Вывод тэгов и производителя в товаре это вообще дело 5 секунд... <span id="product_manufacturer"><a href="{$link->getmanufacturerLink($product->id_manufacturer, $product->link_rewrite)}" title="{l s='more...'}">{$product->manufacturer_name|escape:'htmlall':'UTF-8'}</a></span> Edited November 25, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 Читай решение выше, если все равно соображалки не хватает то 500р мне на кашелек и сделаю. Только скрол товаров, чтобы только по 30 выводилось, будешь уже сам допиливать. а зачем 30-ть - там может быть и 5-ть и 2-е а может и ничего а может и 10-ть товаров! допилить врят ли смогу - мало что в этом понимаю Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 а что такое в коде? title="{l s='more...'} мне нужно просто ссылку проставить под производителем чтобы сделать линк на него на странице товара а судя по этой надписи предполагается какой то вывод еще чего то? Link to comment Share on other sites More sharing options...
gluck Posted November 25, 2013 Author Share Posted November 25, 2013 Значит ставьте вопрос так: кто и за сколько сможет сделать а), б), ц)... Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 вопрос уже был поставлен. могу еще раз: 1) ссылка под поставщиком в карточке товара (на картинке показано) 2) переделать либо заменить модуль либо вообще без него обойтись и выводить товара на карточке товара который принадлежит аналогичному тегу сколько? и каковы сроки? Link to comment Share on other sites More sharing options...
Kerm Posted November 25, 2013 Share Posted November 25, 2013 (edited) 600р, похожие товары по первому тэгу искаться будут. Скажем если у товара тэги: Яблоко, Апельсин, Вишня, то будут искаться все похожие товары по тэгу Яблоко. Возможно понадобиться все тэги у товаров переписать заново, в том случае если они добавлялись к товарам в разнобой, в разное время и что то удалялось, чтобы прибавлялось в разном порядке к ним когда ни будь. Вообще проще всего было бы сделать новое текстовое поле в админке у каждого товара куда нужно вписать какое ни будь связывающие товары значение и же по нему товары будут похожие искаться. Edited November 25, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 теги неделю назад стал вводить, когда стало понятно как реализовать вывод серии! теги уникальные если внимательно посмотрите и строятся из названия завода и серии в рассрочку возможно? с деньгами совсем не айс Link to comment Share on other sites More sharing options...
lightman Posted November 25, 2013 Share Posted November 25, 2013 ну так что? не по можeте? Link to comment Share on other sites More sharing options...
lightman Posted December 15, 2013 Share Posted December 15, 2013 все еще актуально Link to comment Share on other sites More sharing options...
lightman Posted December 19, 2013 Share Posted December 19, 2013 Сделал как написано - все получилось, НО: Есть косяк который меня реально расстроил: http://www.lustravik.ru/Bra/55-ARM219-01-G-Maytoni-Elegant-2-bra.html запрос по тегу получается таким: http://www.lustravik.ru/search?tag=Maytoni%20Elegant%202 если нажать на серию у бра - то он выведет не только ее серию но и все похожие на 2 начинающиеся то есть не четкое соответствие получается то есть не везде работает идея с серией где нет цифр а серия в виде названия -все прекрасно - где есть цифры то есть серия отличается только цифрой на конце начинается полная ерунда! Как можно поправить и сделать точное соответствие без вариантов поиска похожих? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now