TYPECHO WIKI
每一个作品都值得被记录

Typecho 首页向下滚动无限加载文章

Typecho维基君Typecho教程 • 3559次浏览 • 发布 2018-05-17 • 更新 2019-03-18

由于 Typecho 相比 WordPress,所提供的接口较少,有时候为了达到某种功能只能自己通过调用数据库数据实现,今天给大家讲的是 Typecho 首页文章列表无限加载的实现,有时候我们会遇到访问一些网站他的文章列表随着我们的向下滚动自动加载,其实就是检测到滚动到底部重新向服务器发送请求,获取新的数据添加到当前数据列表底部。Typecho 上的实现也是类似这种,具体操作步骤请阅读下文:

首先在主题目录下的 functions.php 中加入一段判断 ajax 请求的方法:

function is_ajax()
{
    if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
        if ('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])) {
            return true;
        }
    }
    return false;
}

然后在首页模板 index.php 中加入判断,if(is_ajax()): 则不输出 header footer 等信息。
最后一步,在模板公共 js 文件中加入以下代码:

var page = 1;
var $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');
$('#blog_load_more').click(function(event) {
    $(this).hide();
    $('#spinner').show();
    $.ajax({
        type: 'get',
        url: SITE.default_url + '/page/' + parseInt(page + 1),
        success: function(data, textStatus, XMLHttpRequest) {
            page++;
            $('.w-blog-list').append(data);
            $('#spinner').hide();
            $('#blog_load_more').show();
        },
        error: function(MLHttpRequest, textStatus, errorThrown) {
            $('#spinner').hide();
            $.jGrowl('Network Error');
        }
    });
});

其中 #blog_load_more 为需要绑定的加载更多按钮,#spinner 为加载过程中的动画,.w-blog-list 为首页文章列表容器。由于 Typecho 并没有 Ajax 钩子函数,所以需要在 functions.php 中加入以下代码:

function site_data()
{
    $array = array(
        'site_url'         => Helper::options()->siteUrl,
        'default_url'      => Helper::options()->siteUrl . 'index.php',
        'theme_images_url' => Helper::options()->themeUrl . '/assets/images/',
    );
    echo json_encode($array);
}

之后在 footer.php 中引入该数据:

<script type="text/javascript">
var SITE = <?php site_data()?>;
</script>

此处的 SITE 就是一个 JSON 对象,可以直接用了。

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,Typecho.Wiki所有文章均包含本声明。
厂商投放

【腾讯云】🎉五一云上盛惠!云服务器99元/月续费同价!

腾讯云五一劳动节海量产品 · 轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。快来腾讯云选购吧!

广告
添加新评论 »

已有 5 条评论 »

  1. 用了大佬这个教程,好像没成功。。。theme_images_url对应的img图片是做什么的呀。还有就是index首页if(is_ajax()):判断不知道怎么做的。

    1. 关于首页无限加载文章的方法你可以参考这款主题的代码:Typecho 瀑布流无限加载自适应主题 Practice01

      1. 谢谢,你这个主题功能强的可怕。我学习下。

        1. 想简单一点的话可以参考这个主题:Typecho 首页无限加载博客主题 Newcity,我觉得这个可能没有那么难上手

        2. 我自己一直不太喜欢无限加载的主题,所以对这块就好就没有去研究了