IP.Board:Дополнительные поля под аватаркой
Материал из CSI
Как добавить определённое дополнительно поле в сообщение под аватар? Как перемещать это дополнительное поле в мини-профиле пользователя в сообщении? Сейчас я попытаюсь ответить на эти вопросы.
Содержание |
[править] IP.Board 3.x
В IPB 3.x шаблон, отвечающий за отображение полей под аватаркой, является глобальным и называется userInfoPane, находится в разделе Global Templates. Данный шаблон полностью состоит из элементов профиля сообщения пользователя, поэтому выделять какие-либо участки кода нецелесообразно.
{$author['avatar']} — Аватар
{$author['title']} — Статус
{$author['member_rank_img']} — Ранг
Отображение группы:
<li> <span class='ft'>{$this->lang->words['m_group']}</span> <span class='fc'>{$author['_group_formatted']}</span> </li>
Отображение количества сообщений:
<li> <span class='ft'>{$this->lang->words['m_posts']}</span> <span class='fc'>{parse expression="$this->registry->getClass('class_localization')->formatNumber( intval( $author['posts'] ) )"}</span> </li>
Отображение даты регистрации:
<li> <span class='ft'>{$this->lang->words['m_joined']}</span> <span class='fc'>{parse date="$author['joined']" format="joined"}</span> </li>
[править] Добавление дополнительных полей
Иногда хочется взять контроль в свои руки практически над всеми функциями движка. Например, можно вручную добавлять дополнительные поля в профиль пользователя в сообщении. Делается это очень просто через шаблон самого профиля: Global Templates > userInfoPane. Но для начала необходимо удалить код автоматического вывода дополнительных полей, находим и удаляем:
<if test="authorcfields:|:$author['custom_fields'] != """> <foreach loop="customFieldsOuter:$author['custom_fields'] as $group => $data"> <foreach loop="customFields:$author['custom_fields'][ $group ] as $field"> <if test="$field != ''"> <li> {$field} </li> </if> </foreach> </foreach> </if>
Для того, чтобы вручную добавить какое-то дополнительное поле, нужно знать его идентификатор. Делается это также просто: нужно всего лишь зайти в Админцентре на страницу дополнительных полей, навести на одно из полей курсор мыши и в появившейся ссылке взять самое последнее число: <...>id=число. Теперь, когда известен идентификатор дополнительного поля, необходимо составить примерно такую конструкцию и добавить её в любое место шаблона:
<if test="$author['field_ID']"> {$author['field_ID']} </if>
где ID — идентификатор дополнительного поля.
Допустим, нам хочется вывести какую-либо картинку, которую выбирает пользователь из выпадающего списка дополнительного поля. То, что пользователь выберет — будет отображаться на месте переменной {$author['field_ID']}. То есть, например, пользователь выбрал из выпадающего поля пункт Kitty. Чтобы отобразилась картинка Kitty.gif, необходимо составить подобный код:
<if test="$author['field_ID']"> <img title="{$author['field_ID']}" src="{$author['field_ID']}.gif" alt="" /></li> </if>
где ID — идентификатор дополнительного поля.
Вот и всё! По этой инструкции можно составлять различные дополнительные поля любой конфигурации! Удачи! :)
[править] IP.Board 2.3
Итак, шаблон сообщения называется RenderRow (Изменить HTML шаблоны > skin_topic (просмотр темы) > RenderRow).
Вот участок кода, который отечает за поля под аватаром:
{$author['title']}<br />
{$author['member_rank_img']}<br /><br />
{$author['member_group']}<br />
{$author['member_posts']}<br />
{$author['member_joined']}<br />
{$author['member_location']}
{$author['member_number']}<br />
<if="$author['custom_fields'] != """>
{$author['custom_fields']}
</if>{$author['title']} — Ранг
{$author['member_rank_img']} — Изображения ранга
{$author['member_group']} — Группа пользователя
{$author['member_posts']} — Кол-во сообщений
{$author['member_joined']} — Дата регистрации
{$author['member_location']} — «Откуда»
{$author['member_number']} — ID пользователя
{$author['custom_fields']} — Автоматический вывод дополнительных полей
Последняя строчка как раз таки нам и нужна. Переменная {$author['custom_fields']} означает, что здесь будут выводится дополнительные поля.
Все дополнительные поля имеют вид {$author['field_id']}, где id — это идентификатор дополнительного поля, представляющий собой число. Чтобы его узнать, нужно зайти в базу данных в таблицу ibf_pfields_data и в столбце pf_id будет идентификатор.
Саму переменную дополнительного поля лучше заключать в условие, вот так:
<if="$author['field_id']">{$author['field_id']}</if>
[править] Разжёвываем
1. Берём наш код, отвечающий за вывод полей в сообщении под аватаром:
{$author['title']}<br />
{$author['member_rank_img']}<br /><br />
{$author['member_group']}<br />
{$author['member_posts']}<br />
{$author['member_joined']}<br />
{$author['member_location']}
{$author['member_number']}<br />
<if="$author['custom_fields'] != """>
{$author['custom_fields']}
</if>
2. Удаляем вот это:
<if="$author['custom_fields'] != """> {$author['custom_fields']} </if>
Почему удаляем? Потому что мы будем все поля добавлять вручную. Конечно, есть некоторые неудобства, такие как, например, придётся постоянно лезть в базу данных и смотреть id нового поля. Однако, при этом сразу развязываются руки и можно перемещать своё поле по шаблону куда угодно.
3. Вставляем переменную нашего дополнительного поля:
{$author['title']}<br />
{$author['member_rank_img']}<br /><br />
{$author['member_group']}<br />
{$author['member_posts']}<br />
{$author['member_joined']}<br />
{$author['member_location']}
{$author['member_number']}<br />
<if="$author['field_id']">{$author['field_id']}</if>где id — это идентификатор нашего поля.
Всё!