ANNA
       Free Cat
       Кредо Группы 2А
  2A Представляет:
     Наши статьи
     Картины Анны
     Рассылки
     Проекты
     Книги
     Мы поддерживаем

   Написать письмо
   Послать Открытку
   Завалиться в Форум
   Потрепаться в ЧАТе
   Закрытая Гостевая
   На Главную
 

Эксклюзивный аватар - мод вывода аватара только при достижении определённого числа постов

    Дана задача - создать мод для вывода аватара мембера только при достижении им определённого числа постов.
    Для удобства проектирования мода начнём проектировать его с "крыши" - т.е. с админки, в которой будет задаваться параметры работы мода.
    Какие параметры должны быть в админке для настройки? Я насчитал три:
      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'] );
    Всё!

    Полностью мод можно загрузить по этой ссылке

Назад
© 1997-2022 2A Group(A.Chudnovsky, A.Serjogin)