И снова про filter для tag_cloud

Post Reply
richmantrade
Posts: 1036
Joined: Tue Dec 04, 2012 8:46 am

И снова про filter для tag_cloud

Post by richmantrade »

Поюзав данную фишку, пришёл к выводу , что для полного счастья очень не хватает одной "плюшки".

Нужно что бы фильтр filter для tag_cloud работал не только по полному вхождению, а искал релевантные варианты.

Нужно это для формирования облака тагов на странице тага.

Сейчас, на странице тага (/scj/cgi/?tag=some-test-tag) конструкция
<tag_cloud filter="GET_tag"
выведет в лучшем случае один результат = some-test-tag , и то, только лишь в том случае, если он в статусе актив.
А хочется, иметь конструкцию, которая выведет (при наличии в базе конечно же) таги:
some-best-tag
some-tag
test-some
etc...

Я думаю, правильнее всего было бы через сфинкс искать. Но для этого наверное нужно индексить таги отдельно от основного индекса. Не знаю, правильно ли это.
Как альтернативный вариант может быть рассмотреть простоq поиск мускулем. Что то типа:

Code: Select all

$for_search = preg_replace(
array('/[\p{P}]/', '/(\s+)/'),
array('', '|'),
$_GET['tag']
);
SELECT FROM rot_tags WHERE tag_name RLIKE '$for_search' ....
Но сфинсом конечно было бы лучше. Если в таге есть предлоги (a the in) - сфинкс это игнорирует, а мускулем "найдётся всё"
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: И снова про filter для tag_cloud

Post by admin »

Думаю сфинкс для большинства будет просто лень настраивать
почему не match в мускле? зачем регэксп?
Don't forget to run script update
richmantrade
Posts: 1036
Joined: Tue Dec 04, 2012 8:46 am

Re: И снова про filter для tag_cloud

Post by richmantrade »

Да, MATCH в мускуле - норм вариант будет.

preg_replace в данном случае просто как пример.
[\p{P}] - убирает всё лишнее (кавычки, точки, запятые)
(\s+) - нужно для RLIKE. Меняет пробел на "|". Для MATCH не нужно конечно
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: И снова про filter для tag_cloud

Post by admin »

<tag_cloud num=1-10 filter=GET_tag tag_status="all">
<!--TAG_NAME--> <br>
</tag_cloud>


добавил в ап
еще добавил

tag_status="all"

если надо будет искать везде а не только активные, смотрите плз то ли что надо
Don't forget to run script update
richmantrade
Posts: 1036
Joined: Tue Dec 04, 2012 8:46 am

Re: И снова про filter для tag_cloud

Post by richmantrade »

Да, всё хорошо. Спасибо большое !
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: И снова про filter для tag_cloud

Post by admin »

Отлично)
Don't forget to run script update
richmantrade
Posts: 1036
Joined: Tue Dec 04, 2012 8:46 am

Re: И снова про filter для tag_cloud

Post by richmantrade »

Я не уверен на 100%, но у меня складывается впечатление, что если тагов согласно filter для tag_cloud не находиться - появляется ошибка:
Warning: count(): Parameter must be an array or an object that implements Countable in /home/clients/web/domains/domain.com/html/scj/includes/libs/tpl_functions.php on line 983

ЗЫ: И возможно это зависит от кеша. Т.е. если страницу прогружают в первый раз (нет её в кеше) - ошибка есть. А потом нет, пока кеш не удалишь
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: И снова про filter для tag_cloud

Post by admin »

да, есть такое
добавил в ап
Don't forget to run script update
Post Reply