主题设置
· 当前版本: 2.1 · Github 文档
请前往Typecho自带的设置界面来设置博客名称与描述。
addInput($AKAROMlogoUrl);
$AKAROMindeximg = new Typecho_Widget_Helper_Form_Element_Text('AKAROMindeximg', NULL, NULL, _t('设置首页主题图'), _t('在这里填入一个图片 url 地址。'));
$form->addInput($AKAROMindeximg);
$AKAROMsidebarimg = new Typecho_Widget_Helper_Form_Element_Text('AKAROMsidebarimg', NULL, NULL, _t('设置侧边栏顶图'), _t('在这里填入一个图片 url 地址,将会显示在侧边栏上部。'));
$form->addInput($AKAROMsidebarimg);
$AKAROMsign = new Typecho_Widget_Helper_Form_Element_Text('AKAROMsign', NULL, NULL, _t('设置网站图标'), _t('在这里填入一个图片 url 地址,将会显示在浏览器标签栏。'));
$form->addInput($AKAROMsign);
$AKAROMinfobox = new Typecho_Widget_Helper_Form_Element_Text('AKAROMinfobox', NULL, NULL, _t('设置公告'), _t('输入一些公告或通知,将会显示在首页。'));
$form->addInput($AKAROMinfobox);
$AKAROMsticky = new Typecho_Widget_Helper_Form_Element_Text('AKAROMsticky', NULL, NULL, _t('置顶文章'), _t('填入文章的 cid,多个数值以半角逗号分隔。例如:21,15,3'));
$form->addInput($AKAROMsticky);
$AKAROMLinksterms = new Typecho_Widget_Helper_Form_Element_Textarea('AKAROMLinksterms', NULL, NULL, _t('设置交换友情链接的要求'), _t('此段文字将会显示在"友情链接页";
您可以填入例如 1.不接受违法站点;2.先友后链 等信息。
注意:请先创建一个空页面,在自定义模板中选择"友情链接页"。'));
$form->addInput($AKAROMLinksterms);
$AKAROMLinkstermsUrl = new Typecho_Widget_Helper_Form_Element_Text('AKAROMLinkstermsUrl', NULL, NULL, _t('设置交换友链的本站链接'), _t('供申请友链的朋友填写,可以是个人主页而不是此博客页面。'));
$form->addInput($AKAROMLinkstermsUrl);
$AKAROMrewardimg = new Typecho_Widget_Helper_Form_Element_Text('AKAROMrewardimg', NULL, NULL, _t('设置赞赏图片'), _t('可填入收款码等图片的 url 地址,会出现在文章界面末尾。不填则不显示。'));
$form->addInput($AKAROMrewardimg);
$AKAROMfootericp = new Typecho_Widget_Helper_Form_Element_Text('AKAROMfootericp', NULL, NULL, _t('设置页脚备案信息'), _t('此处填入的信息将会显示在页脚备案信息区,请依据博客情况填写。不填则不显示备案信息。可以使用 html 标签'));
$form->addInput($AKAROMfootericp);
$AKAROMfucset = new Typecho_Widget_Helper_Form_Element_Checkbox('AKAROMfucset',
array('AKAROMindexloading' => _t('开启此选项将会在站点加载时显示加载动画。')),
array('AKAROMindexloading'), _t('首页加载动画'));
$form->addInput($AKAROMfucset->multiMode());
$AKAROMcustomCss = new Typecho_Widget_Helper_Form_Element_Textarea('AKAROMcustomCss', NULL, NULL, _t('自定义 CSS 代码'), _t('输入自定义的 CSS 代码,优先级为高'));
$form->addInput($AKAROMcustomCss);
$AKAROMcustomJs = new Typecho_Widget_Helper_Form_Element_Textarea('AKAROMcustomJs', NULL, NULL, _t('自定义 JS 代码(页脚)'), _t('可以在此处添加访客统计等 JavaScript 代码'));
$form->addInput($AKAROMcustomJs);
}
function themeFields($layout) { //文章自定义字段功能
$AKAROMarticleimg = new Typecho_Widget_Helper_Form_Element_Text('AKAROMarticleimg', NULL, NULL, _t('设置文章封面图'), _t('在这里填入一个图片 URL 地址。如未设置封面图将会自动显示随机图片。'));
$layout->addItem($AKAROMarticleimg);
$AKAROMarticleCopyright = new Typecho_Widget_Helper_Form_Element_Select('AKAROMarticleCopyright', array(
'SA' => 'CC BY-NC-SA 版权协议',
'ND' => 'CC BY-NC-ND 版权协议',
'BAN' => '禁止转载',
'hide' => '不显示'
), 'show', _t('版权声明'), _t('将会在文章底部显示版权声明。选择你需要的版权种类'));
$layout->addItem($AKAROMarticleCopyright);
$AKAROMarticleSMS = new Typecho_Widget_Helper_Form_Element_Select('AKAROMarticleSMS', array(
'default' => '长文章(默认)',
'sms' => '短讯'
), 'show', _t('文章类型'), _t('当设置为 "短讯" 后则在首页拥有一个不一样的外观,适合一小段文字与单图片'));
$layout->addItem($AKAROMarticleSMS);
$AKAROMfucsetreward = new Typecho_Widget_Helper_Form_Element_Radio(
'AKAROMfucsetreward',
array(
'0' => _t('显示赞赏按钮'),
'1' => _t('隐藏')
),
'0',
_t('显示赞赏按钮')
);
$layout->addItem($AKAROMfucsetreward);
$AKAROMarticlecolor = new Typecho_Widget_Helper_Form_Element_Text('AKAROMarticlecolor', NULL, NULL, _t('已废弃选项
设置文章封面底色'), _t('如未设置封面图将会自动显示随机图片。'));
$layout->addItem($AKAROMarticlecolor);
}
function themeInit($comment) {
global $post;
$result = null;
$comment = AKAROM_simple_captcha($comment, $post, $result);
}
function Fancybox($content){ //Fancybox图片灯箱功能
//以下参考自 Skywt 开发的 Daydream 主题(https://github.com/Skywt2003/Daydream),感谢大佬。
$content = preg_replace("/
/i", "
", $content);
return $content;
}
function AKAROM_simple_captcha_math() { //评论区简单验证码
$num1 = rand(1, 20);
$num2 = rand(1, 10);
// 生成一个更复杂的校验值
$hash = md5($num1 . '+' . $num2 . '@' . $_SERVER['REMOTE_ADDR'] . date('Ymd'));
echo "
";
echo "\n";
echo "\n";
echo "";
}
function AKAROM_simple_captcha($comment, $post, $result) { //验证码判断
if (!empty($_REQUEST['text'])) {
if (empty($_POST['num1']) || empty($_POST['num2']) || empty($_POST['captcha_hash'])) {
throw new Typecho_Widget_Exception(_t('验证码异常,请重试', '评论失败'));
} else {
$num1 = intval(base64_decode($_POST['num1']));
$num2 = intval(base64_decode($_POST['num2']));
$sum = $_POST['sum'];
$expected_hash = md5($num1 . '+' . $num2 . '@' . $_SERVER['REMOTE_ADDR'] . date('Ymd'));
// 验证哈希值确保隐藏字段没有被篡改
if ($_POST['captcha_hash'] !== $expected_hash) {
throw new Typecho_Widget_Exception(_t('验证码已过期,请刷新页面重试', '评论失败'));
}
switch (intval($sum)) {
case $num1 + $num2 : break;
case null:
throw new Typecho_Widget_Exception(_t('请输入验证码,请重试', '评论失败'));
break;
default:
throw new Typecho_Widget_Exception(_t('验证码错误,请重试', '评论失败'));
}
}
}
return $comment;
}
function get_post_view($archive) {
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
// 检查 views 字段是否存在
try {
// 尝试查询 views 字段
$row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
} catch (Exception $e) {
// 如果字段不存在,则添加字段
if ($db->getAdapterName() == 'pdo_sqlite') {
// SQLite 的语法
$db->query('ALTER TABLE ' . $prefix . 'contents ADD COLUMN "views" INTEGER DEFAULT 0');
} else {
// MySQL 的语法
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;');
}
echo 0;
return;
}
// 更新浏览次数 - 只在单独访问文章页面时更新,避免首页和其他列表中的浏览计数
if ($archive->is('single')) {
$views = Typecho_Cookie::get('extend_contents_views');
if (empty($views)) {
$views = array();
} else {
$views = explode(',', $views);
}
// 仅当该文章未被记录过时才更新计数
if (!in_array($cid, $views)) {
// 使用事务保证数据一致性
try {
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
array_push($views, $cid);
// 设置30分钟有效期的Cookie,减少频繁更新
$views = implode(',', $views);
Typecho_Cookie::set('extend_contents_views', $views, time() + 1800);
} catch (Exception $e) {
// 出错时不影响页面正常显示
}
}
}
// 返回浏览次数
echo number_format($row['views']);
}
?>
';
} else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('Firefox/', $regs[0]);
$FireFox_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('Maxthon/', $agent);
$Maxthon_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) {
$outputer = ' ';
} else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('Edge/', $regs[0]);
$Edge_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/UC/i', $agent)) {
$str1 = explode('rowser/', $agent);
$UCBrowser_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/QQ/i', $agent, $regs)||preg_match('/QQBrowser\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('rowser/', $agent);
$QQ_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/UBrowser/i', $agent, $regs)) {
$str1 = explode('rowser/', $agent);
$UCBrowser_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
$outputer = ' ';
} else if (preg_match('/edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('edge/', $agent);
$chrome_vern = explode('.', $str1[1]);
$outputer = ' ';
} else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) {
if (preg_match('/Edg([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('Edg/', $agent);
$chrome_vern = explode('.', $str1[1]);
$outputer = ' ';
}else{
$str1 = explode('Chrome/', $agent);
$chrome_vern = explode('.', $str1[1]);
$outputer = ' ';
}
} else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
$str1 = explode('Version/', $agent);
$safari_vern = explode('.', $str1[1]);
$outputer = ' ';
} else{
$outputer = ' ';
}
echo $outputer;
}
// 获取操作系统信息
function getOs($agent)
{
$os = false;
if (preg_match('/win/i', $agent)) {
$os = ' ';
} else if (preg_match('/android/i', $agent)) {
$os = ' ';
}else if (preg_match('/ubuntu/i', $agent)) {
$os = ' ';
} else if (preg_match('/linux/i', $agent)) {
$os = ' ';
} else if (preg_match('/iPhone/i', $agent)) {
$os = ' ';
} else if (preg_match('/iPad/i', $agent)) {
$os = ' ';
} else if (preg_match('/mac/i', $agent)) {
$os = ' ';
}else if (preg_match('/fusion/i', $agent)) {
$os = ' ';
} else {
$os = ' ';
}
echo $os;
}
?>