Вопрос по выводу топиков в ленте пользователя

К примеру: вывожу топики в лентах сайта плиткой, в ленте пользователя хочу вывести стандартно. В файле topic_list.tpl шаблона пишу условие:

{if $sAction=='feed'}
    стандартный вывод топиков
{else}
    плиточный вывод
{/if}


При переходе в ленту топики выводятся как и хотелось бы — стандартно, но после подгрузки следующей порции — выводятся плиткой. Почему так происходит? И можно ли как-то решить на уровне шаблона не трогая ActionUserfeed.class.php?

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

avatar
можно начать с того, что не боятся спросить у роутера напрямую имя экшена:

{if Router::GetAction()=='feed'}
    стандартный вывод топиков
{else}
    плиточный вывод
{/if}
avatar
Ок, спасибо, работает. А в чем разница, почему в первом случае так происходит?
avatar
Потому что при рендеринге основной, полной (первой) страницы фида назначается переменная sAction, которая берет значение из роутера (Router::GetAction()), а когда фид подгружает другие страницы, там создается локальная копия вьюера, в которой этой переменной просто нет (не задана). Строго говоря там всех переменных из основного вьюера нет.

Эта переменная устанавливается вьюером только для полной страницы, в подгружаемых данных через аякс (активность, фид и т.п.) она не установлена.

А у роутера всегда можно запросить имя экшена.
avatar
Понятно, спасибо!
avatar
я немного ошибся в этой формулировке:
Строго говоря там всех переменных из основного вьюера нет.
В локальной копии вьюера есть все переменные за исключением как раз имени экшена и эвента (параметров роутера и т.п.) т.к. они задаются один раз в модуле роутера.
avatar
Подскажите кто знает, можно ли выводить feed обычной постраничной навигацией, без подгрузки ajax-ом?
avatar
Надо ActionUserfeed.class.php изменять, в нем формируется подгрузка аяксом.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.