Прикрепляем топик без плагина

В LS существует множество возможностей для реализации самого разного функционала как с использованием плагинов, так и без них.

Допустим мы хотим реализовать следующий функционал: на главной странице для гостей сверху всегда выводится определенный топик. Конечно мы можем написать под эту задачу несложный плагин, повесить его на хук в шаблоне и радоваться, но мы поступим проще (на все про все уйдет 4 строчки c учетом замечаний kpoxas три строчки). Сделаем все в шаблоне, написав при этом минимальное кол-во кода. Итак.

Нас интересует главная страница, а значит экшен Index, шаблон вывода которого находится в файле templates/skin/synio/actions/ActionIndex/index.tpl который и будем изменять.

Сразу приведу код
{if !LS::CurUsr() and !Router::GetActionEvent()}
	{include file='topic_topic.tpl' oTopic=$LS->Topic_GetTopicById(8)}
{/if}
Да-да, больше ничего не нужно, результат достигнут ;)

Здесь будем считать, что синтаксис Smarty вам более или менее знаком.

$LS — в шаблонах к ядру мы обращаемся через эту переменную.

LS::CurUsr() — эквивалент $LS->User_GetUserCurrent() — эта конструкция возвращает сущность авторизованного пользователя. Нам нужно чтобы топик выводился только гостям, поэтому перед ней указываем символ "!"

Router::GetActionEvent() — так же проверяем чтобы не был передан Event, таким образом топик будет выводиться только на первой странице.

$LS->Topic_GetTopicById(8) — здесь мы используем функцию GetTopicById для того чтобы получить топик с id = 8. Идентификатор нужного топика легко определить, для этого можно либо посмотреть в БД, либо посмотреть на ссылку ведущую на страницу его редактирования.

{include file='topic_topic.tpl' oTopic=$oTopic} — а тут мы подключаем дефолтный шаблон для вывода топиков, файл которого находится по адресу templates/skin/synio/topic_topic.tpl и передаем в нее полученный ранее топик (если тип топика отличается, например это фотосет, то нужно использовать соответствующий шаблон). Здесь нужно добавить, что можно ограничиться например выводом только текста топика, вызвав {$oTopic->getText()}

P.S. Честно говоря использовать подобные конструкции в шаблоне не является хорошей практикой, но если очень хочется, то можно ;) Ни в коем случае не призываю так делать, просто показал один из способов получить желаемый результат без плагина.
Профессиональное оборудование Cisco TelePresence

13 комментариев

avatar
Нам нужно чтобы топик выводился только гостям, поэтому перед ней указываем символ "!"
В коде "!" пропущен?
avatar
можете использовать короткий вызов для определения юзера:
 LS::CurUsr()
avatar
У меня попытка использовать такую конструкцию в шаблоне вызвает ошибку.
Strict Standards: Non-static method LS::CurUsr() should not be called statically
С чем это связано не могу сказать, если обращаться к ядру через $LS то все в порядке. Подскажите в чем может быть дело?
avatar
обновите Engine.class.php
Это исправлено уже
avatar
и можно без присвоения переменной:
{include file='topic_topic.tpl' oTopic=$LS->Topic_GetTopicById(8)}
avatar
Согласен. Вот вчера реализовал показ ссылок только для зарегистрированных. 4 строчки кода. Без каких-либо супер-сполеров и т.д.
avatar
и прямой эфир (попап подсказка) работает?
и рсс?
и с кешем все ок?
везде работает?
avatar
Тест
avatar
P.S. Честно говоря использовать подобные конструкции в шаблоне не является хорошей практикой

А что есть «хорошая практика»?
avatar
дата топика 2013г
Прикрепление топика есть catalog.livestreetcms.com/addon/view/83/
avatar
Благодарю.
Полезная отсылка. Все посмотрел. Надо теперь подумать как это стыкуется с livestreet 2.0, которую я настраиваю.
avatar
Надо теперь подумать как это стыкуется с livestreet 2.0
Создать тикет разработчику
catalog.livestreetcms.com/addon/view/83/
Или
1)Написать автору тут livestreet.ru/profile/kerby/
2)Раздел доработок-разработок job.livestreetcms.com/
avatar
Кстати сам как то хотел создать Топик о закрепления топика на главной.
Воспользовался поиском нашел.
Единственный минус топик не обозначить что он закрепление. но это уже к разработчику шаблона
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.