Armankessilon Posted February 7, 2015 Share Posted February 7, 2015 Есть IPB 3.4.5 и шаблон Velvet. В этом шаблоне сообщения отображаются с выводом миниатюр аватара ответившего.Устанавливаю хук recentPosts (Sidebar). Сам хук в прикреплении.hookRecentPostsSidebar_2203.xmlСам хук работает, все отлично. Но он не подразумевает вывод миниатюры.Поэтому первым же делом решаю воспользоваться текущим решением имеющегося хука Recent Topics.В шаблоне hookRecentTopics имеется следующий код: <if test="recenttopics:|:is_array( $topics ) && count( $topics )"> <div class='ipsSideBlock clearfix'> <h3>{$this->lang->words['recently_added_topics']}</h3> <div class='_sbcollapsable'> <ul class='ipsList_withminiphoto'> <foreach loop="topics_hook:$topics as $r"> <li class='clearfix'> {parse template="userSmallPhoto" group="global" params="$r"} <div class='list_content'> <strong><a href="{parse url="showtopic={$r['tid']}" base="public" template="showtopic" seotitle="{$r['title_seo']}"}" rel='bookmark' class='ipsType_small' title='{parse expression="strip_tags($r['topic_title'])"} {$this->lang->words['topic_started_on']} {parse date="$r['start_date']" format="LONG"}'>{$r['topic_title']}</a></strong> <p class='desc ipsType_smaller'> <if test="$r['members_display_name']">{parse template="userHoverCard" group="global" params="$r"}<else />{$this->settings['guest_name_pre']}{$r['starter_name']}{$this->settings['guest_name_suf']}</if> - {parse date="$r['start_date']" format="short"} </p> </div> </li> </foreach> </ul> </div> </div> </if> <foreach loop="topics_hook:$topics as $r"> запускает цикл, как я понимаю, и передает его параметры в $r для запуска userSmallPhoto.{parse template="userSmallPhoto" group="global" params="$r"} userSmallPhoto рисует саму картинку и делает ссылку на профиль. Имеет следующий код: <if test="linkAvatarOpen:|:$member['member_id'] && ( $this->memberData['g_is_supmod'] || ($this->memberData['g_mem_info'] && ! IPSMember::isInactive($member) ) )"> <a href='{parse url="showuser={$member['member_id']}" template="showuser" seotitle="{$member['members_seo_name']}" base="public"}' class='ipsUserPhotoLink left'> <else /> <div class='left'> </if> <if test="hasphoto:|:$member['member_id']"> <img src='{$member['pp_small_photo']}' alt='<if test="hasAlt:|:$member['alt']">{$member['alt']}<else />{$this->lang->words['photo']}</if>' class='ipsUserPhoto <if test="hasCustomClass:|:empty($member['_customClass'])">ipsUserPhoto_mini<else />{$member['_customClass']}</if>' /> <else /> {IPSMember::buildNoPhoto(0, 'mini' )} </if> <if test="linkAvatarClose:|:$member['member_id'] && ( $this->memberData['g_is_supmod'] || ($this->memberData['g_mem_info'] && ! IPSMember::isInactive($member) ) )"> </a> <else /> </div> </if> Пытаюсь аналогичным образом вызвать userSmallPhoto для recentPosts.Код у recentPosts получается вот такой: <if test="hasRecentPosts:|:is_array($recentPosts) && count($recentPosts)"> <div class='ipsSideBlock clearfix'> <h3>{$this->lang->words['recentposts_title']}</h3> <ul class='ipsList_withminiphoto'> <foreach loop="posts:$recentPosts as $post"> //цикл <li class='clearfix' style='word-break: break-word;'> {parse template="userSmallPhoto" group="global" params="$post"} //.... //То, что дальше не пишу, остальное там корректно отрабатывает Получается следующее: Аватар игнорируется, выводится дефолтный, ссылка на профиль не создается. В userSmallPhoto алгоритм уходит в else {IPSMember::buildNoPhoto(0, 'mini' )} и дальше не идет. Решил после этого попробовать скопировать код из userSmallPhoto и вставить его в recentPosts с некоторыми модификациями в переменных. $member был заменен на $post, member_id на last_poster_id.Получилось следующее: <if test="hasRecentPosts:|:is_array($recentPosts) && count($recentPosts)"> <div class='ipsSideBlock clearfix'> <h3>{$this->lang->words['recentposts_title']}</h3> <ul class='ipsList_withminiphoto'> <foreach loop="posts:$recentPosts as $post"> <li class='clearfix' style='word-break: break-word;'> <if test="linkAvatarOpen:|:$post['last_poster_id'] && ( $this->memberData['g_is_supmod'] || ($this->memberData['g_mem_info'] && ! IPSMember::isInactive($post) ) )"> <a href='{parse url="showuser={$post['last_poster_id']}" template="showuser" base="public"}' class='ipsUserPhotoLink left'> <else /> <div class='left'> </if> <if test="hasphoto:|:$post['last_poster_id']"> <img src='{$post['pp_small_photo']}' alt='<if test="hasAlt:|:$post['alt']">{$post['alt']}<else />{$this->lang->words['photo']}</if>' class='ipsUserPhoto <if test="hasCustomClass:|:empty($post['_customClass'])">ipsUserPhoto_mini<else />{$post['_customClass']}</if>' /> <else /> {IPSMember::buildNoPhoto(0, 'mini' )} </if> <if test="linkAvatarClose:|:$post['last_poster_id'] && ( $this->memberData['g_is_supmod'] || ($this->memberData['g_mem_info'] && ! IPSMember::isInactive($post) ) )"> </a> <else /> </div> </if> На этот раз ссылка на профиль создалась и скрипт прошел условный блок дальше. Но img src="" и картинка не грузится.Очевидно, что $post['pp_small_photo'] нельзя вот так подставлять. Но как сделать не знаю, не получается.Мне нужно, чтобы подставлялась pp_small_photo последнего ответившего в теме пользователя last_poster_id. Надеюсь понятно объяснил суть проблемы :) Link to comment Share on other sites More sharing options...
siv1987 Posted February 7, 2015 Share Posted February 7, 2015 Пытатся делать по примеру какого-то шаблона не вдаваясь и не понимая суть его работы это результат на удачу - заработает не заработает, где как правило естественно ничего не работает. По поводу аватара. Если не ошибаюсь (поправьте меня если я не прав, ибо нет возможности проверить) метод buildDisplayData как раз генерирует аватар. В хуке имеется такой код // grab data for avatars if($this->settings['hsc_rp_start']) { $t['starterData'] = IPSMember::buildDisplayData($t['starter_id']); } if($this->settings['hsc_rp_last']) { $t['lastPosterData'] = IPSMember::buildDisplayData($t['last_poster_id']); } Т.е. нужно включить соответствующие настройки и использовать ключи lastPosterData или starterData в нужном месте шаблона. Проблема только в том что в данном случае этот метод будет генерировать отдельно запрос в бд для каждого пользователя. Если там пять тем +5 запросов. Link to comment Share on other sites More sharing options...
Armankessilon Posted February 7, 2015 Author Share Posted February 7, 2015 А можно подробней как именно использовать lastPosterData? Проблема в том, что я не знаю как это сделать правильно :).Я пытался как-то заюзать этот кусок кода, но у меня не получилось) Link to comment Share on other sites More sharing options...
siv1987 Posted February 7, 2015 Share Posted February 7, 2015 Для начала посмотрите настройки хука. Там должны быть настройки по выводу информации автора темы и последнего пользователя. Link to comment Share on other sites More sharing options...
Armankessilon Posted February 7, 2015 Author Share Posted February 7, 2015 Для начала посмотрите настройки хука. Там должны быть настройки по выводу информации автора темы и последнего пользователя.Включено:Отображать АвтораОтображать последнее сообщение. Link to comment Share on other sites More sharing options...
siv1987 Posted February 7, 2015 Share Posted February 7, 2015 $post['starterData']$post['lastPosterData'] Link to comment Share on other sites More sharing options...
Armankessilon Posted February 7, 2015 Author Share Posted February 7, 2015 Нет, не получилось.<img src='{$post['lastPosterData']}' alt='<if test="hasAlt:|:$post['alt']">В src подставило Array.Я так понимаю, это массив всех данных по пользователю. И нужно сначала прочитать этот массив и выдернуть из него отдельное поле с линком на картинку.Не подскажете как это сделать? Link to comment Share on other sites More sharing options...
newbie Posted February 8, 2015 Share Posted February 8, 2015 В src подставило Array.{parse template="userSmallPhoto" group="global" params="$post['lastPosterData']"} А вообще уже была тема Изменение мода последние сообщения (3.2.3) Добавление мини фото 2 Link to comment Share on other sites More sharing options...
Armankessilon Posted February 8, 2015 Author Share Posted February 8, 2015 Спасибо большое, помогло!Ту тему видел, там все свелось к тому, что надо в сам скрипт добавить строчку. В моей версии скрипта эта команда уже выполняется и добавление этой строчки приводило к дублированию записей. Тему старую не стал поднимать, чтобы не создавать путаницу (в первом сообщении написано одно, я прошу другое :)). Link to comment Share on other sites More sharing options...
Strategius Posted May 21, 2016 Share Posted May 21, 2016 newbieСпасибо большое! Тоже сам не смог сделать, хорошо, что эту тему увидел :) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now