CB Авторизация

Ваш логин в:

Меню пользователя
Скачать
Статьи на сайте
 
Интерфейс пользователя в плагинах (UI)
Написал Kotofeich   
22.08.2007

Сам компонент CommunityBuilder comProfiler обеспечивает пользовательский интерфейс (UI) для программных расширений. Различные варианты отображения интерфейса пользователя создаются довольно просто. Более детально они будут описаны в этой главе.

Меню

CommunityBuilder обеспечивает единый интерфейс для меню (хотя это может быть выключено администратором). Администратор может выбрать между панелью  меню и списком меню. CommunityBuilder предусматривает только один уровень подменю, но в будущем планируется создать множество уровней.

Есть отдельный обьект вкладок,  который вызывается плагинами через зарегистрированные меню:

/**
* При вызове профиля пользователя генерирует меню и показывает статус пользователя
back $this->addMenu
* @param object вкладка записанная в БД
* @param object mosUser показывает пользователя на экране
* @param int 1 для фронт-енда, 2 для бак-енда
* @returns boolean : истана, или ложь если есть сообщение ErrorMSG
*/
function getMenuAndStatus($tab,$user,$ui) {
}

Плагины могут добавлять свои собственные элементы меню, используя следующий код:

/**
* Регистрирует меню или статус в определенном положении
* @param array элементы меню:

// Пример:

$mi = array(); $mi["_UE_MENU_CONNECTIONS"]["duplique"]=null;

$this->addMenu( array(
"position" => "menuBar" , // "menuBar", "menuList"
"arrayPos" => $mi ,
"caption" => _UE_MENU_MANAGEMYCONNECTIONS ,
"url" => sefRelToAbs($ue_manageConnection_url) , // также может быть "<a ....>" или "javascript:void(0)" или ""
"target" => "" , // например: "_blank"
"img" => null , // например: "<img src='plugins/user/myplugin/images/icon.gif' width='16' height='16' alt='' />"
"alt" => null , // например: "text"
"tooltip" => _UE_MENU_MANAGEMYCONNECTIONS_DESC ,
"keystroke" => null ) ); // e.g. "P"



// Пример использования:
$mi = array(); $mi["_UE_MENU_STATUS"]["_UE_MEMBERSINCE"]["dupl"]=null;
$dat = cbFormatDate($user->registerDate);

if (!$dat) $dat="?";

$this->addMenu( array(
"position" => "menuList" , // "menuBar", "menuList"
"arrayPos" => $mi ,
"caption" => $dat ,
"url" => "" , // также может быть "<a ....>" или  "javascript:void(0)" или ""
"target" => "" , // например: "_blank"
"img" => null , // например: "<img src='plugins/user/myplugin/images/icon.gif' width='16' height='16' alt='' />"
"alt" => null , // например: "text"
"tooltip" => _UE_MEMBERSINCE_DESC ,
"keystroke" => null ) ); // например: "P"
*/
function addMenu( $menuItem )

Элементы меню автоматически сортируются по имени.

В качестве примера, добавим меню в PMS, если пользователь смотрит свой профиль:

global $my;
if ($my->id!=$user->id && $my->id > 0) {
$pmsurl=...
$mi = array();
$mi["_UE_MENU_MESSAGES"]["_UE_PM_USER"]=null;

$this->menuBar->addObjectItem($mi,_UE_PM_USER,sefRelToAbs($pmsurl), "", "","", _UE_MENU_PM_USER_DESC,"");
}

Очень важно для SEF-совместимости вызывать - для всех внутренних ссылок - функцию sefRelToAbs.

Отображение статуса
Отображение статуса подобно меню. Для этого  используется тот же самый API CB:

Пример:

if ($sbConfig['showranking'] && ($params->get('statRanking', '1') == 1) && sbUserDetails !== false))
{
$mi = array();
$mi["_UE_MENU_STATUS"][$params->get('statRankingText',"_UE_FORUM_FORUMRANKING")]["_UE_FORUM_FORUMRANKING"]=null;

$this->addMenu( array("position" => "menuList" , // "menuBar", "menuList"
"arrayPos" => $mi ,
"caption" => $sbUserDetails->msg_userrank.($params->get('statRankingImg','1')==1 ? $sbUserDetails->msg_userrankimg : "") ,
"url" => "" , // может также быть "<a ....>" или "javascript:void(0)" или ""
"target" => "" , // например: "_blank"
"img" => null , // например: "<img src='plugins/user/myplugin/images/icon.gif' width='16' height='16' alt='' />"
"alt" => null , // например: "text"
"tooltip" => "") );
}

Формы
Формы в плагинах должны быть закодированы, используя специальный код CB, так, чтобы данные формы в плагине возвратились к тому же плагину. На данный момент, формы работают только в профилях. Данные формы можно отправить, используя методы GET или POST в  HTTP. Параметры должны иметь префикс с названием плагина так, чтобы множество плагинов не приняли параметры с один и тем же названием. (например, "поиск" станет "simpleboardtabsearch").
Все параметры - когда получены через GET, - правильно поддерживаются SEF. 
Готовый пример для форм - плагин JoomlaBoard/SimpleBoard (вкладка профиля).
В нем это используется для поиска, нумерации страниц и сортирующих функций.

Поддержка ссылок
Для нормальной поддержка SEF, все ссылки должны генерироваться строчными буквами.

Ссылки, используемые в плагине должны всегда генерироваться, используя следующую функцию CommunityBuilder:

/**
* дает ссылку с параметрами плагина.
* @param array строка с параметрами
* @param string cb task (задает задачу на что ссылаться, по-умолчанию userProfile)
* @param boolean Истина для вызова черезl sefRelToAbs (по-умолчанию), ЛОЖЬ чтобы избежать SEF
* @param array строка параметров, которые надо исключить
* @return string значения параметров
*/
function _getAbsURLwithParam($paramArray, $task="userProfile", $sefed=true,
$excludeParamList=array())

 Переданные параметры могут быть получены с помощью следующей функции CommunityBuilder:

/**
* возвращает ESCAPED и urldecoded параметры для плагина
* @param строка - имя параметра в url
* @param строка - значение по-умолчанию для параметров в url, если значение не найдено
* @param постфикс pagings/search/sorts (выборочноl)
* @return строка значений параметра
*/
function _getReqParam($name, $def=null, $postfix="")

Желательно, чтобы разработчик плагинов всегда учитывал работу с магическими кавычками в php.

Следующая функция дает возможность получения имен параметров с префиксом, переданных через GET/POST

/**
* возвращает имя параметра для поиска и других функций
* @param строка - имя функции
* @param строка постфикс pagings/search/sorts (выборочноl)
* @returns строка - имя параметра
*/
function _getPagingParamName($name="search", $postfix="")


Для примера, покажем вкладку PMS:

if (isset($_POST[$this->_getPagingSearchName("sndnewmsg")]) && $_POST[$this-
>_getPagingSearchName("sndnewmsg")] == _UE_PM_SENDMESSAGE)
{
$sender = $this->_getReqParam("sender", null);
$recip = $this->_getReqParam("recip", null);

if ($sender && $recip)
{
$newsub = htmlentities($this->_getReqParam("newsub", null));
//urldecode в _getReqParam
$newmsg = htmlentities($this->_getReqParam("newmsg", null));
//исключить html код

Настоятельно рекомендуем проверять ваши формы на защищенность от sql-иньекций.

Следующая функция позволяет генерировать правильные ссылки для форм и связей: 

/**
* дает ссылку с параметрами плагина
* @param массив строковой с имена параметров
* @param строка cb task (выбор задачи, по умолчанию: userProfile)
* @param булев Истина для вызоваl sefRelToAbs (по-умолчанию), ЛОЖЬ если не собираетесь поддерживать SEF
* @param массив строковой исключенных параметров
* @return строка - итог с параметрами
*/
function _getAbsURLwithParam($paramArray, $task="userProfile", $sefed=true,
$excludeParamList=array())

Пример использования во вкладке PMS:

$base_url = $this->_getAbsURLwithParam(array());
$ret .= '<form method="post" action="'.$base_url.'">';
...
$ret .= '<input type="text" name="'.$this->_getPagingSearchName("newsub") .'"
size="'.$width.'" value="'.$newsub.'" class="inputbox" />
...

 

 
< Пред.

 

© 2011 Русский сайт поддержки Community Builder
Все права принадлежат Sunshine studio, LLC
Партнерки
Модуль SunBlog
CB поиск пользователя

CB Online

Посетителей нет.
CB статистика
5039 зарегестрировано
0 сегодня
0 за неделю
0 за месяц
Последние: Denis85

Дружина
хостится тут

и отзывы о хостинге для Joomla от дружинников