Модификация recentPosts (добавление миниатюры) - 3.4.5 - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

Модификация recentPosts (добавление миниатюры) - 3.4.5 Не получается добавить миниатюру

#1 Пользователь не на сайте   Armankessilon ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 5
  • Регистрация: 07-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Февраль 2015 - 21:08

Есть IPB 3.4.5 и шаблон Velvet. В этом шаблоне сообщения отображаются с выводом миниатюр аватара ответившего.
Устанавливаю хук recentPosts (Sidebar). Сам хук в прикреплении.
Вложение  hookRecentPostsSidebar_2203.xml (26,6К)
Количество загрузок: 4
Сам хук работает, все отлично. Но он не подразумевает вывод миниатюры.
Поэтому первым же делом решаю воспользоваться текущим решением имеющегося хука 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"}
//....
//То, что дальше не пишу, остальное там корректно отрабатывает

Получается следующее:
-IMG-

Аватар игнорируется, выводится дефолтный, ссылка на профиль не создается.
В 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-
На этот раз ссылка на профиль создалась и скрипт прошел условный блок дальше. Но img src="" и картинка не грузится.
Очевидно, что $post['pp_small_photo'] нельзя вот так подставлять. Но как сделать не знаю, не получается.
Мне нужно, чтобы подставлялась pp_small_photo последнего ответившего в теме пользователя last_poster_id.

Надеюсь понятно объяснил суть проблемы :)
0

#2 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 08 Февраль 2015 - 00:01

Пытатся делать по примеру какого-то шаблона не вдаваясь и не понимая суть его работы это результат на удачу - заработает не заработает, где как правило естественно ничего не работает.

По поводу аватара. Если не ошибаюсь (поправьте меня если я не прав, ибо нет возможности проверить) метод 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 запросов.
0

#3 Пользователь не на сайте   Armankessilon ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 5
  • Регистрация: 07-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 08 Февраль 2015 - 00:07

А можно подробней как именно использовать lastPosterData? Проблема в том, что я не знаю как это сделать правильно :).
Я пытался как-то заюзать этот кусок кода, но у меня не получилось)
0

#4 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 08 Февраль 2015 - 00:10

Для начала посмотрите настройки хука. Там должны быть настройки по выводу информации автора темы и последнего пользователя.
0

#5 Пользователь не на сайте   Armankessilon ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 5
  • Регистрация: 07-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 08 Февраль 2015 - 00:13

Просмотреть сообщениеsiv1987 08 Февраль 2015 - 00:10 сказал(а):

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

Включено:
Отображать Автора
Отображать последнее сообщение.
0

#6 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 08 Февраль 2015 - 00:18

$post['starterData']
$post['lastPosterData']
0

#7 Пользователь не на сайте   Armankessilon ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 5
  • Регистрация: 07-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 08 Февраль 2015 - 00:23

Нет, не получилось.
<img src='{$post['lastPosterData']}' alt='<if test="hasAlt:|:$post['alt']">
В src подставило Array.
Я так понимаю, это массив всех данных по пользователю. И нужно сначала прочитать этот массив и выдернуть из него отдельное поле с линком на картинку.
Не подскажете как это сделать?
0

#8 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 08 Февраль 2015 - 08:21

Просмотреть сообщениеArmankessilon сказал(а):

<img src='{$post['lastPosterData']}' alt='<if test="hasAlt:|:$post['alt']">
В src подставило Array.

{parse template="userSmallPhoto" group="global" params="$post['lastPosterData']"}


А вообще уже была тема Изменение мода последние сообщения (3.2.3) Добавление мини фото
2

#9 Пользователь не на сайте   Armankessilon ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 5
  • Регистрация: 07-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 08 Февраль 2015 - 10:11

Спасибо большое, помогло!
Ту тему видел, там все свелось к тому, что надо в сам скрипт добавить строчку. В моей версии скрипта эта команда уже выполняется и добавление этой строчки приводило к дублированию записей. Тему старую не стал поднимать, чтобы не создавать путаницу (в первом сообщении написано одно, я прошу другое :)).
0

#10 Пользователь не на сайте   Strategius ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 400
  • Регистрация: 27-Март 16
  • Репутация: 29
  • IPB version:3.4.x
 

Отправлено 21 Май 2016 - 20:16

newbie
Спасибо большое! Тоже сам не смог сделать, хорошо, что эту тему увидел :)
0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна