本文整理汇总了PHP中erLhcoreClassDesign::baseurl方法的典型用法代码示例。如果您正苦于以下问题:PHP erLhcoreClassDesign::baseurl方法的具体用法?PHP erLhcoreClassDesign::baseurl怎么用?PHP erLhcoreClassDesign::baseurl使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类erLhcoreClassDesign
的用法示例。
在下文中一共展示了erLhcoreClassDesign::baseurl方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: telegram
/**
* Arguments
* array('chat' => & $chat)
* */
public function telegram($params)
{
$conf = (include 'extension/telegram/settings/settings.ini.php');
$url = 'http://api.telegram.org/bot' . $conf['telegramBot'] . '/sendMessage?parse_mode=Markdown';
$chat = $params['chat'];
foreach ($conf['receivers'] as $receiver) {
$internalurl = $url . "&chat_id=" . preg_replace('/[^0-9.]+/', '', $receiver['chatid']);
$text = "``` Nova solicitação de suporte via chat - ";
$text = isset($chat->nick) ? $text . $chat->nick : $text;
$text = isset($chat->email) ? $text . " ( " . $chat->email . " )" : $text;
$text .= "```";
if (isset($receiver['operator'])) {
$veryfyEmail = sha1(sha1($receiver['operator'] . $secretHash) . $secretHash);
$link = erLhcoreClassXMP::getBaseHost();
$link .= $_SERVER['HTTP_HOST'];
$link .= erLhcoreClassDesign::baseurl('chat/accept') . '/';
$link .= erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/';
$link .= $veryfyEmail . '/' . $receiver['operator'];
$text .= "\n" . $link;
}
$text .= "```";
$internalurl .= "&text=" . urlencode($text);
file_get_contents($internalurl);
}
}
示例2: getModuleTranslations
public function getModuleTranslations()
{
/**
* Get's executed before permissions check. It can redirect to frontpage throw permission exception etc
* */
erLhcoreClassChatEventDispatcher::getInstance()->dispatch('feature.can_use_forms', array());
return array('path' => array('url' => erLhcoreClassDesign::baseurl('form/index'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('browseoffer/index', 'Form')), 'permission_delete' => array('module' => 'lhform', 'function' => 'delete_fm'), 'permission' => array('module' => 'lhform', 'function' => 'manage_fm'), 'name' => erTranslationClassLhTranslation::getInstance()->getTranslation('abstract/browserofferinvitation', 'Forms list'));
}
示例3: getModuleTranslations
public function getModuleTranslations()
{
$metaData = array('path' => array('url' => erLhcoreClassDesign::baseurl('restapi/index'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('theme/index', 'Rest API')), 'permission_delete' => array('module' => 'lhrestapi', 'function' => 'use_admin'), 'permission' => array('module' => 'lhrestapi', 'function' => 'use_admin'), 'name' => erTranslationClassLhTranslation::getInstance()->getTranslation('abstract/product', 'API Key'));
/**
* Get's executed before permissions check. It can redirect to frontpage throw permission exception etc
* */
erLhcoreClassChatEventDispatcher::getInstance()->dispatch('feature.can_use_product', array('object_meta_data' => &$metaData));
return $metaData;
}
示例4: chatListExportXLS
public static function chatListExportXLS($chats)
{
include 'lib/core/lhform/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getStyle('A1:AW1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->setTitle('Report');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, "ID");
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Visitor Name'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'E-mail'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Phone'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Country'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'City'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(6, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'IP'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(7, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Operator'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(8, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Department'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(9, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Date'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(10, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Mail send'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(11, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Referrer'));
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(12, 1, erTranslationClassLhTranslation::getInstance()->getTranslation('chat/chatexport', 'Link'));
$attributes = array('id', 'nick', 'email', 'phone', 'country_name', 'city', 'ip', 'user', 'department');
$i = 2;
foreach ($chats as $item) {
foreach ($attributes as $key => $attr) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, $i, (string) $item->{$attr});
}
$key++;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, $i, date(erLhcoreClassModule::$dateFormat, $item->time));
$key++;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, $i, $item->mail_send == 1 ? 'Yes' : 'No');
$key++;
if ($item->session_referrer != '') {
$referer = parse_url($item->session_referrer);
if (isset($referer['host'])) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, $i, $referer['host']);
}
}
$key++;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, $i, "URL");
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow($key, $i)->getHyperlink()->setUrl(erLhcoreClassXMP::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('user/login') . '/(r)/' . rawurlencode(base64_encode('chat/single/' . $item->id)));
$i++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');
// It will be called file.xls
header('Content-Disposition: attachment; filename="report.xlsx"');
// Write file to the browser
$objWriter->save('php://output');
}
示例5: fillDataByChat
public function fillDataByChat($chat)
{
$this->getConfig();
$messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5000, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id))));
$messagesContent = '';
foreach ($messages as $msg) {
if ($msg->user_id == -1) {
$messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n";
} else {
$messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n";
}
}
$data = array('name' => $chat->nick, 'email' => $chat->email, 'subject' => str_replace(array('{referrer}', '{nick}', '{email}', '{country_code}', '{country_name}', '{city}', '{user_tz_identifier}'), array($chat->referrer, $chat->nick, $chat->email, $chat->country_code, $chat->country_name, $chat->city, $chat->user_tz_identifier), $this->configData['subject']), 'message' => str_replace(array('{time_created_front}', '{additional_data}', '{id}', '{url}', '{referrer}', '{messages}', '{remarks}', '{nick}', '{email}', '{country_code}', '{country_name}', '{city}', '{user_tz_identifier}'), array(date(erLhcoreClassModule::$dateDateHourFormat, $chat->time), $chat->additional_data, $chat->id, (erLhcoreClassSystem::$httpsMode == true ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('user/login') . '/(r)/' . rawurlencode(base64_encode('chat/single/' . $chat->id)), $chat->referrer, $messagesContent, $chat->remarks, $chat->nick, $chat->email, $chat->country_code, $chat->country_name, $chat->city, $chat->user_tz_identifier), $this->configData['message']), 'ip' => $chat->ip);
return $data;
}
示例6: sevabot
/**
* Arguments
* array('chat' => & $chat)
* */
public function sevabot($params)
{
$settings = (include 'extension/sevabot/settings/settings.ini.php');
// Format message content
$chat = $params['chat'];
$messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id))));
$messagesContent = '';
foreach ($messages as $msg) {
if ($msg->user_id == -1) {
$messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n";
} else {
$messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n";
}
}
$cfgSite = erConfigClassLhConfig::getInstance();
$secretHash = $cfgSite->getSetting('site', 'secrethash');
$chatDataItems = $settings['chat'];
if (isset($settings['chat_dep'][$chat->dep_id]) && !empty($settings['chat_dep'][$chat->dep_id])) {
$chatDataItems = array_merge($chatDataItems, $settings['chat_dep'][$chat->dep_id]);
}
// Global notifications
foreach ($chatDataItems as $chatData) {
$veryfyEmail = sha1(sha1($chatData['email'] . $secretHash) . $secretHash);
$msgParsed = str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, erLhcoreClassXMP::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $chatData['email'], $chat->id, $chat->user_name), $settings['msg']);
$md5 = md5($chatData['chat_id'] . $msgParsed . $settings['sevabot_secret']);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $settings['url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('md5' => $md5, 'msg' => $msgParsed, 'chat' => $chatData['chat_id']));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Some hostings produces wargning...
$content = curl_exec($ch);
if ($content != 'OK') {
erLhcoreClassLog::write(print_r($content, true));
}
}
}
示例7: erLhcoreClassModelFaq
<?php
$faq = new erLhcoreClassModelFaq();
$response = erLhcoreClassChatEventDispatcher::getInstance()->dispatch('faq.new', array('faq' => $faq));
$tpl = erLhcoreClassTemplate::getInstance('lhfaq/new.tpl.php');
if (isset($_POST['Save'])) {
if (!isset($_POST['csfr_token']) || !$currentUser->validateCSFRToken($_POST['csfr_token'])) {
erLhcoreClassModule::redirect();
exit;
}
$Errors = erLhcoreClassFaq::validateFaq($faq);
if (count($Errors) == 0) {
$faq->saveThis();
erLhcoreClassChatEventDispatcher::getInstance()->dispatch('faq.created', array('faq' => &$faq));
erLhcoreClassModule::redirect('faq/list');
exit;
} else {
$tpl->set('errors', $Errors);
}
}
if (isset($_POST['Cancel'])) {
erLhcoreClassModule::redirect('faq/list');
exit;
}
$tpl->set('faq', $faq);
$Result['content'] = $tpl->fetch();
$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('faq/list'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('faq/list', 'FAQ')), array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('faq/new', 'New question')));
示例8: time
}
?>
<?php
if (isset($success)) {
$msg = erTranslationClassLhTranslation::getInstance()->getTranslation('faq/faqwidget', 'Your question was submitted!');
?>
<?php
include erLhcoreClassDesign::designtpl('lhkernel/alert_success.tpl.php');
?>
<?php
}
?>
<form action="<?php
echo erLhcoreClassDesign::baseurl('faq/faqwidget');
isset($dynamic_url_append) ? print $dynamic_url_append : '';
?>
" method="post" onsubmit="return lhinst.addCaptcha('<?php
echo time();
?>
',$(this))">
<h4><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('faq/faqwidget', 'Type your question');
?>
</h4>
<div class="form-group">
<label><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('faq/faqwidget', 'E-mail');
?>
:<?php
示例9: serialize
if ($form->hasValidData('HideFor')) {
$data['hide_for'] = $form->HideFor;
} else {
$data['hide_for'] = '';
}
if ($form->hasValidData('OtherStatus')) {
$data['other_status'] = $form->OtherStatus;
} else {
$data['other_status'] = '';
}
if ($form->hasValidData('RestStatus')) {
$data['rest_status'] = $form->RestStatus;
} else {
$data['rest_status'] = '';
}
if ($form->hasValidData('ApplyWidget')) {
$data['apply_widget'] = 1;
} else {
$data['apply_widget'] = 0;
}
}
$geoData->value = serialize($data);
$geoData->saveThis();
$CacheManager = erConfigClassLhCacheConfig::getInstance();
$CacheManager->expireCache();
$tpl->set('updated', 'done');
}
$tpl->set('geo_data', $data);
$Result['content'] = $tpl->fetch();
$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('system/configuration'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('system/htmlcode', 'System configuration')), array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('chat/geoadjustment', 'GEO adjustment')));
示例10: serialize
$data['http_user_group_name'] = $form->HttpGroupName;
} else {
$data['http_user_group_name'] = 'apache';
}
if ($form->hasValidData('SupportedExtensions')) {
$data['supported_extension'] = $form->SupportedExtensions;
} else {
$data['supported_extension'] = 'ppt,pptx,doc,odp,docx,xlsx,txt,xls,xlsx,pdf,rtf,odt';
}
if ($form->hasValidData('BackgroundProcess') && $form->BackgroundProcess == true) {
$data['background_process'] = 1;
} else {
$data['background_process'] = 0;
}
if ($form->hasValidData('MaxFileSize')) {
$data['max_file_size'] = $form->MaxFileSize;
} else {
$data['max_file_size'] = 2;
}
if (count($Errors) == 0) {
$docSharer->value = serialize($data);
$docSharer->saveThis();
$tpl->set('updated', 'done');
} else {
$tpl->set('errors', $Errors);
}
}
$tpl->set('docsharer_data', $data);
$Result['content'] = $tpl->fetch();
$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('docshare/index'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('docshare/index', 'Documents sharer')), array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('docshare/configuration', 'Documents sharer configuration')));
示例11: function
$('#db-status-checked').hide();
$('#db-status-updating').show();
$.postJSON('<?php
echo erLhcoreClassDesign::baseurl('system/update');
?>
/(action)/statusdbdoupdate',function(data){
$('#status-db').html(data.result);
});
};
(function() {
$.ajax({
url: 'https://livehelperchat.com/update/version',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'jsonpCallbackLHC',
success: function(data){
$('#recent-version').text(data.version/100);
}
});
$.postJSON('<?php
echo erLhcoreClassDesign::baseurl('system/update');
?>
/(action)/statusdb',function(data){
$('#status-db').html(data.result);
});
})();
</script>
示例12:
<?php
include erLhcoreClassDesign::designtpl('lhkernel/validation_error.tpl.php');
}
?>
<?php
if (isset($updated)) {
$msg = erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/editarchive', 'Archive updated');
?>
<?php
include erLhcoreClassDesign::designtpl('lhkernel/alert_success.tpl.php');
}
?>
<form action="<?php
echo erLhcoreClassDesign::baseurl('chatarchive/edit');
?>
/<?php
echo $archive->id;
?>
" method="post">
<div class="form-group">
<label><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/newarchive', 'Date from');
?>
</label>
<input class="form-control" type="text" name="RangeFrom" placeholder="<?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/newarchive', 'E.g');
?>
<?php
示例13: lhPaginator
if (isset($_GET['doSearch'])) {
$filterParams = erLhcoreClassSearchHandler::getParams(array('module' => 'chat', 'module_file' => 'chat_search', 'format_filter' => true, 'use_override' => true, 'uparams' => $Params['user_parameters_unordered']));
$filterParams['is_search'] = true;
} else {
$filterParams = erLhcoreClassSearchHandler::getParams(array('module' => 'chat', 'module_file' => 'chat_search', 'format_filter' => true, 'uparams' => $Params['user_parameters_unordered']));
$filterParams['is_search'] = false;
}
$append = erLhcoreClassSearchHandler::getURLAppendFromInput($filterParams['input_form']);
// Set correct archive tables
$archive->setArchiveTables();
$pages = new lhPaginator();
$pages->serverURL = erLhcoreClassDesign::baseurl('chatarchive/listarchivechats') . '/' . $archive->id . $append;
$pages->items_total = erLhcoreClassChat::getCount($filterParams['filter'], erLhcoreClassModelChatArchiveRange::$archiveTable);
$pages->setItemsPerPage(2);
$pages->paginate();
$items = array();
if ($pages->items_total > 0) {
try {
$items = erLhcoreClassChat::getList(array_merge(array('offset' => $pages->low, 'limit' => $pages->items_per_page, 'sort' => 'id ASC'), $filterParams['filter']), 'erLhcoreClassModelChatArchive', erLhcoreClassModelChatArchiveRange::$archiveTable);
} catch (Exception $e) {
print_r($e->getMessage());
}
}
$filterParams['input_form']->form_action = erLhcoreClassDesign::baseurl('chatarchive/listarchivechats') . '/' . $archive->id;
$tpl->set('input', $filterParams['input_form']);
$tpl->set('items', $items);
$tpl->set('archive', $archive);
$tpl->set('pages', $pages);
$Result['content'] = $tpl->fetch();
$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('system/configuration'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('department/departments', 'System configuration')), array('url' => erLhcoreClassDesign::baseurl('chatarchive/archive'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/archive', 'Chat archive')), array('url' => erLhcoreClassDesign::baseurl('chatarchive/list'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/list', 'Archives list')));
$Result['path'][] = array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('chatarchive/list', 'Archived chats'));
示例14: array
}
if ($form->hasValidData('AttrInt1')) {
$Instance->attr_int_1 = $form->AttrInt1;
}
if ($form->hasValidData('AttrInt2')) {
$Instance->attr_int_2 = $form->AttrInt2;
}
if ($form->hasValidData('AttrInt3')) {
$Instance->attr_int_3 = $form->AttrInt3;
}
if (!isset($_POST['csfr_token']) || !$currentUser->validateCSFRToken($_POST['csfr_token'])) {
erLhcoreClassModule::redirect('instance/list');
exit;
}
if (count($Errors) == 0) {
$Instance->saveThis();
if (isset($_POST['Save_departament'])) {
erLhcoreClassModule::redirect('instance/list');
exit;
} else {
$tpl->set('updated', true);
}
} else {
$tpl->set('errors', $Errors);
}
}
erLhcoreClassChatEventDispatcher::getInstance()->dispatch('instance.editinstance', array('instance' => &$Instance));
$tpl->set('instance', $Instance);
$Result['content'] = $tpl->fetch();
$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('system/configuration'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('department/edit', 'System configuration')), array('url' => erLhcoreClassDesign::baseurl('instance/list'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('instance/edit', 'Instances')), array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('instance/edit', 'Edit instance') . ' - ' . $Instance->address));
示例15:
<h1><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('browseoffer/index', 'Browse offers');
?>
</h1>
<h4><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('browseoffer/index', 'General');
?>
</h4>
<ul class="circle small-list">
<li><a href="<?php
echo erLhcoreClassDesign::baseurl('abstract/list');
?>
/BrowseOfferInvitation"><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('browseoffer/index', 'Browse your offers');
?>
</a></li>
<li><a href="<?php
echo erLhcoreClassDesign::baseurl('browseoffer/htmlcode');
?>
"><?php
echo erTranslationClassLhTranslation::getInstance()->getTranslation('browseoffer/index', 'HTML Code');
?>
</a></li>
</ul>