Typecho显示不同的日期方式标签

在制作Typecho主题的时候,默认官方提供的日期格式是类似July 8, 2020,这样子的,我们可能需要其他的格式,比如2020-08-08。所以我们只需要找到对应模板中的日期格式就可以。这里简单记录一下,如果以后有需要的话可以使用到。

一般而言需要修改的代码存在于archive.php index.php post.php这三个文件内

('F j, Y')  #此为英文显示代码 
('Y-m-d')   #此为数字显示代码

找到你需要修改的代码替换掉即可,想要其他的显示方式,可以看看后面提供的一些显示代码
注意:每个文件内也许不止一处需要修改,可复制出来用TXT快速查找
其它显示代码:假设日期是2001-03-10

("F j, Y, g:i a");                   // March 10, 2001, 5:16 pm
("m.d.y");                           // 03.10.01
("j, n, Y");                         // 10, 3, 2001
("Ymd");                             // 20010310
('h-i-s, j-m-y, it is w Day z ');    // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
('\i\t \i\s \t\h\e jS \d\a\y.');     // It is the 10th day.
("D M j G:i:s T Y");                 // Sat Mar 10 15:16:08 MST 2001
('H:m:s \m \i\s\ \m\o\n\t\h');       // 17:03:17 m is month
("H:i:s");                           // 17:16:17
("Y-m-d H:i:s");                     // 2001-03-10 17:16:18 (MySQL DATETIME 格式)

参考文件:https://sunpma.com/79.html

Typecho纯代码算术验证码

Typecho的垃圾评论还是比较多的,除了插件外,还可以通过PHP函数实现简单的算术验证码。

第一步、function.php如下函数

function themeInit($comment){
$comment = spam_protection_pre($comment, $post, $result);
}
function spam_protection_math(){
    $num1=rand(1,49);
    $num2=rand(1,49);
    echo "<label for=\"math\">请输入<code>$num1</code>+<code>$num2</code>的计算结果:</label>\n";
    echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" style=\"width:218px\" placeholder=\"计算结果:\">\n";
    echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
    echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function spam_protection_pre($comment, $post, $result){
    $sum=$_POST['sum'];
    switch($sum){
        case $_POST['num1']+$_POST['num2']:
        break;
        case null:
        throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败'));
        break;
        default:
        throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败'));
    }
    return $comment;
}

第二步、comments.php添加函数

打开主题comments.php文件,在适当为止插入如下代码:

<?php spam_protection_math();?>

如果觉得100以内太难了,请修复function.php中添加的代码中rand后面的数字范围。

本文转自:https://minirizhi.com/22.html

Typecho获取随机文章函数(兼容mysql和sqlite)

function getRandomPosts($random=5){
    $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($random)
        ->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 '<a href="'.$permalink.'" title="'.$post_title.'"><h5 class="card-title">'.$post_title.'</h5></a>';
    }
}
}

需要使用时在模板中调用<?php getRandomPosts(10);?>即可,这个随机文章函数的好处就是不光兼容mysql还兼容sqlite数据库。

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

文章转自:http://www.7tec.cn/246.html

Typecho在PHP7以上版本中出现Database Server Error错误的解决办法

Typecho程序,之前安装的时候是PHP5.X版本,切换PHP7.X以上版本的时候,页面出现 "Database Server Error" 的错误问题。
目前发现这个问题,就搜索了一下,确有解决办法。

config.inc.php可以看到问题了。直接在config.inc.php文件中找到:

$db = new Typecho_Db('Mysql', 'typecho_');

修改成:

$db = new Typecho_Db('Pdo_Mysql', 'typecho_');

替换后,刷新前台、后台均正常使用。