1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.2.0 Шаблон thread_view

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем RouR, 20.08.2013.

Загрузка
  1. RouR

    RouR Местный

    Регистрация:
    21.03.12
    Сообщения:
    64
    Симпатии:
    9
    Версия XF:
    1.2.0
    Код не работает
    Код:
    <xen:include template="post_first" >
        <xen:map from="$firstPost" to="$post" />
        <xen:map from="$firstPost" to="$message" />
        <xen:set var="$messageId">post-{$firstPost.post_id}</xen:set>
    </xen:include>
    Код работает
    Код:
    <xen:foreach loop="$posts" value="$post">
        <xen:if is="{$post.isFirst} == true">
            <xen:include template="post_first" >
                <xen:map from="$post" to="$message" />
                <xen:set var="$messageId">post-{$firstPost.post_id}</xen:set>
            </xen:include>      
        </xen:if>
    </xen:foreach>
    Шаблон post_first - пока что копия шаблона post.

    Помогите найти ошибку.

    Думаю очевидно, что быстродействие просядет если на двух foreach (первый пост и остальные) делать проверки на post.isFirst. Внутри одного foreach тоже держать не могу т.к. html-разметка контейнера поста нужна другая.

    По идее надо из $posts удалить первый пост в отдельную переменную.
    Или может, другие есть идеи для оптимизации?
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Напишите свой плагин с нужным функционалом. Подсмотрите сходный функционал в том же Sticky First Post. А простыми изменениями шаблона тут будет действительно много костылей.
     
  3. RouR

    RouR Местный

    Регистрация:
    21.03.12
    Сообщения:
    64
    Симпатии:
    9
    Версия XF:
    1.2.0
    как выяснилось, в XenForo_ViewPublic_Thread_View->public function renderHtml()
    функция XenForo_ViewPublic_Helper_Message::bbCodeWrapMessages($this->_params['posts'], $bbCodeParser, $bbCodeOptions); не вызывается для $firstPost
    в плагине надо дописывать как-то так
    Код:
    XenForo_ViewPublic_Helper_Message::bbCodeWrapMessages($this->_params['posts'], $bbCodeParser, $bbCodeOptions);
    
    $tmp = array();
            $tmp[0] = $this->_params['firstPost'];
            $tmp[1] = $this->_params['lastPost'];
            XenForo_ViewPublic_Helper_Message::bbCodeWrapMessages($f_l, $bbCodeParser, $bbCodeOptions);
            $this->_params['firstPost'] = $tmp[0];
            $this->_params['lastPost'] = $tmp[1];
     

Поделиться этой страницей