Similar: Вывод похожих публикаций под топиком


1.В /templates/skin/default/block.similarTopics.tpl заменит код на
{if $aSimilarTopics|@count}
			<div class="block stream" style="padding-left:40px;padding-bottom:15px;">
						<span style="font-weight:bold;color:#66b746;">
{$aLang.block_similar_articles_title}</span>
					<div class="block-content">
					<ul class="stream-content">
						{foreach from=$aSimilarTopics item=oTopic name="cmt"}
							{assign var="oBlog" value=$oTopic->getBlog()}
							{assign var="oUser" value=$oTopic->getUser()}

							<li {if $smarty.foreach.cmt.iteration % 2 == 1}class="even"{/if}>
								<a href="{$oUser->getUserWebPath()}" class="stream-author">{$oUser->getLogin()}</a> →
								<a href="{$oTopic->getUrl()}" class="stream-topic">{$oTopic->getTitle()|escape:'html'}</a>
								<span> ({$oTopic->getCountComment()})</span> РІ <a href="{$oBlog->getUrlFull()}" class="stream-blog">{$oBlog->getTitle()|escape:'html'}</a>
							</li>
						{/foreach}
					</ul>
			
			</div>
 </div>
                        {/if}


2.Меняем на этот код все в файле HookSimilar.class.php
<?php
/**
 * Хук для плагина Similar
 */
class PluginSimilar_HookSimilar extends Hook {

        /**
         * Регистрируем хук на topic_show
         *
         * @return void
         */
        public function RegisterHook() {
                $this->AddHook("topic_show", "topicShowed", __CLASS__);
        }

        /**
         * Получаем список похожих топиков, передаем их в Viewer и добавляем нужный блок в сайдбар
         *
         * @param array $aVars
         */
        function topicShowed($aVars) {
                if(isset($aVars['oTopic'])) {
                        $this->Viewer_AddBlock(
                                'left',
                                'similarTopics',
                                array('plugin' => 'similar', 'oTopic' => $aVars['oTopic']),
                                Config::Get('plugin.similar.topics_block_priority')
                        );
                }
        }
}


3.В topic.tpl после

{hook run='topic_show_end' topic=$oTopic}
			</div>

добавить

<div>
        {if isset($aBlocks.left)}
                        {foreach from=$aBlocks.left item=oBlock}
                                {if $oBlock.type == 'block'}
                                        {insert name="block" block=`$oBlock.name` params=`$oBlock.params`}
                                {/if}
                                {if $oBlock.type == 'template'}
                                        {include file=`$oBlock.name` params=`$oBlock.params`}
                                {/if}
                        {/foreach}
                {/if}

</div>

31 комментарий

avatar
Так templates/skin/default/block.similarTopics.tpl нету же вроде такой папки default. А в том же developer нету такого файла block.similarTopics.tpl
avatar
Это для плагина
avatar
Понятно. Спасибо. Насколько я понимаю для lsblocks?
avatar
Нет, плагин называется Similar, посмотри в модулях
avatar
Ага. Спасибо.
Я сделал, но похожие остались в сайдбаре справа, правда с другим стилем уже.
avatar
тоже самое что и у leftloft
В чем может быть проблема?
avatar
чуток не дописал оказывается, меняем все в файле /classes/hooks/HookSimilar.php на этот код
<?php
/**
 * Хук для плагина Similar
 */
class PluginSimilar_HookSimilar extends Hook {

        /**
         * Регистрируем хук на topic_show
         *
         * @return void
         */
        public function RegisterHook() {
                $this->AddHook("topic_show", "topicShowed", __CLASS__);
        }

        /**
         * Получаем список похожих топиков, передаем их в Viewer и добавляем нужный блок в сайдбар
         *
         * @param array $aVars
         */
        function topicShowed($aVars) {
                if(isset($aVars['oTopic'])) {
                        $this->Viewer_AddBlock(
                                'left',
                                'similarTopics',
                                array('plugin' => 'similar', 'oTopic' => $aVars['oTopic']),
                                Config::Get('plugin.similar.topics_block_priority')
                        );
                }
        }
}
avatar
Спасибо все отлично работает.
avatar
А можно так-же сделать с облаком тегов? Ну то есть, чтобы под постом был, после похожих?
А можно чтобы описание блога было над постом (в полном посте)?

Если да, то сколько это будет стоить?
avatar
{insert name="block" block=tags}

в topic.tpl куда захотите

ps постучитесь в личку, дам кошелек для оплаты трудов :D
avatar
Мало. Дело в том что у меня выводится пост на главную через topic. То есть получается что на главной теперь у меня после каждого поста облако тегов.
И в полном посте надо убрать из сайдбара облако. Чтобы дубля не было.

Если решите — высылайте кошелек в личку.
avatar
из config.cfg в
'blocks'  => array(
			'right' => array('stream'=>array('priority'=>100),'tags'=>array('priority'=>50),'blogs'=>array('params'=>array(),'priority'=>1))
		),

удалите
'tags'=>array('priority'=>50),

облако пропадет из сайдбара
а есчли в самый низ нужно, то
{insert name="block" block=tags}

вставте в footer.tpl куда понравится, к примеру после
{hook run='content_end'}
avatar
там же итак выводятся теги, которые вы задаете когда публикуете топик, а зачем все?
avatar
А где взять такой плагин для ls 4
avatar
Если вбить в поиск, то первый же ответ приведет в каталог на страницу для скачивания: livestreet.ru/addons/140/
avatar
Это блоком! а мне как здесь интересно! а именно под статьей!
avatar
Нужно скачать тот плагин и сделать изменения из этого топика…
avatar
Спасиба! уже зделал!
avatar
А как осуществлять вывод данного блока под публикацией? Как будет выглядеть код вызова, скажем, в aceBlockManager? Что-то у меня постоянно ошибки вываливаются про невозможность найти шаблон для этого модуля :(
avatar
У меня также выводится с ошибками!
avatar
Поясню в чем проблема:
добавил следующий код в конфиг модуля блоков
$config['blocks'][]=array(
        'block'=>'similarTopics', // название блока
        'position'=>'left', // позиционирование блока
		'params'=>array(
        'plugin'=>'similar', 
         ),
		 
);

Выводится ошибка, но часть сайта грузится (до места, где должны топики выводиться):
Catchable fatal error: Argument 1 passed to PluginSimilar_ModuleSimilar::setCurrentTopic() must be an instance of ModuleTopic_EntityTopic, null given in /home/ххх/http/plugins/similar/classes/modules/similar/Similar.class.php on line 34

Если что-то другое писать в конфиге — вообще сайт не грузит и один большой Фатал еррор.
avatar
А где вы нашли в плагине similar файл topic.tpl?

не могу найти и все, первые два действия выполнил.
avatar
скачал еще раз архив с плагином — этого файла там нет
avatar
Не в плагине, в дефолтном шаблоне.
avatar
Установил по инструкции на LS 0.5
Работает правда потупил немного прежде чем заработало.

Для тех кто плохо знает LS (т.е. таких как я) ) Очень подробно:
П.1
определяем стиль отображения блока
В /plugins/similar/templates/skin/ваш_шаблон/block.similarTopics.tpl (если такого файла нет, то создайте его) заменить код на:
{if $aSimilarTopics|@count}
                        <div class="block stream" style="padding-left:40px;padding-bottom:15px;">
                                                <span style="font-weight:bold;color:#66b746;">
{$aLang.block_similar_articles_title}</span>
                                        <div class="block-content">
                                        <ul class="stream-content">
                                                {foreach from=$aSimilarTopics item=oTopic name="cmt"}
                                                        {assign var="oBlog" value=$oTopic->getBlog()}
                                                        {assign var="oUser" value=$oTopic->getUser()}

                                                        <li {if $smarty.foreach.cmt.iteration % 2 == 1}class="even"{/if}>
                                                                <a href="{$oUser->getUserWebPath()}" class="stream-author">{$oUser->getLogin()}</a> →
                                                                <a href="{$oTopic->getUrl()}" class="stream-topic">{$oTopic->getTitle()|escape:'html'}</a>
                                                                <span> ({$oTopic->getCountComment()})</span> РІ <a href="{$oBlog->getUrlFull()}" class="stream-blog">{$oBlog->getTitle()|escape:'html'}</a>
                                                        </li>
                                                {/foreach}
                                        </ul>
                        
                        </div>
 </div>
                        {/if}


П.2
Прописываем Hook
Заменить содержимое /plugins/similar/classes/hooks/HookSimilar.class.php на:
<?php
/**
 * Хук для плагина Similar
 */
class PluginSimilar_HookSimilar extends Hook {

        /**
         * Регистрируем хук на topic_show
         *
         * @return void
         */
        public function RegisterHook() {
                $this->AddHook("topic_show", "topicShowed", __CLASS__);
        }

        /**
         * Получаем список похожих топиков, передаем их в Viewer и добавляем нужный блок в сайдбар
         *
         * @param array $aVars
         */
        function topicShowed($aVars) {
                if(isset($aVars['oTopic'])) {
                        $this->Viewer_AddBlock(
                                'left',
                                'similarTopics',
                                array('plugin' => 'similar', 'oTopic' => $aVars['oTopic']),
                                Config::Get('plugin.similar.topics_block_priority')
                        );
                }
        }
}


П.3
Определяем местоположение блока в шаблоне
В /templates/skin/ваш-шаблон/topic.tpl в нужное место, а в шаблоне default после:
{hook run='topic_show_end' topic=$oTopic}
</div>

Заменить на:
Код отличается от кода автора, отсутствием некоторых кавычек (с ними у меня не работало отображение похожих записей)
<div>
        {if isset($aBlocks.left)}
                        {foreach from=$aBlocks.left item=oBlock}
                                {if $oBlock.type == 'block'}
                                        {insert name="block" block=$oBlock.name params=$oBlock.params}
                                {/if}
                                {if $oBlock.type == 'template'}
                                        {include file=$oBlock.name params=$oBlock.params}
                                {/if}
                        {/foreach}
                {/if}

</div>
avatar
Что-то я с 0.5 не могу разобраться (криворукость, что поделать)


Выполнил шаг 1 и шаг 2

В папке шаблона у нас нет topic.tpl, а есть topic_типтопика.tpl и у них в конце такая вот штука
{hook run='topic_show_info' topic=$oTopic}
    </ul>
    {if !$bTopicList}
    {hook run='topic_show_end' topic=$oTopic}
    {/if}
</div>


Ставлю после этого из п.3. получается.


{hook run='topic_show_info' topic=$oTopic}
    </ul>
    {if !$bTopicList}
    {hook run='topic_show_end' topic=$oTopic}
    {/if}
</div>
<div>
        {if isset($aBlocks.left)}
                        {foreach from=$aBlocks.left item=oBlock}
                                {if $oBlock.type == 'block'}
                                        {insert name="block" block=$oBlock.name params=$oBlock.params}
                                {/if}
                                {if $oBlock.type == 'template'}
                                        {include file=$oBlock.name params=$oBlock.params}
                                {/if}
                        {/foreach}
                {/if}

</div>


В итоге ничего не получается :(. Подскажите, как правильно настроить вывод похожих записей после текста топика?
avatar
Шаблон Street Spirit
avatar
avatar
Спасибо. И как я это пропустил…
avatar
а для 1.0.1 версии неподскажите?
avatar
Извиняюсь за некропостинг, но может кому-то будет интересно:
github.com/stfalcon-studio/ls-plugin_similar/pull/14
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.