Jump to content

Правильное использование тегов


Recommended Posts

Сделал себе вывод на странице товара тегов, относящихся именно к этому товару. Теперь надо подумать, как организовать поиск по ним :)

 

Если использовать метод из модуля "облако тегов", то при клике на тег получается строка поискового запроса:

 

/search.php?tag={тег}

и в этом режиме ищутся товары, у которых {тег} встречается не только в тегах, а еще и в названии и описании. Что в общем-то неплохо, но хотелось бы организовать работу с тегами по-человечески: искать те товары, у которых {тег} встречается именно в тегах и больше нигде.

 

С ходу такого способа не нашел, может быть подскажете — сущетсвует ли такой?

Link to comment
Share on other sites

/search.php?tag={тег}

 

По такому запросу преста ищет только в таблице "tag". Логику можно посмотреть в методе Search::searchTag

Просто в этой таблице есть названия товаров

  • Like 1
Link to comment
Share on other sites

У меня нет такого метода, ни в классе, ни в модуле :)

В классе есть getTags, насколько я понял, это чисто для определения веса тега, который меня не интересует.

Link to comment
Share on other sites

Можно создать вот такой метод в классе 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

  • Like 1
Link to comment
Share on other sites

Йоу, спасибо, сегодня же попробую.

Я так и предполагал, что для решения этой задачи придется создавать новый метод, но выразить это в коде пока не осилил — сварщик ненастоящий :)

 

 

И чтоб два раза не вставать: я правильно понял,что предпоследня строка должна быть

WHERE name = "' . pSQL($query) . '"');

?

 

Спасибо за помощь.

Edited by gluck (see edit history)
Link to comment
Share on other sites

Йоу, спасибо, сегодня же попробую.

Я так и предполагал, что для решения этой задачи придется создавать новый метод, но выразить это в коде пока не осилил — сварщик ненастоящий :)

 

 

И чтоб два раза не вставать: я правильно понял,что предпоследня строка должна быть

WHERE name = "' . pSQL($query) . '"');

?

 

Спасибо за помощь.

 

Да, в запросе

Link to comment
Share on other sites

По ходу действия появился вопрос:

 

Есть ли в классах 1.2.5 такая функция, которой можно скормить массив из id_product и которая выдаст на выходе пригодный для вывода список товаров?

Link to comment
Share on other sites

Спасибо! Но она уже содержится в findTags и, собственно, выдает мне мой массив с id_product, tags итд.

 

Но информации из этого массива недостаточно для вывода товара на страницу - там нет name товара и еще нескольких нужных вещей. Поэтому я и ищу, как бы на основе работы findTags получить пригодный для вывода массив.

Edited by gluck (see edit history)
Link to comment
Share on other sites

Сделал иначе, но все равно спасибо :) Собственно, уже практически закончил, отчитываюсь.

 

По ходу действия возник вопрос:

При формировании "штабеля" товаров в шаблон product-list.tpl откуда-то приходит массив $products.

Где он формируется?

Edited by gluck (see edit history)
Link to comment
Share on other sites

Ага, static public function getProducts по задумке разработчиков не выдает теги товара... ну с этим понятно как бороться, но сначала надо найти способ красиво вывести теги в моем дизайне в стандартный штабель. Задача нетривиальная — пошел думать, а стоит ли оно того...

Спасибо за помощь, Dzianis!

Link to comment
Share on other sites

  • 6 months later...

столкнулся с той же задачей!

Нужно на странице товара вывести теги по этому товара (использую их для вывода и других товаров из этой же серии).

здесь 2-а момента: нужно обязательно на странице товара выводить тег с возможностью на него нажать прямо под ценой за товар

и 2-й момент - нужно доработать (переделать) модуль и другие 30-ть товаров из этой категории чтобы в нем выдавались товары с тем же тегом (чтобы выводилась серия).

Как это реализовать - помогите пожалуйста?

Link to comment
Share on other sites

Спасибо!

Частично удалось решить:

http://www.lustravik.ru/lustry/3374-Odeon-Palacio-19[spam-filter]6-4690344005005.html

 

а как у производителя ссылку проставить на производителя?

 

и еще бы в модуле 30 других же товаров сделать вывод по тегу - было бы вообще чудесно!

Link to comment
Share on other sites

Я тже не вижу там тегов... но раз человек считает, что он это сделал — пусть так будет.

 

 

 

а как у производителя ссылку проставить на производителя?

Это уже сделано в движке, вам осталось только включить.

 

 

и еще бы в модуле 30 других же товаров сделать вывод по тегу - было бы вообще чудесно!

 

Переведите на русский плиз.

Edited by gluck (see edit history)
Link to comment
Share on other sites

// Получаем 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 by Kerm (see edit history)
Link to comment
Share on other sites

Это как это нету то???

 

Рядом с ценой - по Русски написано - Серия и под ней тег:

http://www.lustravik.ru/lustry/3-a890-pt40-g-maytoni-diamant-1-lustra.html

 

Серия:

Maytoni Diamant 1

 

 

----------

Это уже сделано в движке, вам осталось только включить.

 

-- мне нужно в блоке где цена над серией проставить ссылку на производителя.

 

что касается модуля - другие 30-ть товаров из той же категории - его мне нужно переделать на то чтобы выдавалось по тегу из этой же серии

 

проще картинки прикладываю - там все написано

 

post-261067-0-50418000-1385362030_thumb.jpg

 

Edited by lightman (see edit history)
Link to comment
Share on other sites

Читай решение выше, если все равно соображалки не хватает то 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 by Kerm (see edit history)
Link to comment
Share on other sites

 

Читай решение выше, если все равно соображалки не хватает то 500р мне на кашелек и сделаю.

Только скрол товаров, чтобы только по 30 выводилось, будешь уже сам допиливать.

 

 

 

а зачем 30-ть - там может быть и 5-ть и 2-е а может и ничего а может и 10-ть товаров!

допилить врят ли смогу - мало что в этом понимаю

Link to comment
Share on other sites

а что такое в коде? title="{l s='more...'}

 

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

а судя по этой надписи предполагается какой то вывод еще чего то?

Link to comment
Share on other sites

вопрос уже был поставлен.

могу еще раз:

1) ссылка под поставщиком в карточке товара (на картинке показано)

2) переделать либо заменить модуль либо вообще без него обойтись и выводить товара на карточке товара который принадлежит аналогичному тегу

 

сколько?

и каковы сроки?

Link to comment
Share on other sites

600р, похожие товары по первому тэгу искаться будут. Скажем если у товара тэги: Яблоко, Апельсин, Вишня, то будут искаться все похожие товары по тэгу Яблоко.

 

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

 

Вообще проще всего было бы сделать новое текстовое поле в админке у каждого товара куда нужно вписать какое ни будь связывающие товары значение и же по нему товары будут похожие искаться.

Edited by Kerm (see edit history)
Link to comment
Share on other sites

теги неделю назад стал вводить, когда стало понятно как реализовать вывод серии!

теги уникальные если внимательно посмотрите и строятся из названия завода и серии

 

в рассрочку возможно? с деньгами совсем не айс :(

Link to comment
Share on other sites

  • 3 weeks later...

Сделал как написано - все получилось, НО:


Есть косяк который меня реально расстроил:


 

запрос по тегу получается таким:


 

если  нажать на серию у бра - то он выведет не только ее серию но и все

похожие на 2 начинающиеся

то есть не четкое соответствие получается

то есть не везде работает идея с серией

где нет цифр а серия в виде названия -все прекрасно - где есть цифры то есть серия отличается только цифрой на конце начинается полная ерунда! Как можно поправить и сделать точное соответствие без вариантов поиска похожих?

Link to comment
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
×
×
  • Create New...