Jump to content

Добавление кнопки для предупреждения во всплывающий профиль и блок сообщения


tasker
 Share

Recommended Posts

Здравствуйте.

 

По просьбе пользователей сайта опубликую инструкцию по добавлению кнопки предупреждения пользователя во всплывающем профиле пользователя (шаблон showCard) и в блоке сообщения темы (шаблон post).

 

Итак, в шаблоне showCard надо найти код

<li><a href='{parse url="app=members&module=profile&section=friends&do=add&member_id={$member['member_id']}&secure_key={$this->member->form_hash}" base="public"}' title='{$this->lang->words['add_friend']}'>{parse replacement="add_friend"}/a></li>								
			</if>
		</if>

и после него вставить следующий код

<if test="$this->memberData['is_mod']">
		<li><a href='{parse url="app=members&module=profile&section=warnings&do=add&member={$member['member_id']}&from_app={$this->request['from_app']}&from_id1={$this->request['from_id1']}&from_id2={$this->request['from_id2']}" base="public"}' title='{$this->lang->words['warnings_add']}'>{parse replacement="t_announcement"}</a></li>
</if>

Это добавит кнопку для предупреждения пользователя из всплывающего мини-профиля. Кнопка будет отображаться только у админов.

post-54874-0-44769900-1375527269_thumb.jpg

 

В начало шаблона post надо вставить

<php>ipsRegistry::getClass('class_localization')->loadLanguageFile( array( 'public_profile' ), 'members' );</php>

А это код самой кнопки для предупреждения пользователя

<if test="$this->memberData['is_mod']">
		<li><a href='{parse url="app=members&module=profile&section=warnings&do=add&member={$post['author']['member_id']}&from_app={$this->request['from_app']}&from_id1={$this->request['from_id1']}&from_id2={$this->request['from_id2']}" base="public"}' title='{$this->lang->words['warnings_add']}' class='ipsButton_secondary'>{$this->lang->words['warnings_add']}</a></li>
</if>

вставьте его в нужном вам месте. Я вставил рядом с кнопкой для скрытия сообщения.

 

Это добавит кнопку для предупреждения пользователя из блока сообщения. Кнопка будет отображаться только у админов.

post-54874-0-58936100-1375527278_thumb.jpg

  • Upvote 2
Link to comment
Share on other sites

Кнопка будет отображаться только у админов.

А также у супермодераторов и модераторов форумов, исходя из условия

<if test="$this->memberData['is_mod']">

Что-то (условия) можете взять из этой темы http://ipbskins.ru/forum/topic7101.html

+

&from_app={$this->request['from_app']}&from_id1={$this->request['from_id1']}&from_id2={$this->request['from_id2']

значения параметров в 99% будут пустыми.

 

П.С. А почему ссылка сразу на форму выдачи предупреждений? Неудобно ведь. Один админ выдал пред, другой, перейдя по ссылке, не посмотрев историю, нажав на новую кнопку.

  • Upvote 1
Link to comment
Share on other sites

А также у супермодераторов и модераторов форумов

 

Да. Так и задумывалось.

 

значения параметров в 99% будут пустыми.

 

Насколько понял, эти конкретные параметры особо на вынесение предупреждения не влияют. Позже ещё изучу код.

 

П.С. А почему ссылка сразу на форму выдачи предупреждений? Неудобно ведь. Один админ выдал пред, другой, перейдя по ссылке, не посмотрев историю, нажав на новую кнопку.

 

Такая была задача. Попросили сделать кнопку выдачи предупреждений. Сделал.

Link to comment
Share on other sites

from_app={$this->request['app']}
использовал, однако после вынесения предупреждения из форума в истории предупреждений не пишет где оно сделано. Надо изучать код вынесений и отображения предупреждений.
Link to comment
Share on other sites

Прикол в том, что при from_app=forums в описании вынесенного предупреждения не указывается где оно вынесено. Надо изучить код обработки параметра from_app и уж потом думать, что туда вставлять. В оригинальной кнопке было from_app=members и при просмотре предупреждения выводило, что оно вынесено в разделе "Профиль".

Link to comment
Share on other sites

Для forums требуется еще и ид поста (from_id1). Так что нет смысла его указывать в showCard

Для post можно, $this->request['from_id1'] поменять на ид поста и $this->request['from_app'] сразу захардкоть на forums

  • Upvote 1
Link to comment
Share on other sites

@siv1987, спасибо, что не заставил лезть в код. Для post сделал {$post['post']['pid']} работает отлично - в истории предупреждений видно где предупредили.

Link to comment
Share on other sites

Дальше поинтереснее задачи есть - расширить функционал списка "Кто в онлайне", улучшить инструменты модеров и админа по работе с IP пользователя. Скажем, если пользователь входил, но ничего при этом не писал, то стандартные инструменты не выводят IP использовавшийся для входа. Видимо, IP фиксируется только при регистрации и написании постов. Это не есть хорошо.

 

Ещё нужен хук для слежения за активностью пользователя. Не уверен, что IPB хранит все разделы и темы, которые посещал конкретный пользователь. А по куску лога web-сервера не установить какой это пользователь залогинился, чтобы по IP из лога выбоать его активность. Разве что по ID сессии что-то поковырять.

 

Буду изучать понемногу.

Link to comment
Share on other sites

Скажем, если пользователь входил, но ничего при этом не писал, то стандартные инструменты не выводят IP использовавшийся для входа. Видимо, IP фиксируется только при регистрации и написании постов. Это не есть хорошо.

В базе не предусмотрено хранения ip-адресов с каких пользователь зашел на форум. И смотря что считать входом - авторизацию, или создания новой сессии.

Link to comment
Share on other sites

В базе не предусмотрено хранения ip-адресов с каких пользователь зашел на форум.

 

Зачем тогда писать что-то типа "Этот IP использовался для входа" если на самом деле этот IP использовался для входа и написания сообщений?

 

И смотря что считать входом - авторизацию, или создания новой сессии.

 

Как и когда создаются и обновляются сессии мне ещё предстоит изучить. Время жизни сессии задаётся в настройках, значение её хранится в куках и в самом значении что-то зашифровано. Ну и в таблицах она по идее хранится. Сессии от PHP форум не использует, так понял.

 

Ладно, это уже для другого раздела.

Link to comment
Share on other sites

Зачем тогда писать что-то типа "Этот IP использовался для входа" если на самом деле этот IP использовался для входа и написания сообщений?

Ну логично же, что если написал пост значит этот айпи использовался и для входа.

 

Как и когда создаются и обновляются сессии мне ещё предстоит изучить.

Создается при первом заходе после 15 минут простаивания (или другое время указанное в настройках).

Обновляется каждый раз при обновлении страницы.

 

Сессии от PHP форум не использует, так понял.

Да, сессии хранятся в БД.

Link to comment
Share on other sites

  • 1 year later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...