Typecho 获取网站统计数据

下面的代码放在主题的 functions.php 文件中,在每个页面都能调用

获取文章数量

获取文章数量,不包含草稿和未公开的文章

function postCount() {
    $db = Typecho_Db::get();
    // 查询出文章数量并转换为数组
    $count = $db->fetchRow($db->select('COUNT(*)')->from('table.contents')->where('type = ?', 'post')->where('status = ?', 'publish'));
    // 返回文章数量
    return $count['COUNT(*)'];
}

Typecho 的文章和独立页面都存储在 Typecho 数据库的 typecho_contents 表中,使用 Typecho 提供的 API 查询时可以不需要加 typecho 前缀。typecho_contents 表中有个 type 字段是用来存储内容类型的,post 是普通文章,page 是独立页面。status 字段是存储文章状态,publish 是公开的,draft 是草稿。如果要获取独立页面数量可以把 where('type = ?', 'post') 换为 where('type = ?', 'page') ,如果要获取所有公开、未公开、和草稿文章数量可以直接把 where('status = ?', 'publish') 方法删除。

获取评论数量

function commentsCount() {
    $db = Typecho_Db::get();
    // 查询出评论数量并转换为数组
    $count = $db->fetchRow($db->select('COUNT(*)')->from('table.comments')->where('status = ?', 'approved'));
    // 返回评论数量
    return $count['COUNT(*)'];
}

获取分类数量

function categoryCount() {
    $db = Typecho_Db::get();
    // 查询出分类数量并转换为数组
    $count = $db->fetchRow($db->select('COUNT(*)')->from('table.metas')->where('type = ?', 'category'));
    // 返回分类数量
    return $count['COUNT(*)'];
}

获取标签数量

function tagCount() {
    $db = Typecho_Db::get();
    $count = $db->fetchRow($db->select('COUNT(*)')->from('table.metas')->where('type = ?', 'tag'));
    return $count['COUNT(*)'];
}

获取总点赞数量

function agreeCount() {
    $db = Typecho_Db::get();
    // 对文章表的 agree 字段进行求和并把查询出的结果转换为数组
    $count = $db->fetchRow($db->select('SUM(agree) AS agreeCount')->from('table.contents'));
    // 返回总点赞数
    return $count['agreeCount'];
}

获取评论数量排名前 5 的 5 篇文章

function top5CommentPost() {
    $db = Typecho_Db::get();
    // 查询出 5 条评论数最大的文章,按照评论数从大到小排序,然后把查询出的数据转换为数组
    $top5Post = $db->fetchAll($db->select()->from('table.contents')->where('type = ?', 'post')->where('status = ?', 'publish')->order('commentsNum', Typecho_Db::SORT_DESC)->offset(0)->limit(5));
    // 用来存储文章信息的数组
    $postList = array();
    foreach ($top5Post as $post) {
        // 使用 Typecho 提供的 API 获取每篇文章的链接地址
        $post = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($post);
        // 把文章标题、链接、点赞数加入数组
        array_push($postList, array(
            'title' => $post['title'],
            'link' => $post['permalink'],
            'commentsNum' => $post['commentsNum']
        ));
    }
    // 返回 5 篇文章的标题、链接、点赞数
    return $postList;
}

获取各分类的文章数量

function categoryPostCount() {
    $db = Typecho_Db::get();
    // 查询出每个分类的文章数量并转换为数组
    $count = $db->fetchAll($db->select('name', 'count')->from('table.metas')->where('type = ?', 'category'));
    // 如果没有查询到数据就返回空数组
    if (count($count) < 1) {
        return array();
    }
    // 返回每个分类的文章数量
    return $count;
}

Typecho解决PJAX下代码高亮失效的方法

<script type="text/javascript">
$(document).on('pjax:complete', function() {
if (typeof Prism !== 'undefined') {
var pres = document.getElementsByTagName('pre');
for (var i = 0; i < pres.length; i++){
if (pres[i].getElementsByTagName('code').length > 0)
pres[i].className = 'line-numbers';}
Prism.highlightAll(true,null);}
});
</script>

将代码插入header.php或者footer.php的之前

Typecho复制文字添加版权信息

 

代码如下:

< script>
document.body.addEventListener('copy', function (e) {
if (window.getSelection().toString() && window.getSelection().toString().length > 42) {
setClipboardText(e);
alert('商业转载请联系作者获得授权,非商业转载请注明出处哦~\n谢谢合作~(。・`ω´・)');
}
}); 
function setClipboardText(event) {
var clipboardData = event.clipboardData || window.clipboardData;
if (clipboardData) {
event.preventDefault();
var htmlData = ''
+ '著作权归作者所有。
' + '商业转载请联系作者获得授权,非商业转载请注明出处。
' + '作者:author() ?>
' + '链接:' + window.location.href + '
' + '来源:options->siteUrl(); ?>

' + window.getSelection().toString(); var textData = '' + '著作权归作者所有。\n' + '商业转载请联系作者获得授权,非商业转载请注明出处。\n' + '作者:author() ?>\n' + '链接:' + window.location.href + '\n' + '来源:options->siteUrl(); ?>\n\n' + window.getSelection().toString(); clipboardData.setData('text/html', htmlData); clipboardData.setData('text/plain',textData); } } < /script>

建议添加到主题的 footer.php 中,放到< /body>之前就行了。alert 那一行是复制后的弹窗提示,不需要可以在前用 // 注释掉。友情提示:复制请删除< script>前的空格

Typecho阅读次数统计Cookies版

将下面的代码加入主题 functions.php 中:

function get_post_view($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')) {
$views = Typecho_Cookie::get('extend_contents_views');
if(empty($views)){
$views = array();
}else{
$views = explode(',', $views);
}
if(!in_array($cid,$views)){
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
array_push($views, $cid);
$views = implode(',', $views);
Typecho_Cookie::set('extend_contents_views', $views); //记录查看cookie
}
}
echo $row['views'];
}

调用代码:

<?php get_post_view($this) ?>

Typecho 简洁单栏主题 Theme LaShi6.0

不知道为什么,我就喜欢这样简洁的主题。作为个人博客来说,这样很好。

主题支持:
- 全站PJAX(大部分拖慢速度都改为异步加载)
- 评论AJAX
- 搜索AJAX
- 实时搜索结果
- 图片缓加载
- 滑动式手机端菜单(凑数
- 顶部向下滑动滑出搜索框
- 评论列表异步加载
- 文章的md版本

主题预览:https://moe.sb

Github:https://github.com/siosr/Kiosr

typecho 文章外链自动添加nofollow和新窗口打开

nofollow标签是由谷歌领头创新的一个“反垃圾链接”的标签,并被百度、yahoo等各大搜索引擎广泛支持,引用nofollow标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有nofollow属性的任何出站链接,以减少垃圾链接的分散网站权重。给文章的外链添加nofollow属性,可以有效防止垃圾链接对本站权重的稀释和伤害。

打开typecho跟目录下的 var/HyperDown.php 文件,找到:

return $self->makeHolder("<a href=\"{$url}\">{$escaped}</a>");

修改为:
if (strstr($url,'//你的网址') == false ) {

return $self->makeHolder("<a href=\"{$url}\" target=\"_blank\" rel=\"nofollow\">{$escaped}</a>");
} else {
return $self->makeHolder("<a href=\"{$url}\" target=\"_blank\">{$escaped}</a>");
}
退出移动版