Решил я серьезно заняться форумом Битрикс, пока ребята уже почти доделывают новую версию форума. Вот-вот и она появится. Уже почти. Но я нетерпелив. Первая мелочь, которую накидал - вывод модераторов форумов на индексной странице. [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: чтобы глаза не ломать, примеры кода скинул в архив:
В шаблон 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: чтобы глаза не ломать, примеры кода скинул в архив: