Sky 主题设置';
$logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, Helper::options()->themeUrl.'/assets/avatar.png', '站点 LOGO 地址', '在这里填入一个图片 URL 地址, 以在网站标题前加上一个 LOGO');
$form->addInput($logoUrl);
$icpInfo = new Typecho_Widget_Helper_Form_Element_Text('icpInfo', NULL, NULL, 'ICP 备案号', '显示在底部,留空则不显示');
$form->addInput($icpInfo->addRule('xssCheck', '请不要使用特殊字符'));
$nisInfo = new Typecho_Widget_Helper_Form_Element_Text('nisInfo', NULL, NULL, '网安备案号', '显示在底部,留空则不显示');
$form->addInput($nisInfo->addRule('xssCheck', '请不要使用特殊字符'));
$notification = new Typecho_Widget_Helper_Form_Element_Text('notification', NULL, NULL, '网站公告', '显示在首页,留空则不显示');
$form->addInput($notification);
$notificationIcon = new Typecho_Widget_Helper_Form_Element_Text('notificationIcon', NULL, NULL, '网站公告图标', '显示在首页网站公告信息框前的 FontAwesome 图标代码,留空则不显示');
$form->addInput($notificationIcon);
$commentsNotice = new Typecho_Widget_Helper_Form_Element_Text('commentsNotice', NULL, NULL, '评论区公告', '显示在评论区,留空则不显示');
$form->addInput($commentsNotice);
$bottomLinks = new Typecho_Widget_Helper_Form_Element_Text('bottomLinks', NULL, NULL, '底部链接', '(需要配合友情链接插件使用)网站底部的链接分类名称');
$form->addInput($bottomLinks);
$headerCode = new Typecho_Widget_Helper_Form_Element_Textarea('headerCode', NULL, NULL, '头部代码', '在头部添加的 HTML 代码,可以插入 JavsScript');
$form->addInput($headerCode);
$footerCode = new Typecho_Widget_Helper_Form_Element_Textarea('footerCode', NULL, NULL, '页脚代码', '在页脚添加的 HTML 代码,可以插入 JavsScript代码');
$form->addInput($footerCode);
$oldPosts = new Typecho_Widget_Helper_Form_Element_Radio('oldPosts',
array('able' => '启用',
'disable' => '禁用',
),
'disable', '是否显示旧文提示', '启用则会在一年前发布的文章页面显示“这是一篇旧文”');
$form->addInput($oldPosts);
}
function themeFields($layout) {
$headPic = new Typecho_Widget_Helper_Form_Element_Text('headPic', NULL, NULL, '文章头图地址', '仅对文章有效。在这里填入一个图片 URL 地址, 就可以让文章加上头图。留空则不显示头图。');
$layout->addItem($headPic);
$pubPlace = new Typecho_Widget_Helper_Form_Element_Text('pubPlace', NULL, NULL, '文章发布地点', '仅对文章有效。在这里输入一个地点的名字,文章头部会显示。留空则不显示发布地点。');
$layout->addItem($pubPlace);
$pageIcon = new Typecho_Widget_Helper_Form_Element_Text('pageIcon', NULL, NULL, '页面图标', '仅对非隐藏页面有效。在这里为页面填入一个 fontawesome icon 代码,在菜单栏链接前会显示图标。Fontawesome 是 5.15 版本,参见 FontAwesome 图标库。留空则不显示图标。');
$layout->addItem($pageIcon);
$linkTo = new Typecho_Widget_Helper_Form_Element_Text('linkTo', NULL, NULL, '重定向至', '在这里输入一个 URL,打开该页面或文章时会自动重定向到这个 URL,可以用于定制菜单栏。留空则不重定向。');
$layout->addItem($linkTo);
}
function exContent($content){
// 短代码提示框,期望用数组的办法一次性实现,但是正则表达式太难了
// $alertIcons = array('primary' => 'fas fa-info-circle',
// 'success' => 'fas fa-info-circle',
// 'info' => 'fas fa-info-circle',
// 'warning' => 'fa-exclamation-circle',
// 'danger' => 'fas fa-skull-crossbones',
// 'default' => 'fas fa-info-circle',
// 'secondary' => 'fas fa-info-circle');
$pattern = '/\[(primary)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(default)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(secondary)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(success)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(info)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(warning)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
$pattern = '/\[(danger)\](.*?)\[\s*\/\1\s*\]/';
$replacement = '
$2
';
$content = preg_replace($pattern, $replacement, $content);
// $pattern = '/\[(alert-(.*?))\](.*?)\[\s*\/\1\s*\]/';
// $replacement = '
//
//
// $3
//
';
// $content = preg_replace($pattern, $replacement, $content);
// 正则表达式也太难了 。・゜・(ノД`)・゜・。
// $pattern = '/\[link (.*)\](.*)\[link\]/';
// $replacement = '
// $2';
// $content = preg_replace($pattern, $replacement, $content);
// 文章 TOC 功能
// [0]: 完整的匹配 conTent
// [1]: 匹配中的数字 2
// [2]: 匹配中的内容 conTent
if (preg_match_all('/(.*)<\/h\d>/isU', $content, $outarr)){
$toc_out = "";
$minlevel = 6;
for ($key=0; $key{$outarr[2][$key]}". substr($ta, strlen($outarr[0][$key])+$tb);
$content = substr($ta, 0, $tb). "". substr($ta, $tb);
// 用伪锚点实现链接偏移。Safari 居然不支持!!
if ($level > $curlevel) $toc_out.=str_repeat("\n", $level-$curlevel);
elseif ($level < $curlevel) $toc_out.=str_repeat("
\n", $curlevel-$level);
$curlevel = $level;
$toc_out .= "{$outarr[2][$key]}\n";
}
$content = "{$toc_out}
". $content;
}
// Fancybox 图片灯箱
$content = preg_replace("//i", "", $content);
return $content;
}
// 来自插件 WordsCounter
// https://github.com/elatisy/Typecho_WordsCounter
function allOfCharacters() {
$chars = 0;
$db = Typecho_Db::get();
$select = $db ->select('text')
->from('table.contents')
->where('table.contents.status = ?','publish');
$rows = $db->fetchAll($select);
foreach ($rows as $row){
$chars += mb_strlen($row['text'], 'UTF-8');
}
$unit = '';
if ($chars >= 10000) {
$chars /= 10000;
$unit = 'W';
} else if($chars >= 1000) {
$chars /= 1000;
$unit = 'K';
}
$out = sprintf('%.2lf%s',$chars, $unit);
echo $out;
}
// 来自插件 IPLocation
function showLocation($ip) {
require_once 'include/IP/IP.php';
$addresses = IP::find($ip);
$address = '';
if (!empty($addresses)) {
$addresses = array_unique($addresses);
$address = implode('', $addresses);
$address = str_replace('中国', '', $address);
}
echo $address;
}
// 来自插件 UserAgent
function getUAImg($type, $name, $title) {
global $url_img;
$img = "";
return $img;
}
function showUserAgent($ua) {
global $url_img;
$url_img = Helper::options()->themeUrl . '/include/UserAgent/img/';
/* OS */
require_once 'include/UserAgent/get_os.php';
$Os = get_os($ua);
$OsImg = getUAImg("os/", $Os['code'], $Os['title']);
/* Browser */
require_once 'include/UserAgent/get_browser_name.php';
$Browser = get_browser_name($ua);
$BrowserImg = getUAImg("browser/", $Browser['code'], $Browser['title']);
echo " " . $OsImg . " " . $BrowserImg;
}