Typecho主题开发/二次开发常用代码功能整理备用

目前我们在使用的博客CMS程序中,可能较多的网友会使用WordPress,毕竟提供的免费主题、插件以及文档是比较多的,主要是用户量确实比较多。其次国内的免费博客CMS中,ZBLOG和Typecho是小众用户群,不能说不行,只能说用户量相对比较小。但是陌涛个人认为有用作个人博客日志的还是可以用的。

尤其是我们喜欢折腾程序的朋友在选择到免费主题之后可能需要对其进行二次开发,当然有些希望深入开发的朋友会去做一些特有的主题,自用或者分享。陌涛有些时候也需要用到客户中的网站进行二次开发功能或者仿站主题会有用到Typecho,这里我也顺手根据网上网友提供的一些代码整合进行整理。

这里的代码可能后续也会补充,是我们常用到Typecho主题开发和二次开发需要用到的一些代码功能。部分代码确实是使用的转载或者不知道出处的,这里感谢提供的网友。

1、文章缩略图调用

/** 输出文章缩略图 */ 
function showThumbnail($widget)
{ 
    // 当文章无图片时的默认缩略图
    $rand = rand(1,5); // 随机 1-5 张缩略图
    $random = $widget->widget('Widget_Options')->themeUrl . '/img/sj/' . $rand . '.jpg'; // 随机缩略图路径
   // $random = $widget->widget('Widget_Options')->themeUrl . '/img/mr.jpg'; // 若只想要一张默认缩略图请删除本行开头的"//"

    $attach = $widget->attachments(1)->attachment;
    $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; 
    

if (preg_match_all($pattern, $widget->content, $thumbUrl)) {
         echo $thumbUrl[1][0];
    } else     if ($attach->isImage) {
      echo $attach->url; 
    } else {
        echo $random;
    }
}

这里我们先默认1-5个默认图片,在文章没有图片的时候我们可以默认显示。

<?php%20showThumbnail($this);%20?>

合适的主题位置调用。

2、获取文章第一张图作为缩略图

function showThumbnail($widget) {
$attach = $widget->attachments(1)->attachment;
$pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';
if (preg_match_all($pattern, $widget->content, $thumbUrl)) {
echo $thumbUrl[1][0];
} else
if ($attach->isImage) {
echo $attach->url;
} else {
echo $random;
} }

调用方式:

<img src="<?php%20showThumbnail($this);%20?>">

3、相关文章调用

<?php $this->related(5)->to($relatedPosts); ?>
    <ul>
    <?php while ($relatedPosts->next()): ?>
    <li><a href="<?php%20$relatedPosts->permalink();%20?>" title="<?php $relatedPosts->title(); ?>"><?php $relatedPosts->title(); ?></a></li>
    <?php endwhile; ?>
</ul>

4、热门文章调用

function getHotComments($limit = 10){
    $db = Typecho_Db::get();
    $result = $db->fetchAll($db->select()->from('table.contents')
        ->where('status = ?','publish')
        ->where('type = ?', 'post')
        ->where('created <= unix_timestamp(now())', 'post') //添加这一句避免未达到时间的文章提前曝光
        ->limit($limit)
        ->order('commentsNum', Typecho_Db::SORT_DESC)
    );
    if($result){
        foreach($result as $val){            
            $val = Typecho_Widget::widget('Widget_Abstract_Contents')->push($val);
            $post_title = htmlspecialchars($val['title']);
            $permalink = $val['permalink'];
            echo '<li><a href="'.$permalink.'" title="'.$post_title.'" target="_blank">'.$post_title.'</a></li>';        
        }
    }
}

调用方式:

<?php getHotComments('10');?>

根据需要修改调用数量和样式。

5、侧栏热门标签调用

<div class="widget">
<h3><?php _e('热门标签'); ?></h3>
<ul class="cate">
<?php $this->widget('Widget_Metas_Tag_Cloud', array('sort' => 'count', 'ignoreZeroCount' => true, 'desc' => true, 'limit' => 20))->to($tags); ?>  
<?php while($tags->next()): ?>  
<li><a rel="tag" href="<?php%20$tags->permalink();%20?>"><?php $tags->name(); ?></a></li>
<?php endwhile; ?>
<div class="clear"></div>
</ul>
</div>

6、文章统计代码实现

//统计调用实现 imotao.com
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')) {
       $db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
    }
    echo $row['views'];
}

调用:

<?php get_post_view($this) ?>

需要的位置调用。

7、分页代码

<?php $this->pageNav('上一页', '下一页', '5', '……'); ?>//显示多个页码的
<?php $this->pageLink('下一页','next'); ?>
<?php $this->pageLink('上一页'); ?>//只显示上一页下一页

8、上一篇下一篇

上一篇: <?php $this->thePrev('%s','没有了'); ?>
下一篇: <?php $this->theNext('%s','没有了'); ?>

9、搜索代码

<form method="post">
<p><input type="text" name="s" class="text" autofocus /></p>
<p><button type="submit" class="submit"><?php _e('搜索'); ?></button></p></form>

10、最新文章调用

<?php $this->widget('Widget_Contents_Post_Recent')->to($post); ?>
<?php while($post->next()): ?>
<a href=”<?php $post->permalink(); ?>” title=”<?php $post->title(); ?>”>
<?php $post->title(25, '…'); ?></a>
<?php endwhile; ?>

 

原创文章,作者:陌涛,如若转载,请注明出处:https://imotao.com/3614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
陌涛陌涛
上一篇 2020年8月15日 下午4:50
下一篇 2020年8月15日 下午6:43

相关推荐

  • Typecho无需插件实现访客阅读数统计方法

    Typecho算是一款比较轻便的博客程序,我们应该也有很多网友在使用。这里陌涛有在整理模板的时候看到对于访客数量统计可以使用到无插件实现。这里也就一并记录下来,毕竟能少用插件的时候…

    2020年7月20日
    48700
  • Typecho调用热门评论文章和调用最新文章的方法

    Typecho程序在设计主题的时候,侧栏有些时候需要调用热评文章或者最新文章。我们可以在指定的位置通过脚本直接调用。在这篇文章中,陌涛准备整理这个调用文章的方法,以后在有需要的模板…

    2020年7月20日
    54200
  • Typecho无插件实现随机文章调用方法

    第一、随机文章代码 这个代码直接添加到当前主题的Functions.php文件中。本来还是有一个随机插件的,这里我考虑到需要用到当天的时间所以不去用插件。 第二、调用代码 在需要调…

    2020年7月20日
    65600
  • Typecho调用相关文章方式及判断是否为首页显示

    一般我们在使用WordPress程序的时候,相关文章内容也都是根据相似的TAG进行同类调用匹配的。同样的,如果在用到Typecho的时候也可以用此方法进行调用相关文章。在这里陌涛也…

    2020年7月20日
    61500
  • Typecho主题前端底部增加页面加载完成时间方法

    我们是否看到有些个人博客网站底部是有显示当前页面的加载完成时间的。虽然这个功能对于网站没有多大作用,但是有些时候也可以显示出自己的网站速度,当然你的网站速度加载快才建议使用这种效果…

    2020年7月20日
    73800
  • Typecho新文章标题添加”New”标签

    我们经常看到有些博客在新文章标题旁边是有一个NEW标签或者图标的,这样显得这篇文章是最新更新的。如果我们在做主题的时候不自带这个功能,那就可以自己添加一个这样的功能。这里陌涛在阅读…

    2020年7月20日
    56900
  • Typecho页面底部调用加载时间实现方法

    我们经常看到Typecho有些网站底部有加载时间显示的效果,其实这个功能到底有什么用呢?实际对于用户来说并没有什么用途,但是可以对于开发者站长来说可以看看自己网站加载速度对比,以便…

    2020年7月20日
    58700
  • 在Typecho文章页面添加是否被百度收录的功能

    我们是否经常在一些网友的博客内容页看到”百度已收录”等字样?其实这样加上去有多少效果也没有多少,但是对于有些个人来说他喜欢的,或者可以在考核编辑的时候可以看…

    2020年7月20日
    53200
  • Typecho于2022年愚人节发布了1.2正式版

    是的,你没有看错,经过漫长的等待,我们终于发布了 Typecho 1.2.0 正式版。这个版本的开发经历了如此长的时间,以至于我无法一次性列出这么长的详细改进列表。 除了修复了很多…

    2022年4月1日
    43900
  • Typecho炫彩鼠标插件:HoerMouse 增加点击特效

    今天发现一个Typecho博客炫彩鼠标插件HoerMouse,可以给博客添加个炫酷的鼠标特效 插件HoerMouse提供了如下三中鼠标特效 fireworks+anime喷墨效果 …

    2020年7月24日
    60600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

docker镜像已更新为 https://0-docker.nat.tf/