Эксклюзивный аватар - мод вывода аватара только при достижении определённого числа постов
Дана задача - создать мод для вывода аватара мембера только при достижении им определённого числа постов.
Для удобства проектирования мода начнём проектировать его с "крыши" - т.е. с админки, в которой будет задаваться параметры работы мода.
Какие параметры должны быть в админке для настройки? Я насчитал три:
1. включение/выключение мода;
2. количество постов для разрешения вывода аватара;
3. группы мемберов на которых не распространяется это ограничение.
Размещать будем там же, где собраны остальные параметры управления аватарами: "Системные настройки"->"Профиль пользователей", подгруппа "Аватары".
Чтобы разместить там элементы управления ищем в ad_settings.php такие строки:
$ADMIN->html .= $SKIN->add_td_row( array( "<b>Кол-во колонок в галерее аватаров?</b>" ,
$SKIN->form_input( 'av_gal_cols' , $INFO['av_gal_cols'] = $INFO['av_gal_cols'] ? $INFO['av_gal_cols'] : 5 )
) );
- это последний параметр относящийся к аватарам. Чтобы добавить свои параметры ниже располагаем:
$ADMIN->html .= $SKIN->add_td_row( array( "<b>Включить ограничение использование аватаров?</b>" ,
$SKIN->form_yes_no( "avatars_limit_on", $INFO['avatars_limit_on'] )
) );
$ADMIN->html .= $SKIN->add_td_row( array( "<b>Минимальное число постов для включения аватары</b>" ,
$SKIN->form_input( "avatars_limit_messages", $INFO['avatars_limit_messages'] )
) );
$ADMIN->html .= $SKIN->add_td_row( array( "<b>Группы-исключения для отображения</b><br>Разделять через запятую (4,6,7) и т.д." ,
$SKIN->form_input( "avatars_limit_exgroups", $INFO['avatars_limit_exgroups'] )
) );
Мы добавили свои три параметра. На рисунке эти новые параметры в красном прямоугольнике.
Однако их надо ещё и запомнить и считывать при последующей работе админки. Поднимаемся выше и находим такое:
'avatar_def',
Дописываем справа свои параметры:
'avatars_limit_on', 'avatars_limit_messages', 'avatars_limit_exgroups',
Отлично! Значения заданы! Теперь перейдём собственно к самой функции вывода аватара.
Стандартным образом аватары выводятся функцией get_avatar() из стандартного набора функций расположенных в functions.php. Однако нам эта функция не подходит - поскольку она принимает всего три параметра - а нам надо больше.
Есть две возможности получить нужный результат - модифицировать старую get_avatar(), чтобы она обрабатывала большее число параметров - и добавив новую функцию-препроцессор к "старой" get_avatar(). Однако в первом случае нам придётся поправить все вызовы функции get_avatar(). Во втором этого делать не потребуется - достаточно будет в нужных местах вызывать не старую, а новую функцию. В конечном итоге было решено выбрать второй вариант - как требующий минимального вмешательства.
Чтобы было проще ориентироваться расположим старую функцию рядом со старой. Ищем эту строку:
function get_avatar($member_avatar="", $member_view_avatars=0, $avatar_dims="x")
И добавляем выше нашу новую функцию:
function get_avatar_lim($member_avatar, $member_view_avatars, $avatar_dims, $member_group=2, $member_posts=0)
{
global $std, $ibforums;
$i_group = explode(",", $ibforums->vars['avatars_limit_exgroups']);
if ($ibforums->vars['avatars_limit_on'] and !(in_array($member_group,$i_group)) and ($member_posts < $ibforums->vars['avatars_limit_messages']))
{
return "";
}
return $std->get_avatar($member_avatar, $member_view_avatars, $avatar_dims);
}
Как видно она обрабатывает новые параметры - и после обработки вызывает старую get_avatar(). Или не вызывает - если не соблюдаются условия. По умолчанию выбрана группа Guest и число постов равное 0.
Осталось самое простое - вывод аватаров. Вывод аватар "с ограничением" будет происходить только в топиках, поэтому изменение коснётся только Topics.php.
Ищем эту строку:
$member['avatar'] = $std->get_avatar( $member['avatar'], $ibforums->member['view_avs'], $member['avatar_size'] );
... и заменяем на эту:
$member['avatar'] = $std->get_avatar_lim( $member['avatar'], $ibforums->member['view_avs'], $member['avatar_size'], $member['mgroup'], $member['posts'] );
Всё!
Полностью мод можно загрузить по этой ссылке
|