Блок "Похожие темы"

Очень не хватало блока «похожие топики».

Решил быстренько написать, но потратить времени, пришлось больше, чем я предполагал.

Модуль брать тут

Процесс установки:
1. Выполнить SQL запрос (для добавления нужного индекса. схожесть тем ищем сразу по двум полям title и tags):
alter table prefix_topic add fulltext key `title_tags` (topic_title, topic_tags);

2. Содержимое каталогов classes/ config/ и templates/ копируем (со всеми подкаталогами) в корневой каталог сайта где установлен LiveStreet.

3. Скопировать файл templates/skin/new/block.similarTopics.tpl в каталог активного скина.

Количество выводимых тем можно настроить в файле config/modules/similartopics/config.php.
SIMILARTOPIC_COUNT — количество выводимых тем (по умолчанию 5)
SIMILARTOPIC_SCORE — минимальное количество баллов, при котором тема считается похожей. рекомендуется выше 3-4, но на небольших сайтах можно и пониже. (по умолчанию 3).

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

93 комментария

avatar
Однозначно плюс в карму :)
Выложили бы в раздел модулей бесплатных… там больше народу найдет и скачает, да и еще на верху будет долго висеть, а тема уйдет.
avatar
выложил. жду модерации :)
avatar
на модерации ничего нет
avatar
галку «активности» забыл. сейчас наверное должно быть)
avatar
сам файл загрузи к модулю
avatar
загрузил:)
avatar
Насколько я понял похожими считаются темы, где в заголовке полность совпадают 2 и более слов? Морфология не учитывается?
avatar
используется полнотекстовый(fulltext) поиск. разве он не умеет морфологию?
avatar
Навероное, у меня мало топиков пока. А Sphinx должен быть установлен или другой поиск? У меня нет.
avatar
модуль написан хорошо, только есть парам моментов:
1. обработчик блока делать не обязательно, если ничего обрабатывать не нужно. Достаточно прописать в addBlock() весь путь до шаблона
2. в маппере запрос можно в разы сократить — убрать из него всё, что связанно с $iCurrentUserId т.к. эти данный всёравно не используются(vote,question_vote и т.п.)
  • ort
  • +2
avatar
На InnoDB указанные запрос не проходит, вроде как оно в принципе не держит fulltext keys
  • bas
  • +2
avatar
Опередили )
avatar
Насколько я понимаю, тем, у кого для таблицы «prefix_topic» установлен тип InnoDB, вначале следует поменять тип на MYISAM, ведь первый не поддерживает полнотекстовые индексы.
ALTER TABLE prefix_topic ENGINE = MYISAM;

Но лично у меня вышеприведённый запрос завершился неудачей:
#1217 - Cannot delete or update a parent row: a foreign key constraint fails
avatar
т.к. у этой таблицы есть внешние ключи
avatar
Может как то по другому можно решить проблему fulltext keys? Сам ort рекомендует и архитектура движка ориентированы именно на базу с поддержкой innoDB. Я думаю не дело из за отдельных доработок менять тип тип таблиц в базе.
avatar
Этот вопрос должен быть адресован разработчику модуля
avatar
варианта два: 1. делать дополнительную таблицу в MyISAM, и выносить в нее только поиск.
2. Прикручивать ко всему этому sphinx.
avatar
Спасибо, у меня заработало.
avatar
ALTER TABLE prefix_topic ENGINE = MYISAM;
не помогло

продолжает выдавать ошибку:
#1283 - Column 'topic_tags' cannot be part of FULLTEXT index
avatar
Запрос из топика успешно выполнился?
avatar
сделай
show table status where name='prefix_topic';
и погляди. Engine должен быть MyISAM, Collation=utf8_general_ci; можно еще глянуть collation отдельно
show full columns from prefix_topic
avatar
а если InnoDB, то что делать?:)
avatar
либо переводить в myisam либо забить
avatar
всё таки наверное второй вариант… а так хотелось))
avatar
ага, обидно, что только в myisam работает :(( такая полезная фича
а может как нить переделать его?
ну, например, на теги ориентироваться… я думаю, что есть какие-нить варианты…
avatar
Попробуй добавить перед запросом:
SET FOREIGN_KEY_CHECKS = 0
и после запроса:
SET FOREIGN_KEY_CHECKS = 1
avatar
#1217 - Cannot delete or update a parent row: a foreign key constraint fails
avatar
спасибо. изменил только utf8_bin на utf8_general_ci в таблице topic_title и запрос
alter table prefix_topic add fulltext key `title_tags` (topic_title, topic_tags)
прошел удачно.

Как только добавить этот блок после топика, а не в правый сайдбар :)
avatar
молодец. а у меня что-то ничего не выходит. хотя utf8_general_ci везде=))

#1214 — The used table type doesn't support FULLTEXT indexes

avatar
это потому что innodb. он не умеет полнотекстовый поиск.
avatar
понял. MayAndr значит MYISAM юзает?
avatar
очевидно так
avatar
частично как оказалось :) InnoDB стоит только для prefix_reminder и prefix_admin***
avatar
и не глючит? рекомендуется ведь Inno.
avatar
innodb не настолько «многолучше» чтобы глючить. у меня все таблицы в myisam. и вроде все работает. нет транзакций, зато есть полнотекстовый поиск)
avatar
Innodb+Sphinx надёжнее ИМХО (ну конечно же при правильном использовании)
avatar
да рекомендуют, да грешен, но работает и даже без глюков. Не знаю просто как по простому перевести всю базу в inno. на полнотекстовый поиск все равно пофиг, сфинкс же использую. Если кто знает как за пару нажатий это сделать — черканите как :)
avatar
Один из лучших дополнительных блоков :)
Большое Вам спасибо, а за то, что в публичном доступе — вдвойне :)
avatar
кто-нибудь уже поставил? покажите как выглядит плз
avatar
www.avtoturistu.ru и тыкните в последний пост!
avatar
А почему Liveportal?
avatar
Извиняюсь, не понял? Что Liveportal?
avatar
© 2009 Powered by «LivePortal»

На приведённом вами сайте это в подвале написано и ссылка на сайт ЛС
avatar
liveportal — это название темы.
avatar
Насколько я понимаю, «Powered by...» означает движок, на котором работает сайт. Потому мне было странно видеть там название темы.
avatar
Сменил шаблон и отвалился данный блок (в папку с новым шаблоном, естественно, докопировал необходимый файл). Также могу связать это с добавлением доп. блоков по этой инструкции. Проконсультируйте, пожалуйста. Всю голову сломал, почему так произошло, а ведь работал на УРА.
avatar
Вопрос такой, в модуль уже внесли изменения которые рекомендовал сделать Орт?
avatar
еще нет. для меня не критично. но обязуюсь внести на этой неделе.
avatar
Спасибо, не забудьте сообще, сразу поставлю ваш хак.
avatar
вот это тема! спасибо!
  • F-5
  • +1
avatar
А как теперь все вернуть назад? При открытие топика ошибка…
avatar
все, разобрался…
avatar
Опять сначала пишем, потом думаем?)
avatar
Как заточить под innoDB?
avatar
Подскажите, как вставить этот блок сразу после топика?
avatar
В файле topic.tpl в самый конец вставьте строку:
{include file='block.similarTopics.tpl'}
avatar
Ты же теперь знаешь более правильный способ:)
avatar
Каков вопрос, таков ответ. Он же не стоял — как создать новую позицию. Зачем усложнять?
avatar
Хм… А как создать новую позицию? ;)
avatar
В двух словах не рассказать, я освобожусь только к вечеру. Если ещё будет актуально, я напишу топик об этом.
avatar
Заранее спасибо. Буду ждать.
avatar
кто нибудь пробывал на innoDB конвертить таблицу в MYISAM? как после этого работает? Глюков не обнаружилось? Уж очень полезный модуль)
avatar
ИМХО, не шибко верное направление мысли. Лучше создать еще одну таблицу в MyISAM, специально обученную для полнотекстового поиска.
avatar
Каким образом это лучше сделать?
avatar
Готового рецепта не дам, потому что не знаю, как именно строит запросы топикстартер, каков у него алгоритм поиска похожих топиков. Поэтому дал только направление поисков.

Но я еще пляшу от следующих соображений: движок заточен под InnoDB (не вникая в глубь понимаю, что используются ключи, возможно, транзакции и т.д.). Если ресурс подразумевается серьезный и с хорошей посещаемостью, то нафига искать приключений? «Похожие топики» — классная фича, но для меня не до такой степени, чтобы я рисковал целостностью данных.
avatar
Никто и не говорит рисковать. Просто нужно переделать как-то. Я не смотрел исходник блока, но первое, что приходит на мысль — это определять «похожесть» по тегам топиков. Но это, имхо, самый примитивный вариант :(
avatar
имхо, я бы сказал, что определяться похожие темы должны по словам в названии топика.
avatar
Спасибо, все получилось все работает. Таблица MyISAM utf8_general_ci
avatar
Может кто-нибуть показать пример работы ЭТОГО модуля?
avatar
А не будет ли доработки с возможностью указания приоритета вывода блока? А то после добавления два новых (дополнительных) блока, данный перестал выводиться… Менял строку:
$this->Viewer_AddBlocks('right',array('baner2','tags','stream','blogs','baner'));

Добавились baner и baner2… SimilarTopics сломался(((
avatar
Установил, но не вижу результатов, ошибок тоже не видно :)
Блок по умолчанию должен выводиться, сразу после установки или его нужно прописать куда-то?
Заранее спасибо…
avatar
Что-то тема как то сникла… Ну, что есть шарящие в Sphinx? Переписать под последние ревизии и используя Sphinx? Много кто спасибо скажет )) Ну можно конечно немножко денюжек обществом собрать. Там делать то почти нечего (ну в смысле человеку, который шарит в sphinx)
avatar
Вещь полезная, работает, но нашел один досадный косячок.
В блоке выводятся все публикации, даже неопубликованные. Тоесть в «похожих темах» есть ссылки на заголовки топиков, которые еще в черновиках. Отсюда 404 ошибки, а это не нравится ни Яше, ни Гуглу
avatar
У меня ошибку выдает web.tomsk.ru/blog/News/1.html
avatar
подскажите, что делать если после запроса sql выдает ошибку #1214 — The used table type doesn't support FULLTEXT indexes
avatar
при попытке ALTER TABLE prefix_topic ENGINE = MYISAM — также пишет ошибку #1217 — Cannot delete or update a parent row: a foreign key constraint fails
avatar
это значит, все? ничего у меня не выйдет с добавлением этого нужного мне модуля?? :(
avatar
У вас таблицы в InnoDB. Они не поддерживают полнотекстовый поиск. Сейчас идёт разработка этого модуля с поддержкой InnoDB (через sphinx). Если вы счастливый обладатель VPS/VDS то присоединяйтесь
avatar
спасибо за ответ, но как мне теперь все вернуть обратно, а то у меня ругается сайт SQL Error: The used table type doesn't support FULLTEXT indexes
avatar
Жаль в ревизиях из svn уже не работает ((
avatar
ну очень не хватает этого модуля на этом сайте лайвстрит! темы бы сами показывались пишущему, не нужно было бы искать
avatar
установила по подсказке выже вывод блока похожих топиков после самого топика. Но дублируется такой же блог в сайдбаре. Не нашла упоминания в шаблонах сайдбара об этом топике… как его убрать с сайдбара, оставив под топиком?
avatar
Дуратский вопрос, но… Хочу чтобы блок выводился в сайд баре. Но он выводится без дефолтовой рамочки лифстрит. Как её добавить в дизайн блока?)) порылся в .tpl но не понял что нужно добавить.((
avatar
Написал, если будут такиеже как и я, вот код шаблона с рамочкой(шаблон дефолтовый))
<div class="block similar stream" style="margin-bottom: 15px;">
		<div class="tl"><div class="tr"></div></div>
		<div class="cl"><div class="cr">
         	<div class="left-top-corner">
            	<div class="right-top-corner">
               	<div class="right-bot-corner">
                <div class="left-bot-corner">
                     	<div class="inner">
                            <h1>{$aLang.block_similarTopics}</h1>
			    <div class="block-content">
				<ul class="stream-content">
					{foreach from=$oSimilarTopics item=oTopic name="cmt"}
						<li {if $smarty.foreach.cmt.iteration % 2 == 1}class="even"{/if}>
							<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oTopic->getUserLogin()}/" class="stream-author">{$oTopic->getUserLogin()}</a> →
							<span class="stream-topic-icon"></span><a href="{$oTopic->getUrl()}" class="stream-topic">{$oTopic->getTitle()|escape:'html'}</a>
							<span>{$oTopic->getCountComment()}</span> в <a href="{$oTopic->getBlogUrlFull()}" class="stream-blog">{$oTopic->getBlogTitle()|escape:'html'}</a>
						</li>						
					{/foreach}				
				</ul>
			    </div>
                	</div>
    		</div>
    		</div>
    		</div>
    		</div>
		</div>
		</div>
		<div class="bl"><div class="br"></div></div>
	</div>
avatar
от обилия лишних дивов в глазах рябит
avatar
Созрел еще вопрос, как сделать так, чтобы блок не выводиося, если в нем ничего нет?
avatar
для версии 0.4 бу работать?
avatar
Для 0.4.2 бы адаптировать ;)
avatar
Уже оказывается есть в каталоге :)
avatar
avatar
Ошибка появилась:
Catchable fatal error: Argument 1 passed to PluginSimilar_ModuleSimilar::setCurrentTopic() must be an instance of ModuleTopic_EntityTopic, null given in /var/www/yaf/data/www/t-human.com/blogs/plugins/similar/classes/modules/similar/Similar.class.php on line 34


На этой строке:
function setCurrentTopic(ModuleTopic_EntityTopic $currentTopic) {


Собственно, после установки плагина «aceBlockManager».

Подскажите, кому не сложно, где искать ошибку?
avatar
господа, подскажите новичку)

возможна ли реализация «похожих тем» на ls 0.4.2 с innodb и без сфинкса?

если нет — не могли бы ткнуть в носом в «настройка сфинкса для ls для чайников»? :)
avatar
livestreet.ru/addons/140/ нашёл вот это, оно работает, но насколько я понял — действует только для тегов и тайтла. Для того, чтобы учитывалось тело поста нужен сфинкс? Если так, последний вопрос предыдущего коммента в силе)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.