Люди — Отделение пользователей от администраторов (модификация)
Иногда бывает очень полезным отделить мух от котлет, то есть пользователей от администраторов. Поскольку Livestreet выделяет зарегистрированных участников с положительной и отрицательной «кармой», то я решил взяться за написание небольшой модификации (здесь не нашёл). Делюсь со всеми. Вдруг кому пригодится?
1. Внесём изменения в ./classes/actions/ActionPeople.class.php
Регистрируем событие (event). Ищем функцию RegisterEvent, внутрь неё помещаем следующее:
Создаём новое событие (event). Например, после EventBad добавляем следующее:
Добавим функцию получения списка администраторов.
За основу я брал функцию GetUserRating. Сразу после EventAdmins:
2. Изменяем ./classes/modules/user/User.class.php
После функции GetUsersRating добавляем следующее:
3. Правим ./classes/modules/user/mapper/User.mapper.class.php
Для выполнения SQL-запроса на базу данных, после функции GetUsersRating вставляем код:
4. Добавляем фразу в ./templates/language/<ваш языковой пакет>.php
5. Изменяем шаблоны
Правим ./templates/skin/<ваш скин>/menu.people.tpl
Вместо:
Используем:
Правим ./templates/skin/<ваш скин>/actions/ActionPeople/index.tpl
Заменить:
Этим:
Заменить:
Этим:
Результат
Всё, готово.
При обнаружении ошибок, оставлять комментарии. Спасибо за внимание.
UPD: Немного забыл. Сильно не пинайте бедного абитуриента, я старался.
1. Внесём изменения в ./classes/actions/ActionPeople.class.php
Регистрируем событие (event). Ищем функцию RegisterEvent, внутрь неё помещаем следующее:
$this->AddEvent('admins','EventAdmins');
Создаём новое событие (event). Например, после EventBad добавляем следующее:
/**
* Показываем администраторов
*
*/
protected function EventAdmins() {
/**
* Получаем статистику
*/
$this->GetStats();
/**
* Получаем администраторов
*/
$this->GetUserAdmins();
/**
* Устанавливаем шаблон вывода
*/
$this->SetTemplateAction('index');
}
Добавим функцию получения списка администраторов.
За основу я брал функцию GetUserRating. Сразу после EventAdmins:
/**
* Получаем список администраторов
*
*/
protected function GetUserAdmins() {
/**
* Передан ли номер страницы
*/
if (preg_match("/^page(\d+)$/i",$this->getParam(0),$aMatch)) {
$iPage=$aMatch[1];
} else {
$iPage=1;
}
/**
* Получаем список администраторов
*/
$iCount=0;
$aResult=$this->User_GetUsersAdmins($iCount,$iPage,USER_PER_PAGE);
$aUsersAdmins=$aResult['collection'];
/**
* Формируем постраничность
*/
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,USER_PER_PAGE,4,DIR_WEB_ROOT.'/'.ROUTE_PAGE_PEOPLE.'/'.$this->sCurrentEvent);
/**
* Загружаем переменные в шаблон
*/
if ($aUsersAdmins) {
$this->Viewer_Assign('aPaging',$aPaging);
}
$this->Viewer_Assign('aUsersAdmins',$aUsersAdmins);
}
2. Изменяем ./classes/modules/user/User.class.php
После функции GetUsersRating добавляем следующее:
/**
* Получить список администраторов
*
* @param unknown_type $iCount
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @return unknown
*/
public function GetUsersAdmins($iCount,$iPage,$iPerPage) {
if (false === ($data = $this->Cache_Get("user_admins_{$iPage}_{$iPerPage}"))){
$data = array('collection'=>$this->oMapper->GetUsersAdmins($iCount,$iPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, "user_admins_{$iPage}_{$iPerPage}", array("user_new","user_update"), 60*5);
}
return $data;
}
3. Правим ./classes/modules/user/mapper/User.mapper.class.php
Для выполнения SQL-запроса на базу данных, после функции GetUsersRating вставляем код:
public function GetUsersAdmins(&$iCount,$iCurrPage,$iPerPage) {
$sql = "SELECT * FROM ".DB_TABLE_USER.", ".DB_TABLE_USER_ADMINISTRATOR."
WHERE ".DB_TABLE_USER.".user_id = ".DB_TABLE_USER_ADMINISTRATOR.".user_id
LIMIT ?d, ?d
";
$aReturn=array();
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage))
foreach ($aRows as $aRow) {
$aReturn[]=new UserEntity_User($aRow);
}
}
return $aReturn;
}
4. Добавляем фразу в ./templates/language/<ваш языковой пакет>.php
'user_admins' => 'Администраторы',
5. Изменяем шаблоны
Правим ./templates/skin/<ваш скин>/menu.people.tpl
Вместо:
<li {if $sEvent=='' || $sEvent=='good' || $sEvent=='bad'}class="active"{/if}><div><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/">{$aLang.people_menu_users_all}</a></div></li>
Используем:
<li {if $sEvent=='' || $sEvent=='good' || $sEvent=='bad' || $sEvent=='admins'}class="active"{/if}><div><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/">{$aLang.people_menu_users_all}</a></div></li>
Правим ./templates/skin/<ваш скин>/actions/ActionPeople/index.tpl
Заменить:
<ul class="block-nav">
<li {if $sEvent=='good'}class="active"{/if}><strong></strong><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/good/">{$aLang.user_good}</a></li>
<li {if $sEvent=='bad'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/bad/">{$aLang.user_bad}</a><em></em></li>
</ul>
Этим:
<ul class="block-nav">
<li {if $sEvent=='good'}class="active"{/if}><strong></strong><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/good/">{$aLang.user_good}</a></li>
<li {if $sEvent=='bad'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/bad/">{$aLang.user_bad}</a></li>
<li {if $sEvent=='admins'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/admins/">{$aLang.user_admins}</a><em></em></li>
</ul>
Заменить:
{if $aUsersRating}
<table>
<thead>
<tr>
<td class="user">{$aLang.user}</td>
<td class="strength">{$aLang.user_skill}</td>
<td class="rating">{$aLang.user_rating}</td>
</tr>
</thead>
<tbody>
{foreach from=$aUsersRating item=oUser}
<tr>
<td class="user"><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/"><img src="{$oUser->getProfileAvatarPath(24)}" alt="" /></a><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/" class="link">{$oUser->getLogin()}</a></td>
<td class="strength">{$oUser->getSkill()}</td>
<td class="rating"><strong>{$oUser->getRating()}</strong></td>
</tr>
{/foreach}
</tbody>
</table>
{else}
{$aLang.user_empty}
{/if}
Этим:
{if $aUsersRating}
<table>
<thead>
<tr>
<td class="user">{$aLang.user}</td>
<td class="strength">{$aLang.user_skill}</td>
<td class="rating">{$aLang.user_rating}</td>
</tr>
</thead>
<tbody>
{foreach from=$aUsersRating item=oUser}
<tr>
<td class="user"><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/"><img src="{$oUser->getProfileAvatarPath(24)}" alt="" /></a><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/" class="link">{$oUser->getLogin()}</a></td>
<td class="strength">{$oUser->getSkill()}</td>
<td class="rating"><strong>{$oUser->getRating()}</strong></td>
</tr>
{/foreach}
</tbody>
</table>
{else}
{if $aUsersAdmins}
<table>
<thead>
<tr>
<td class="user">{$aLang.user}</td>
<td class="strength">{$aLang.user_skill}</td>
<td class="rating">{$aLang.user_rating}</td>
</tr>
</thead>
<tbody>
{foreach from=$aUsersAdmins item=oUser}
<tr>
<td class="user"><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/"><img src="{$oUser->getProfileAvatarPath(24)}" alt="" /></a><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oUser->getLogin()}/" class="link">{$oUser->getLogin()}</a></td>
<td class="strength">{$oUser->getSkill()}</td>
<td class="rating"><strong>{$oUser->getRating()}</strong></td>
</tr>
{/foreach}
</tbody>
</table>
{else}
{$aLang.user_empty}
{/if}
{/if}
Результат
Всё, готово.
При обнаружении ошибок, оставлять комментарии. Спасибо за внимание.
UPD: Немного забыл. Сильно не пинайте бедного абитуриента, я старался.
19 комментариев
Мне кажется, актуальней было бы выводить так:
Администраторы проекта:
Admin
Gleb
Администраторы блогов: (создатели и админы)
Name1
Name2
Модерируют блоги:
name 1
name 2
1. Внесём изменения в ./classes/actions/ActionPeople.class.php
Изменяем функцию GetUserAdmins
Добавляем результат в Smarty
2. Изменяем ./classes/modules/user/User.class.php
Описываем функцию GetUsersModers.
3. Правим ./classes/modules/user/mapper/User.mapper.class.php
Описываем функцию GetUsersModers.
4. Изменяем шаблон ./templates/skin/<ваш скин>/menu.people.tpl
Вроде как-то так.
В функции GetUsersAdmins
в конце строки
нехватает {
Из-за этого и вываливается ваша ошибка.