Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

По просьбе пользователей сайта опубликую инструкцию по добавлению кнопки предупреждения пользователя во всплывающем профиле пользователя (шаблон 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

Рекомендованные сообщения

Опубликовано:

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

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

<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% будут пустыми.

 

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

Опубликовано:
  • Автор

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

 

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

 

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

 

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

 

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

 

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

Опубликовано:
  • Автор
from_app={$this->request['app']}
использовал, однако после вынесения предупреждения из форума в истории предупреждений не пишет где оно сделано. Надо изучать код вынесений и отображения предупреждений.
Опубликовано:

from_app={$this->request['app']}

{$this->request['app']} можно заменить сразу на members раз это showCard

Опубликовано:
  • Автор

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

 

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

 

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

 

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

 

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

 

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

 

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

Опубликовано:

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

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

 

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

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

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

 

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

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

  • 1 год спустя...

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.