Каждый день на работе я ковыряюсь в битриксе. Иногда получаются забавные штуковины, но оценить их могут только сотрудники нашей организации. Чтобы исправить эту ситуацию я решил писать в блоге о всех своих «велосипедах», вдруг кто-нибудь подскажет как сделать это проще. Начнём с поздравлялки для форума.
Задача
Имеется небольшой корпоративный форум, реализованый стандартным компонентом битрикса с почти стандартным шаблоном (немного подправлен CSS). Нужно сделать так, чтобы в шапке форума выводились поздравления тем пользователям, у которых случился день рождения.
Поиск решения
Теоретически, в «подвале» форума выводится список именинников. Это даёт надежду на то, что можно будет воспользоваться стандартным компонентом. Но чтобы это сделать, придётся написать шаблон к компоненту forum.statistic. Мне такое решение не нравится, т.к. это было бы нерациональным использованием ресурсов.
Найденное решение
Я решил получить список пользователей форума с помощью метода CForumUser::GetList. И найти среди них именинников.
Чтобы поздравления выводились на всех страницах форума, я решил добавить код «поздравлялки» в код верхнего меню. Но обычные поздравления с текстом это скучно. Гораздо веселее, если поздравление выводится с картинкой. Для этих целей я скачал 12 бесплатных иконок тортов и пирожных. Иконки эти должны выводиться в случайном порядке, так будет забавнее =)
По-хорошему, нужно было картинки с тортами хранить в папке шаблона компонента и автоматически поставлять путь к папке компонента при выводе картинок, но мне было лень.
В итоге получился вот такой код:
<?CModule::IncludeModule("forum");
$userListCDB = CForumUser::GetList(Array("ID"=>"ASC"));//собираем всех пользователей форума
$resultCount = 0; //счетчик количества поздравлений
$tortLink = range(1, 12);//массив с номерами картинок для торта
while($userList = $userListCDB->GetNext() and $resultCount != 3){//выводим первые три результата
$birthDate = explode("." ,$userList[‘PERSONAL_BIRTHDAY’]);//разбиваем дату рождения на день, месяц и год
if($birthDate[0] == date("d") and $birthDate[1] == date("m")){//сравниваем день и месяц с текущей датой
Такие поздравлялки хороши только если на форуме не очень много пользователей. Если их число велико, нужно выводить поздравления в случайном порядке. Но у нас не бывает больше трёх именинников в один день, поэтому задача намного проще.
на какую тематику?
Ответить