Блок "Похожие топики" для livestreet 0.31

29
Блок, похожие статьи

Доброго времени суток. Решил тут на своем сайте сделать блок — «Похожие статьи». Посмотрел поиском, но нашел только платный аналог. Поэтому сделал свой блок на основе тегов.

Работает он достаточно просто, по тегам определяет похожие статьи из других блогов, упорядочивает по рейтингу и выдает пользователю. При этом учитываются все
теги к текущей статье. К сожалению веса тегов в данной версии блока не учитываются. Думаю сделать это в следующей версии.

Данный блок использует кеширование, он кеширует результаты поиска на час. Поэтому большой нагрузки на сервер не создаст. Так же он не использует ajax запросов, что делает его содержимое доступное поисковикам, и улучшает внутреннюю перелинковку сайта. Его работу можно оценить на примере вот этой статьи.

Что бы его установить, нужно скачать архив с блоком здесь. Распаковать содержимое архива в нужные папки: config и templates/language/, classes в одноименные папку, а содержание templates\skin\myequipment в папку со своим скином.

После того, как все распаковали нужно поменять файл \classes\actions\ActionBlog.class.php.
Найти в нем строку
$this->Viewer_AddBlocks('right',array('stream','tags','blogs'));
И поменять на
$this->Viewer_AddBlocks('right',array('stream','tags','blogs','similarArticles'));
И все наслаждайтесь.


UPD:
Исправил архив, что бы все работало с разу после копирования, исправил инструкции по установке
После того, как все распаковали нужно поменять файл \classes\actions\ActionBlog.class.php.
В нем нужно найти строчки

		/**
		 * Обрабатываем добавление коммента
		 */

И заменить на

		$this->Viewer_AddBlock('right','SimilarArticles');
		/**
		 * Обрабатываем добавление коммента
		 */


UPD2:
Теперь достаточно скопировать файлы в нужные директории.
  • +21
  • 18 февраля 2010, 21:22
  • empirik

Комментарии (64)

RSS свернуть / развернуть
Спасибо!

Eсли вдруг у кого не заработает, то нужно файлик: block.similarArticles.tpl
переименовать в block.SimilarArticles.tpl. Написать с большой буквы S.
0
Работает, но с ошибками, вот ТУТ указал
+2
Спасибо, исправил
+1
Отличная штука
0
отлично! то, что доктор прописал :)
0
Большое спасибо! Не подскажите, как добиться, чтобы в списке отображались статьи, начиная с последней по дате создания? Сейчас, насколько я понимаю, отображается с наиболее старой похожей статьи. Попробовал перевернуть массив с топиками с помощью array_reverse, но, наверное, не то делаю, т.к. эффекта не получил.
0
  • avatar
  • Kayum
  • 19 февраля 2010, 17:39
Такого даже на хабре нет. Только сегодня наблюдал как там мне предлагались похожие статьи 2008 года, а я недоумевал — неужели за 2009 год никто про что-то подобное не писал. По моему так намного лучше — случайные устаревшие статьи выводятся наверх.
0
Хммм… Да, действительно, вы правы. Видимо лучше в случайном порядке в списке похожих вывести.

Тогда вопрос изменяется, как сделать случайную выборку из похожих статей в этом модуле? Хотя бы в каком файле и с каким массивом работать, а с кодом постараюсь сам справиться.
0
Можно сделать случайный начало выборки, как вариант. То-есть посчитать количество статей попадающего под заданные параметры и рандомно выбрать с какой позиции показывать.
0
Сделал, теперь в конфиге есть параметры:
SIMILAR_TOPICS_ORDER_BY — может принимать два значения: rating,date
SIMILAR_TOPICS_ORDER_BY_DIRECTION — направление сортировки 0 — по возрастанию, 1 по убыванию.
+1
Тут столько написали всего ))) Ошибки убрали, ставить можно? )))
0
  • avatar
  • mdj07
  • 19 февраля 2010, 20:38
Я проверил, отбражение блогов и топиков. Добавление топиков. Вердикт, ставить можно. если что пиши в личку. Я пока тут.
0
Странноватый модуль. С одной стороны, вещь нужная, с другой — он не сортирует по убыванию рейтинга :-)

«SIMILAR_TOPICS_ORDER_BY»,«rating»
«SIMILAR_TOPICS_ORDER_BY_DIRECTION»,1

А ещё как его в самый верх зафигачить — над всякими тегами и прочими блоками? :-)
0
Нашёл причину. В файле Similararticles.mapper.php надо заменить:

	function getTopicIdForTags($tags,
							   $limit,
							   $orderBy="rating",
							   $desc=0)

на
0
Случайно запостилось. Ещё раз. Надо заменить в файле \\classes\\modules\\similararticles\\mapper\\Similararticles.mapper.php:
function getTopicIdForTags($tags,
				$limit,
				$orderBy="rating",
				$orderBy=0)

на
function getTopicIdForTags($tags,
				$limit,
				$orderBy="rating",
				$desc=0)


А потом в том же файле ниже заменить:
if($orderBy==1)
{
	$sql.=" desc ";
}

на
if($desc==1)
{
	$sql.=" desc ";
}
0
Спасибо. Багу поправил
0
Спасибо. Ещё вопрос: а как так выходит, что когда я открываю один топик, у меня появляется семь похожих записей. Потом открываю одну из этих записей — и там похожая только одна :-) Односторонняя какая-то похожесть.
0
Либо в конфиге значения поменять :)
0
Нет. Там в функции два раза параметр с одним именем.
0
К сожалению, без изменения стандартного движка ни как, нужно в класс LsViewer добавлять новый метод.
+1
Я ничего не ставил. Всё работает — кроме того, о чём я написал выше.
0
А, я понял, о чём вы :-) Но ошибочку с сортировкой поправьте всё-таки.
0
Решил проблему переноса блока «наверх» следующим образом:
В файле с хуком:
$this->Viewer_AddBlock('right','SimilarArticles');

заменил на:
$this->Viewer_AddBlock('right_top','SimilarArticles');


и в темплэйте, в файле sidebar.tpl добавил в начале:
{if isset($aBlocks.right_top)}
			{foreach from=$aBlocks.right_top item=aBlock}															
		{if $aBlock.type=='block'}
			{insert name="block" block=`$aBlock.name` params=`$aBlock.params`} 
		{/if}
		{if $aBlock.type=='template'}						 
			{include file=`$aBlock.name` params=`$aBlock.params`}
		{/if}					
	{/foreach}			
{/if}	
0
Спасибо, все работает. Но один ламерский вопрос :)
Как сделать, чтобы этот блок был не последним, а первым? Короче, как поменять его позицию, а то не нашел в ваших файлах такого(((
0
  • avatar
  • Judge
  • 19 февраля 2010, 23:30
Вы бы комментарии почитывали иногда ;-)
-2
А может подскажите как всё это завести с модулем «Менеджер блоков».
Поставил. Ругается

Fatal error: Argument 1 passed to LsSimilararticles::getSimilarForTopicByTags() must not be null, called in /var/www/mysite/data/www/mysite.ru/classes/modules/similararticles/Similararticles.class.php on line 41 and defined in /var/www/mysite/data/www/mysite.ru/classes/modules/similararticles/Similararticles.class.php on line 55
0
Закачал измененный архив, теперь не должно такого быть.
0
Странно. Ошибки нет. НО! ничего вообще не появилось. т.е. блока просто нет самого. хм…
0
т.е. в коде просто

<div class="tl"><div class="tr"></div></div>
				<div class="cl"><div class="cr">
					<h1></h1>
					<div class="block-content">
					<ul class="stream-content">
										
					</ul>
					<div class="right"><a href="http://myequipment.ru" target="_blank"></a></div>					</div>
				</div></div>

				<div class="bl"><div class="br"></div></div>
0
Дай ссылку на страницу, где у тебя стоит блок, но нет похожих статей.
0
У меня тоже с менеджером блоков не завелось что-то.
+1
а плагином это можно оформить?
0
Как раз разбираюсь с 0.4, что бы сделать плагином его.
0
я уже почти сделал :)
давай на свн закину и вместе допилим?
0
чуваки чуваки! мне тоже нужен такой как раз! :) ответьте как можно будет потестировать плииз.
0
0
Тестю
надо еще readme.txt добавить
Name: Livestreet Similar topics
Author: Stepan Tanasiychuk
Homepage: http://stfalcon.com/
Version:  0.1
Requires: 0.4.0
Description: >Выводит список похожих записей.
Delegate:


И еще — после подключения модуля вижу только ошибку:
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/block.similar_topics.tpl) is not within the allowed path(s): (/var/www/vhosts/tuningster.ru/httpdocs:/tmp) in /var/www/vhosts/tuningster.ru/httpdocs/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php  on line 1656

Fatal error: Uncaught exception 'Exception' with message 'Can not find the block`s template: /block.similar_topics.tpl' in /var/www/vhosts/tuningster.ru/httpdocs/engine/modules/viewer/Viewer.class.php:481 Stack trace: #0 /var/www/vhosts/tuningster.ru/httpdocs/engine/modules/viewer/Viewer.class.php(412): LsViewer->DefineTypeBlock('/block.similar_...', NULL) #1 /var/www/vhosts/tuningster.ru/httpdocs/engine/classes/Engine.class.php(339) : eval()'d code(1): LsViewer->AddBlock('right', '/block.similar_...', NULL, 300) #2 /var/www/vhosts/tuningster.ru/httpdocs/engine/classes/Engine.class.php(339): eval() #3 /var/www/vhosts/tuningster.ru/httpdocs/engine/classes/Hook.class.php(35): Engine->_CallModule('Viewer_AddBlock', Array) #4 [internal function]: Hook->__call('Viewer_AddBlock', Array) #5 /var/www/vhosts/tuningster.ru/httpdocs/plugins/similar/classes/hooks/HookSimilar.class.php(16): PluginSimilar_HookSimilar->Viewer_AddBlock('right', '/block.similar_...', NULL, 300) #6 /var/www/vhosts/tuningster.ru/httpdocs/engine/modules/hook in /var/www/vhosts/tuningster.ru/httpdocs/engine/modules/viewer/Viewer.class.php on line 481
0
Такс, с ошибкой разобрался. Сменил имя шаблона на new.
Как подключить модуль к шаблону? Выводить куда то надо руками?
0
а. вот с этим трабла… в плагине я добавляю блок в групу right через addBlock. но Viewer после этого очищает список блоков через ClearBlocksAll(). пока просто поставил отключил очистку.

кинь в личку мыло. дам доступ на запись
0
я в коде не особо разбираюсь, так что толку от меня не будет :)
хотелось бы выводить блок под постом, а не только в сайдбаре. такое возможно будет?
0
закончил плагин. в репозитории лежит стабильная версия. описание установки (прочитать!)
0
С Fatal error: Call to a member function getUserWebPath()бороться как-то нужно или использовать прежний шаблон?
0
LS какой ревизии? я HEAD тянул. все ок.
0
стоп. есть баг в LS. я его локально пофиксил и написал в trac trac.lsdev.ru/livestreet/ticket/45
0
Молодцом! Работает. Еще бы сделать размещение под постом, как в Wordpress. Место более видное будет. Сделаешь через опции?
0
Опять баг обнаружил
els → Машина Audi - самая популярная в мире   0 в Fatal error: Call to a member function getLogin() on a non-object in /var/www/vhosts/tuningster.ru/httpdocs/classes/modules/blog/entity/Blog.entity.class.php  on line 89
0
ок. вижу. сейчас разберусь
0
пофиксил
0
Проблема выше — там выводится Blog by els
То есть проблема только с личными блогами.
0
выводятся только названия топиков. методы типа getUser(), getUrl() и т.д. для топиков не работают. не успел разобраться почему
0
empirik смените в последнем выложенном архиве имя файла block.similarArticles.tpl на block.SimilarArticles.tpl, иначе ошибку вызывает.
+1
Сменил :)
0
в траке модуля конфиг бы переписать согласно гуидлайнам конфигурации ЛС в 0.4 :) (через return array (...) и Config::Set/Get)
0
  • avatar
  • kruft
  • 27 февраля 2010, 08:02
В LS 0.31 установил вместе с менеджером блогов, ошибок не выдает, справа появляется блог
«Похожие статьи», но он пустой, нет даже ссылки на сайт автора.
Кто-нибудь может подсказать в чем дело?
+1
Дай ссылку, где установил этот блок.
0
спасибо, я скинул ссылку в личку )))
0
И отпишитесь, пожалуйста как решить эту проблему. Т.к. у меня тоже самое. просто пустой блок выводит
0
не знаю как и что делать
0
Пиши в личку
0
А можно этот блок вставить сразу после топика, 3-4 записи, а не по правой стороне?
0
для ЛС 0.4.1 все это нужно. очень нужно.
+1
поддерживаю, очень жду обновления
0
Было бы здорово, если создать такую функцию для админа:
Показывать похожие записи, созданные за последние __ дней.
0
  • avatar
  • F-5
  • 21 января 2011, 18:21
Поставил обновленную версию, вот что выдаёт:

SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 16 at /home/***/www/***/public_html/plugins/similar/classes/modules/similar/mapper/Similar.mapper.class.php line 57
Array ( [code] => 1064 [message] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 16 [query] => SELECT topic_tag.topic_id, topic.topic_rating, COUNT(*) AS `tags_count` FROM `prefix_topic_tag` AS topic_tag, `prefix_topic` AS topic WHERE topic.topic_publish = 1 AND topic_tag.topic_id = topic.topic_id AND topic_tag_text IN ('Нью-Йорк', 'свадьба') AND topic.topic_lang = '' GROUP BY topic_tag.topic_id ORDER BY tags_count DESC, topic.topic_rating LIMIT 0, [context] => /home/***/www/***/public_html/plugins/similar/classes/modules/similar/mapper/Similar.mapper.class.php line 57 )
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.