typecho-matery-theme/functions.php
2022-02-14 17:15:20 +08:00

154 lines
5.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
* 主题设置
*/
function themeConfig($form)
{
echo '<style>
p.notice {
line-height: 1.75;
padding: .5rem;
padding-left: .75rem;
border-left: solid 4px #fbbc05;
background: rgba(0,0,25,.025);
}</style>';
$defaultBanner = new Typecho_Widget_Helper_Form_Element_Text('defaultBanner', null, '', '首页顶部大图', '可以填写随机图 API。');
$form->addInput($defaultBanner);
$indexBannerTitle = new Typecho_Widget_Helper_Form_Element_Text('indexBannerTitle', null, '', '首页顶部大标题', '不要太长');
$form->addInput($indexBannerTitle);
$indexBannerSubtitle = new Typecho_Widget_Helper_Form_Element_Text('indexBannerSubtitle', null, '', '首页顶部小标题', '');
$form->addInput($indexBannerSubtitle);
$colorScheme = new Typecho_Widget_Helper_Form_Element_Radio('colorScheme', array('0' => '自动切换', '1' => '日间模式', '2' => '夜间模式'), '0', '主题颜色模式', '选择主题颜色模式。自动模式下每天 22:00 到次日 06:59 会显示为夜间模式。');
$form->addInput($colorScheme);
$indexStyle = new Typecho_Widget_Helper_Form_Element_Radio('indexStyle', array(
'0' => '双栏',
'1' => '单栏'), '0', '首页版式', '选择单栏或者双栏瀑布流');
$form->addInput($indexStyle);
// 高级设置
$reward = new Typecho_Widget_Helper_Form_Element_Text('reward', null, '', '打赏二维码', '图片链接,只允许一张图片,更多请自行合成。');
$form->addInput($reward);
$serifincontent = new Typecho_Widget_Helper_Form_Element_Radio('serifincontent', array('0' => '不启用', '1' => '启用'), '0', '文章内容使用衬线体', '是否对文章内容启用衬线体(思源宋体)。此服务由 Google Fonts 提供,可能会有加载较慢的情况。');
$form->addInput($serifincontent);
$lazyload = new Typecho_Widget_Helper_Form_Element_Radio('lazyload', array('1' => '启用', '0' => '不启用'), '1', '图片懒加载', '是否启用图片懒加载。');
$form->addInput($lazyload);
$enableMath = new Typecho_Widget_Helper_Form_Element_Radio('enableMath', array('0' => '不启用', '1' => '启用'), '0', '启用数学公式解析', '是否启用数学公式解析。启用后会多加载 1~2M 的资源。');
$form->addInput($enableMath);
$head = new Typecho_Widget_Helper_Form_Element_Textarea('head', null, '', 'head 标签输出内容', '统计代码等。');
$form->addInput($head);
$footer = new Typecho_Widget_Helper_Form_Element_Textarea('footer', null, '', 'footer 标签输出内容', '备案号等。');
$form->addInput($footer);
}
/**
* 获取文章缩略图
* 获取顺序: 自定义字段thumb> 文章第一张图片 > 系统图库
* @param $obj
* @return 获取文章头图
*/
function get_postthumb($obj)
{
if (isset($obj->fields->thumb)) {
return $obj->fields->thumb;
}
preg_match("/<img[^>]+src\s*=\s*['\"]([^'\"]+)['\"][^>]*>/ ", $obj->content, $matches);
if (isset($matches[1])) {
return $matches[1];
}
preg_match("/!\[(.*?)\]\((.*?)\)/ ", $obj->content, $matches);
if (isset($matches[2])) {
return $matches[2];
}
$thumbPath = __DIR__ . '/static/medias/featureimages/';
$files = scandir($thumbPath);
$thumbs = [];
for ($i = 0; $i < count($files); $i++) {
if (is_file($thumbPath . $files[$i])) {
$thumbs[] = $files[$i];
}
}
return Helper::options()->themeUrl . '/static/medias/featureimages/' . $thumbs[rand(0, count($thumbs) - 1)];
}
/**
* @param $obj 对象
* @return string 上一页url
*/
function getPrevPageLink($obj)
{
ob_start();
$obj->pagelink("prev", "prev");
$pageLink = ob_get_contents();
ob_end_clean();
preg_match("/<a[^>]+href\s*=\s*['\"]([^'\"]+)['\"][^>]*>/", $pageLink, $matches);
if (isset($matches[1])) {
return $matches[1];
}
return "#";
}
/**
* @param $obj 对象
* @return string 下一页url
*/
function getNextPageLink($obj)
{
ob_start();
$obj->pageLink("next", "next");
$pageLink = ob_get_contents();
ob_end_clean();
preg_match("/<a[^>]+href\s*=\s*['\"]([^'\"]+)['\"][^>]*>/", $pageLink, $matches);
if (isset($matches[1])) {
return $matches[1];
}
return "#";
}
/**
* 统计文章字数
*
* @param $cid
*/
function articleCount($cid)
{
$db = Typecho_Db::get();
$rs = $db->fetchRow($db->select('table.contents.text')->from('table.contents')->where('table.contents.cid=?', $cid)->order('table.contents.cid', Typecho_Db::SORT_ASC)->limit(1));
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
return mb_strlen($text, 'UTF-8');
}
/**
* 获取文章访问数
* @param $archive
* @return string|void
* @throws Typecho_Db_Exception
*/
function articleViewsNum($archive) {
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;');
echo 0;
return;
}
$row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
if ($archive->is('single')) {
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
}
if($row['views'] < 1000){
return $row['views'];
} else {
return ($row['views'] / 1000) .'k';
}
}