Решил я серьезно заняться форумом Битрикс, пока ребята уже почти доделывают новую версию форума. Вот-вот и она появится. Уже почти. Но я нетерпелив. Первая мелочь, которую накидал - вывод модераторов форумов на индексной странице. [spoiler]
В шаблон forum/.default/ кидаем файл result_modifier.php такого содержания:
Некоторые комментарии:
1. $life_time = 86400000;// событий в этом замечательном модуле не предусмотрено, поэтому кеш очищается вручную (да, вот так убого)
2. phpcache/forum // ложится в /bitrix/cache/phpcache/forum
3. Признак группы модеров - буква Q // это для разработчиков, можете поменять букву на другую.
Ну а потом в шаблоне выводим довольно просто:
Я работал с "несколько" переработанным комплексным компонентом форума. Поэтому ссылку на юзера сформируете сами.
<?= GetMessage("F_MODERATOR".($cUsers>1 ? "S" : ""))?>: - это значит, что если в массиве юзеров набралось более одного человека, то выводим МодераторЫ, в противном случае МодератоР.
Если получится более менее просто сделать понятие подфорума, то ждите продолжения.
PS: чтобы глаза не ломать, примеры кода скинул в архив:http://ifolder.ru/10835414
В шаблон forum/.default/ кидаем файл result_modifier.php такого содержания:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? $obCache = new CPHPCache; $life_time = 86400000; $cache_id = SITE_ID; if( $obCache->InitCache($life_time, $cache_id, "phpcache/forum")): $vars = $obCache->GetVars(); $arModerators = $vars["MODERATORS"]; else: $arModerators = array(); if (CModule::IncludeModule("forum")) { foreach ($arResult["FORUM"] as $arGroup) { foreach ($arGroup["FORUM"] as $forum) { $arRights = array(); $arPerm = CForumNew::GetAccessPermissions($forum["ID"], "TWO"); foreach ($arPerm as $gID => $right) { if ($right == "Q") { $arRights[] = $gID; } } $rsUsers = CUser::GetList($by="name", $order="asc", array("GROUPS_ID" => $arRights)); while ($arUsers = $rsUsers->GetNext()) { $uName = trim($arUsers["NAME"]." ".$arUsers["LAST_NAME"]); if ($uName == "") $uName = $arUsers["LOGIN"]; $arModerators[$forum["ID"]][] = array("ID" => $arUsers["ID"], "NAME" => $uName); } } } } endif; if($obCache->StartDataCache()): $obCache->EndDataCache(array( "MODERATORS" => $arModerators )); endif; $arResult["MODERATORS"] = $arModerators; ?> |
Некоторые комментарии:
1. $life_time = 86400000;// событий в этом замечательном модуле не предусмотрено, поэтому кеш очищается вручную (да, вот так убого)
2. phpcache/forum // ложится в /bitrix/cache/phpcache/forum
3. Признак группы модеров - буква Q // это для разработчиков, можете поменять букву на другую.
Ну а потом в шаблоне выводим довольно просто:
<?if (!empty($arResult["MODERATORS"][$res["ID"]])):?> <br /> <span class="forummoderator"> <?$cUsers = count($arResult["MODERATORS"][$res["ID"]]);?> <?= GetMessage("F_MODERATOR".($cUsers>1 ? "S" : ""))?>: <?foreach ($arResult["MODERATORS"][$res["ID"]] as $i => $user):?> <a href="<?= $arParams["SEF_FOLDER"]?><?= str_replace("#UID#", $user["ID"], $arParams["SEF_URL_TEMPLATES"]["profile_view"])?>" title="<?= $user["NAME"]?>"><?= $user["NAME"]?></a><?= $i<$cUsers-1 ? ", " : ""?> <?endforeach;?> </span> <?endif;?> |
Я работал с "несколько" переработанным комплексным компонентом форума. Поэтому ссылку на юзера сформируете сами.
<?= GetMessage("F_MODERATOR".($cUsers>1 ? "S" : ""))?>: - это значит, что если в массиве юзеров набралось более одного человека, то выводим МодераторЫ, в противном случае МодератоР.
Если получится более менее просто сделать понятие подфорума, то ждите продолжения.
PS: чтобы глаза не ломать, примеры кода скинул в архив: