typecho获取随机文章(最新版)

本文共有1659个字,关键词:typecho随机文章

最近在帮一个朋友做网站,发现提示错误database query erro。

于是我就打开了debug模式查看一下是哪里的问题。

/**开启debug模式*/
define('__TYPECHO_DEBUG__', true);

将上面代码丢进config.inc.php页面,保存,刷新首页。提示随机文章报错。no such function:now in ......

于是打开function.php看一下随机文章的代码,再去网上搜了一下,发现没问题呀。可是就是执行不了。于是就在网上借鉴了另外一段代码。最终将原来的代码改为:

function getRandomPosts($random){
    $modified = $random->modified;
    $db = Typecho_Db::get();
    $adapterName = $db->getAdapterName();//兼容非MySQL数据库
    if($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite'){
        $order_by = 'RANDOM()';
    }else{
        $order_by = 'RAND()';
    }
    $sql = $db->select()->from('table.contents')
        ->where('status = ?','publish')
        ->where('table.contents.created <= ?', time())
        ->where('type = ?', 'post')
        ->limit(5)
        ->order($order_by);

$result = $db->fetchAll($sql);
if($result){
    foreach($result as $val){
        $obj = Typecho_Widget::widget('Widget_Abstract_Contents');
        $val = $obj->push($val);
        $post_title = htmlspecialchars($val['title']);
        $permalink = $val['permalink'];
        echo '<li><i class="fa fa-book"></i>
            <a href="'.$permalink.'">'.$post_title.'</a></li>';
    }
}
}

保存,刷新首页。灯等灯等,完美解决。

总结了一下,发现问题在于数据库上面。因为我用的是sqlite数据库,而网上流传的大部分代码都是用的mysql数据库。所以才会出错。而以上代码的优点在于可以兼容各种数据库!

完整使用方法:
1.将上面完整的随机文章代码丢进主题文件夹的function.php里面,保存;
2.在需要添加随机文章的地方加上代码:<?php getRandomPosts(10);?>,保存;
3.刷新页面,搞定!

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

雨致

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。本站微信公众号:7TEC,敬请关注!
招租
添加新评论
已有 3 条评论
  1. 枫叶:

    这里面的数字10是啥意思呀~

    1. 雨致: 回复 @枫叶

      显示10篇随机文章

  2. 枫叶:

    用你这个代码段,我自己使用上倒没问题,给朋友使用我的主题后,倒还报错了,我也是醉了。我估计是数据库跟我的不一样。另外你那个“10”好像没什么反应,就算改成“5”也不会显示5篇。倒是得在代码段里修改数字才行。