×

Битрикс: поздравления с днём рождения на форуме

Каждый день на работе я ковыряюсь в битриксе. Иногда получаются забавные штуковины, но оценить их могут только сотрудники нашей организации. Чтобы исправить эту ситуацию я решил писать в блоге о всех своих «велосипедах», вдруг кто-нибудь подскажет как сделать это проще. Начнём с поздравлялки для форума.

Задача

Имеется небольшой корпоративный форум, реализованый стандартным компонентом битрикса с почти стандартным шаблоном (немного подправлен CSS). Нужно сделать так, чтобы в шапке форума выводились поздравления тем пользователям, у которых случился день рождения.

Поиск решения

Теоретически, в «подвале» форума выводится список именинников. Это даёт надежду на то, что можно будет воспользоваться стандартным компонентом. Но чтобы это сделать, придётся написать шаблон к компоненту forum.statistic. Мне такое решение не нравится, т.к. это было бы нерациональным использованием ресурсов.

Найденное решение

Я решил получить список пользователей форума с помощью метода CForumUser::GetList. И найти среди них именинников.

Чтобы поздравления выводились на всех страницах форума, я решил добавить код «поздравлялки» в код верхнего меню. Но обычные поздравления с текстом это скучно. Гораздо веселее, если поздравление выводится с картинкой. Для этих целей я скачал 12 бесплатных иконок тортов и пирожных. Иконки эти должны выводиться в случайном порядке, так будет забавнее =)

По-хорошему, нужно было картинки с тортами хранить в папке шаблона компонента и автоматически поставлять путь к папке компонента при выводе картинок, но мне было лень.

В итоге получился вот такой код:

  1. <?CModule::IncludeModule("forum");
  2. $userListCDB = CForumUser::GetList(Array("ID"=>"ASC"));//собираем всех пользователей форума
  3.  
  4. $resultCount = 0; //счетчик количества поздравлений
  5.  
  6. $tortLink = range(1, 12);//массив с номерами картинок для торта
  7.  
  8. while ($userList = $userListCDB->GetNext() and $resultCount != 3){//выводим первые три результата
  9.         $birthDate = explode("." ,$userList[‘PERSONAL_BIRTHDAY’]);//разбиваем дату рождения на день, месяц и год
  10.        
  11.         if($birthDate[0] == date("d") and $birthDate[1] == date("m")){//сравниваем день и месяц с текущей датой
  12.                 shuffle($tortLink);//перемешиваем торты?>
  13.                
  14.                 <div class="birhtday-box-img"><img src="/forum/images/birth-icon/<?=$tortLink[0]?>.png"></div>
  15.                 <div class="birhtday-box">
  16.                         <strong><?=$userList[‘NAME’]?> <?=$userList[‘LAST_NAME’]?></strong>, поздравляем с Днём Рождения!
  17.                 </div>
  18.                 <?$resultCount++;
  19.         }//end if($birthDate[0]…)
  20. }//end while($userList…)?>Syhi-подсветка кода

В css файл шаблона я добавил следующее:

  1. .birhtday-box-img{position:relative;bottom:-30px; padding-left:10px;margin-top:-30px;}
  2.  
  3. div.birhtday-box{padding:0.5em 1.117em 0.5em 64px;
  4.         border-width: 1px;
  5.         border-style: solid;
  6.         line-height: 1.5em;
  7.         margin-bottom:1em;
  8.         background:#FAFCFB none repeat scroll 0 0;
  9.         border-color:#D4E7DC;

В итоге получились вот такие поздравлялки:

Поздравления с днём рождения в форуме Битрикс

Поздравления с днём рождения в форуме Битрикс

Заключение

Такие поздравлялки хороши только если на форуме не очень много пользователей. Если их число велико, нужно выводить поздравления в случайном порядке. Но у нас не бывает больше трёх именинников в один день, поэтому задача намного проще.

logo