typecho常用的functions
typecho常用的functions随机文章
function theme_random_posts(){
$defaults = array(
'number' => 6,
'before' => '<ul class="archive-posts">',
'after' => '</ul>',
'xformat' => '<li class="archive-post"> <a class="archive-post-title" href="{permalink}">{title}</a>
</li>'
);
$db = Typecho_Db::get();
$sql = $db->select()->from('table.contents')
->where('status = ?','publish')
->where('type = ?', 'post')
->limit($defaults 'number' )
->order('RAND()');
$result = $db->fetchAll($sql);
echo $defaults 'before' ;
foreach($result as $val){
$val = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($val);
echo str_replace(array('{permalink}', '{title}'),array($val 'permalink' , $val 'title' ), $defaults 'xformat' );
}
echo $defaults 'after' ;
}
前台调用<?php theme_random_posts();?>页面加载耗时代码function timer_start() {
global $timestart;
$mtime = explode( ' ', microtime() );
$timestart = $mtime 1 + $mtime 0 ;
return true;
}
timer_start();
function timer_stop( $display = 0, $precision = 3 ) {
global $timestart, $timeend;
$mtime = explode( ' ', microtime() );
$timeend = $mtime 1 + $mtime 0 ;
$timetotal = $timeend - $timestart;
$r = number_format( $timetotal, $precision );
if ( $display )
echo $r;
return $r;
}
然后,模板部分加入<?php timer_stop() ?>【转自http://t.160.me/65.html】文章缩略图获取
见《typecho 缩略图加入根据标签缩略名输出缩略图》文章中文字数统计function art_count ($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' );
echo mb_strlen($text,'UTF-8');
}
模板引用<?php echo art_count($this->cid); ?>【转自https://i.chainwon.com/131.html】替换文章内容function themeInit($archive)
{
if ($archive->is('single'))
{
$archive->content = image_class_replace($archive->content);
}
}
function image_class_replace($content)
{
$content = preg_replace('#<a(.*?) href="( ^" */)?(( ^"/ *)\. ^" *)"(.*?)>#',
'<a$1 href="$2$3"$5 target="_blank">', $content);
return $content;
}
上述代码就是将不含blank属性的超链接,替换为加上了blank属性的超链接自定义上下篇链接/**
* 显示下一篇
*
* @access public
* @param string $default 如果没有下一篇,显示的默认文字
* @return void
*/
function theNext($widget, $default = NULL)
{
$db = Typecho_Db::get();
$sql = $db->select()->from('table.contents')
->where('table.contents.created > ?', $widget->created)
->where('table.contents.status = ?', 'publish')
->where('table.contents.type = ?', $widget->type)
->where('table.contents.password IS NULL')
->order('table.contents.created', Typecho_Db::SORT_ASC)
->limit(1);
$content = $db->fetchRow($sql);
if ($content) {
$content = $widget->filter($content);
$link = '<a href="' . $content 'permalink' . '" title="' . $content 'title' . '">下一篇</a>';
echo $link;
} else {
echo $default;
}
}
/**
* 显示上一篇
*
* @access public
* @param string $default 如果没有下一篇,显示的默认文字
* @return void
*/
function thePrev($widget, $default = NULL)
{
$db = Typecho_Db::get();
$sql = $db->select()->from('table.contents')
->where('table.contents.created < ?', $widget->created)
->where('table.contents.status = ?', 'publish')
->where('table.contents.type = ?', $widget->type)
->where('table.contents.password IS NULL')
->order('table.contents.created', Typecho_Db::SORT_DESC)
->limit(1);
$content = $db->fetchRow($sql);
if ($content) {
$content = $widget->filter($content);
$link = '<a href="' . $content 'permalink' . '" title="' . $content 'title' . '">上一篇</a>';
echo $link;
} else {
echo $default;
}
}
调用代码<?php thePrev($this); ?>和<?php theNext($this); ?>【转自http://t.160.me/33.html】自定义分类、标签、搜索、首页等文章分页数量function themeInit($archive) {
if ($archive->is('index')) {
$archive->parameter->pageSize = 10; // 自定义条数
}
}
上边的是自定义首页文章数量,下面的是自定义default文章数量
function themeInit($archive) {
if ($archive->is('category', 'default')) {
$archive->parameter->pageSize = 10; // 自定义条数
}
}
【转自https://app.typecho.me/coder/10.html】判断最新帖子显示图标
例如24小时内发布的贴,需要一个标志来完成。这里是用判断输入特殊字符,再用CSS判断完成的。
/**
* 判断时间区间
*
* 使用方法 if(timeZone($this->date->timeStamp)) echo 'ok';
*/
function timeZone($from){
$now = new Typecho_Date(Typecho_Date::gmtTime());
return $now->timeStamp - $from < 24*60*60 ? true : false;
}
在index.php中调用<?php if(timeZone($this->date->timeStamp)) echo ' new'; ?>【转自http://t.160.me/44.html】
N天内评论最多的文章
代码作用是N天内评论最多的N篇文章,这个N你可以自己定义,自己修改。
<?php
function rmcp($days = 30,$num = 5){
$defaults = array(
'before' => '<ul>',
'after' => '</ul>',
'xformat' => '<li><a href="{permalink}">{title}</a><span class="subcolor">已有评论数:{commentsNum}</span></li>'
);
$time = time() - (24 * 60 * 60 * $days);
$db = Typecho_Db::get();
$sql = $db->select()->from('table.contents')
->where('created >= ?', $time)
->where('type = ?', 'post')
->limit($num)
->order('commentsNum',Typecho_Db::SORT_DESC);
$result = $db->fetchAll($sql);
echo $defaults 'before' ;
foreach($result as $val){
$val = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($val);
echo str_replace(array('{permalink}', '{title}', '{commentsNum}'), array($val 'permalink' , $val 'title' , $val 'commentsNum' ), $defaults 'xformat' );
}
echo $defaults 'after' ;
}
?>
模板调用<?php rmcp(60,5);?>这个调用的意思是2个月内评论最多的前5篇文章。【转自http://t.160.me/85.html】百度是否收录(已作废)//判断内容页是否百度收录
function baidu_record() {
$url='http://'.$_SERVER 'HTTP_HOST' .$_SERVER 'REQUEST_URI' ;
if(checkBaidu($url)==1)
{echo "百度已收录";
}
else
{echo "<a style=\"color:red;\" rel=\"external nofollow\" title=\"点击提交收录!\" target=\"_blank\" href=\"http://zhanzhang.baidu.com/sitesubmit/index?sitename=$url\">百度未收录</a>";}
}
function checkBaidu($url) {
$url = 'http://www.baidu.com/s?wd=' . urlencode($url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$rs = curl_exec($curl);
curl_close($curl);
if (!strpos($rs, '没有找到')) { //没有找到说明已被百度收录
return 1;
} else {
return -1;
}
}
模板调用代码<?php echo baidu_record() ?>【转自http://www.ihewro.xyz/archives/322/】在文章编辑页面设置个自定义字段function themeFields($layout) {
$thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, NULL, _t('自定义缩略图'), _t('输入缩略图地址(仅文章有效)'));
$layout->addItem($thumb);
}