Плагин "Sticky topics" для "прикрепления" записей "сверху" блогов :)

К сожалению, полазив по сайту-комьюнити Livestreet я так и не нашел приемлемого пути, как «прикрепить» нужные топики впереди всех. Поэтому вот это детище. :)

Плагин «Sticky Topics» предназначен для управления «прикрепленными» записями. Прикрепленными считаются записи, находящиеся в начале списка на главной странице сайта или блога, вне зависимости от того, когда они были опубликованы. Управлять такими записями может не только администратор всего сайта, но и администраторы конкретного блога. Обычные пользователи могут управлять прикрепленными записями в своем личном блоге. Параметры этих возможностей настраиваются в конфиг-файле.

Плагин устанавливается обычным порядком. Т.е. файлы копируются в папку plugins, после чего плагин активируется через сайт/admin/plugins

Затем следует зайти на страничку сайт/admin/stickytopics — это страничка администрирования. Как было уже сказано, зайти на эту страницу могут не только администраторы всего сайта, но и пользователи, являющиеся администраторами в каких-либо блогах. А так же и обычные пользователи, если у них есть персональные блоги. Можно запретить админам блогов использовать настройку прикрепления, отредактировав файл config/config.php и установив параметр allow_blog_admins в значение false. Для запрета обычным пользователям прикреплять записи в их персональных блогах, следует установить параметр allow_personal_blogs в false.

На страничке администрирования можно выбрать блог, в котором вы хотите прикреплять топики. Выбрав блог, в поле «Фильтр по названию топиков» следует ввести часть названия нужного вам топика и нажать кнопку «Искать». Появится список подходящих записей. Для добавления топика к списку прикрепленных, надо нажать на кнопку «+» рядом с названием нужного топика.

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

Теперь вопрос как это, собственно, выводить на сайт?

Короткий ответ – с помощью шаблонного хука get_sticky_topics. Теперь подробней.

Наверное, самый частый случай это «встраивание» прикрепленных топиков в ленту выводимых записей. То есть просто выводить прикрепленные записи вместе со всеми остальными. Как правило, это используется в трёх случаях: на главной странице сайта, на странице коллективного блога, и на странице персонального блога. Рассмотрим все три случая.

1. Прикрепленные топики на главной странице сайта

Открываем файл из каталога шаблона actions/ActionIndex/index.tpl
Перед строчкой

{include file='topic_list.tpl'}


Вставить строчку

{hook run='get_sticky_topics' aTopics=$aTopics}


Она означает вызвать хук get_sticky_topics и передать ему параметром массив aTopics, сформированный системой livestreet. В данном случае плагин ставит в начало топиков прикрепленные и убирает их из остального списка, чтобы не дублировались. Если записей больше, чем на одну страницу, то прикрепленные топики будут отображаться вначале каждой страницы.

Чтобы убрать прикрепленные топики со страниц после первой, следует использовать такой вызов хука:

{hook run='get_sticky_topics' aTopics=$aTopics  aPaging=$aPaging}


Еще может быть случай, когда прикрепленные топики требуется вывести как-то по-другому, нежели стандартной лентой. Может быть просто названия. Тогда к вызову хука надо добавить параметр outName, который задает имя массива, в который будут помещаться прикрепленные записи.

{hook run='get_sticky_topics' aTopics=$aTopics  aPaging=$aPaging outName=aSticky}
{if $aSticky}
{foreach from=$aSticky item=oTopic}
{$oTopic->getTitle()|escape:html}<br />
{/foreach}
{/if}


Тогда в результате работы хука в массиве шаблона aSticky окажутся прикрепленные топики, а массив aTopics останется неизменным. Если, все же, из массива aTopics требуется убрать прикрепленные топики, то хуку надо задать параметр removeSticky

{hook run='get_sticky_topics' aTopics=$aTopics  aPaging=$aPaging outName=aSticky removeSticky=true}

2. Прикрепленные топики на странице конкретного блога

Для того, чтобы вывести прикрепленные топики для каждого блога надо редактировать файл шаблона action/ActionBlog/blog.tpl

Единственное, чем отличается использование хука в конкретных блогах это, собственно, указание из какого, конкретно, блога брать записи. Делается это с помощью параметра blog_id:

{hook run='get_sticky_topics' aTopics=$aTopics blog_id=$oBlog->getId()}


Такой вызов хука в шаблоне блога прикрепит топики для текущего блога.

Все случаи, описанные для главной страницы сайта применимы и для конкретного блога, при добавлении параметра blog_id

3. Прикрепленные топики в персональном блоге пользователя

Тут надо менять шаблон action/ActionMy/blog.tpl

Для вывода прикрепленных топиков к персональному блогу требуется задать параметр blog_id равным -1 и указать дополнительный параметр oUser в который передать объект профиля пользователя. Для экшена ActionMy это объект oUserProfile

{hook run='get_sticky_topics' aTopics=$aTopics blog_id=-1 oUser=$oUserProfile}


Соответственно, с такими изменениями можно использовать все вышеописанные способы вызова хука.

Ну вот, собственно, и все. Надеюсь плагин будет полезен. Да, еще в планах есть автоматическая активация и деактивация прилипания топиков в зависимости от текущей даты, но я пока еще не решил с интерфейсом все вопросы.

Плагин скачать здесь

P.S. Этот плагин бесплатный, но автор с благодарностью примет материальное вознаграждение на кошельки WebMoney Z334942299641 и R328441042941, а так же Яндекс.Деньги счет 41001830047811. Помните, даже пара баксов могут скрасить вечер пивом :)

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

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

Намного лучше было бы прикрепленные, или «важные» топики выводить где то сбоку, в сайдбаре( ессно только заголовки ), т.е. те топики, которые нужно прочитать обязательно перед тем, как постить в данный блог. Правила публикации, фак, отзывы пользователей, инструкции и пр. Т.е. пользователю не нужно рыскать по блогу в поиске нужной темы, вот она, сбоку, прикреплена.

Ну и механизм прикрепления. Через админку, это по-моему геморно как то, намного удачней было бы решение прикреплять топики непосредственно на странице блога или с главной, путем нажатия кнопки рядом с заголовком, доступной только админу сайта или блога. На крайняк — сделать эту опцию доступной при редактировании топика, опять же для админов.
avatar
вообще закрепление важных тем известно еще с древних версий форумных движков, удивительно, что для лс такая функция не востребована до сих пор…
avatar
Намного лучше было бы прикрепленные, или «важные» топики выводить где то сбоку...

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

Ну и механизм прикрепления...

Я думал над этим вопросом и для текущей версии плагина это может быть реализовано чисто шаблонными методами. Но в конце концов не стал описывать как это делать, так как процедура «прикрепления» не есть ежедневная задача, а корежить шаблоны для реализации такого метода не каждый будет. А админка она подходит для любого уровня администратора и пользователя.
avatar
Правила публикации, фак, отзывы пользователей, инструкции и пр.
Если вопрос нужно решить на уровне ресурса — рациональнее решить отдельными страницами.
avatar
Плюсанул, спасибо
avatar
а зачем новые хуки в темплейтах?
avatar
Для универсальности. Как бы вы предложили сделать?
avatar
думаю, что можно поцепить хуки на методы, которые отдают списки блогов и цеплять нужные топики в начало списка.
avatar
или переопределить эти методы
avatar
Вся прелесть хуков как раз в том, что вы можете вызвать их где угодно. И не вызывать там, где НЕ угодно. Опять же уровень гибкости. В случае моих хуков можно получить результаты, которых было бы трудно добиться не используя параметризацию вызова через хуки.
avatar
> В случае моих хуков можно получить результаты, которых было бы трудно добиться не используя параметризацию вызова через хуки.

если вас не затруднит, то перечислите эти результаты. пока я придерживаюсь мнения, что ваша задача решаема без хаков в шаблонах
avatar
Ну вот, например, как сказать, что я хочу видеть прикрепленные топики на каждой странице? Или, например, что я НЕ хочу видеть их в общей ленте?
avatar
Если нужно выводить прикрепленные топики на каждой странице (где есть список топиков), тогда можно работать с Topic_GetTopicsByFilter или Topic_GetTopicsByBlog

Под общей лентой подразумевается главная страница? Если да, то — Topic_GetTopicsGood
avatar
Мы, похоже, говорим о разных вещах… я прекрасно понимаю, как это сделать в коде. Я же говорю о том, как простому дизайнеру/администратору сайта реализовать свое желание и не желание видеть это на определенных страницах.
avatar
большинству будет достаточно возможности настроить это конфиге. или вынести настройку на отдельную страницу / страницу редактирования блога

мне просто не нравится вариант с хаками для темплейтов. вспоминаются модули для LS 0.3
avatar
Действительно, как вариант можно вынести такие настройки или в конфиг или на страницу настроек. Спасибо за идею.
avatar
Подумал, повертел идею. Посмотрел еще на код… Безболезненно встроить все это лично мне не представляется возможным. Если наследовать и переопределять стандартные методы выборки топиков, то может получиться неприятности например с RSS — они всегда будут гнать прикрепленные топики в свою ленту. И не факт, что где-нибудь в сторонних модулях не вылезет какой-нибудь «косяк».

Стандартные вызовы хуков livestreet при получении списка топиков, скажем, blog_collective_show не передает ни массив aTopics ни aPaging, т.ч. как-то влиять на вывод через эти хуки тоже нельзя :(

Кстати, то, что это не передается в стандартных хуках, по-моему, не есть гуд потому, как влиять на вывод нельзя, а хочется. :)
avatar
Попробовал поставить плагин для теста… Сработало все, кроме этого:
{hook run='get_sticky_topics' aTopics=$aTopics  aPaging=$aPaging outName=aSticky}
{if ($aSticky}
{foreach from=$aSticky item=oTopic}
{$oTopic->getTitle()|escape:html}<br />
{/foreach}
{/if}

Смарти ругается на синтаксис
{if ($aSticky}

Тут, кажется, со скобками что-то напутано.
Попробовал разные варианты, но не смог вывести топики в нужном мне видел (отдельный шаблон для прикрепленных). Не подскажите, как правильно?
avatar
Дада, скобочка перед $aSticky лишняя, поправил, спасибо! :)
avatar
Здравствуйте.
Почему-то топики не прилепляются. Хотя в Списке прикрепленных страница фигурирует :/
  • F-5
  • 0
avatar
Открываем файл из каталога шаблона actions/ActionIndex/index.tpl
Перед строчкой

{include file='topic_list.tpl'}

Вставить строчку

{hook run='get_sticky_topics' aTopics=$aTopics}
Это делали?
avatar
сейчас сделал, но не помогло.
avatar
Прочитайте еще раз документацию, возможно что-то упустили. Обновите кэш.
avatar
Работает под LiveStreet v.0.5+?
kerby, апдейт планируется? )))
avatar
up
avatar
работает. у меня все пашет
avatar
пашет где?
на ls 0.5.1?

поделись рецептом!
буду благодарен
avatar
Очень хотелось бы видеть плагин адаптированным под версию 0.5.1

На сколько я понял, плагин был переписан под 0.5.0, но под последнюю версию не адаптирован…

Может просто файлы шаблона подправить? Так как смарти ругнулся и не загрузил сайт вообще…

Обидно, пришлось откатиться на 0.4.2 там плугин работает на ура! За что автору отдельное спасибо.
Очень удобно закрепить вступительную статью для блога или для главной страницы.
avatar
up — очень нужен плагин
avatar
так закажите обновление и поделитесь с сообществом, и сами останетесь довольны и от Вас польза будет
avatar
были бы деньги давно бы заказал)
avatar
так закажите обновление и поделитесь с сообществом, и сами останетесь довольны и от Вас польза будет
цена вопроса?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.