[Скрипт] Как добавлять дополнительные поля..

Тема в разделе "IP. Board", создана пользователем maFFyoZZyk, 14 янв 2013.

  1. maFFyoZZyk

    maFFyoZZyk DLE & IPB

    Регистрация:
    20 июн 2012
    Сообщения:
    202
    Симпатии:
    37
    И так сегодня пойдет рассказ о том как добавить дополнительные поля под аватарку или в профиль

    1.Как добавлять доп. поля под аватарку
    -------------------------------------------------------

    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 — идентификатор дополнительного поля.
    Вот и всё! По этой инструкции можно составлять различные дополнительные поля любой конфигурации! Удачи! :Smile:
    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 — это идентификатор нашего поля.
    Всё!

    2. Как добавить в профиль чтоб было кликабельно

    Открываем: Внешний вид - управление стилями - ваш стиль - шаблоны - профили пользователей - customFieldGroup__contact

    Там идем в самый конец и находим:
    Код:
    {$f->parsed}
    </if>
    </if>
    после него будет еще много </if>
    Итак, до {$f->parsed} добавляем следующее (разбираю на примере Vkontakte):

    Код:
    <if test="vk:|:$f->raw_data['pf_key'] == 'vk'">
    <a class='url uid' rel="me" href='http://vk.com/{$f->parsed}'>{$f->parsed}</a>
     <else />
    Здесь vk - это ваш ключ в дополнительных полях профиля,
    http://vk.com/ - это приставка, которая добавляется перед id

    После {$f->parsed} добавляем
    Код:
    </if> 

    Вот и все))))