目录

Typecho模板修改制作必备常用代码

typecho是一款不错的php博客系统,轻便而功能完备。能够对已有的typecho模版进行一些个性化的定制。你可以用它们对typecho模版进行一些人性化、个性化的改进。分享和记录typecho开发经验如下:

1、文章title设置,使得对搜索引擎足够友好
【博客首页】-- 博客名称 - 博客描述【归档页面】--XXXX/XX - 博客名称
【文章页面】--文章标题 - 博客名称【独立页面】---页面标题 - 博客名称
【分类页面】-- 分类名称 - 博客名称【标签页面】-- 标签 - 博客名称

<title> 
<?php if($this->is('index')): ?><?php $this->options->title(); ?>-<?php $this->options->description(); ?> 
<?php elseif($this->is('archive')): ?><?php $this->archiveTitle('/','',' - '); ?><?php $this->options->title(); ?> 
<?php else: ?><?php $this->archiveTitle('','',' - '); ?><?php $this->options->title(); ?><?php endif; ?> 
</title>

【博客首页】博客名称
【独立页面】页面标题 - 博客名称
【分类页面】分类名称 - 博客名称
【标签页面】Tag: 标签 - 博客名称
【存档页面】存档: XXXX年XX月 - 博客名称
【其它(日志页)】页面标题

<title> 
<?php if ($this->is('index')){$this->options->title();} 
elseif($this->is('page')){$this->archiveTitle('','',' - ');$this->options->title();} 
elseif($this->is('category')){$this->archiveTitle('','',' - ');$this->options->title();} 
elseif($this->is('tag')){$this->archiveTitle('','Tag: ',' - ');$this->options->title();} 
elseif($this->is('archive')){$this->archiveTitle('年','存档: ','月 - ');$this->options->title();} 
else{$this->archiveTitle('','','');}?> 
</title> 

或使用:

<title> 
<?php $this->archiveTitle('', '', ' - '); ?><?php $this->options->title(); ?>-<?php $this->options->description(); ?> 
</title> 

2、相关文章的调用:

<?php $this->related(5)->to($relatedPosts); ?> 
<?php if ($relatedPosts->have()): ?> 
<?php while ($relatedPosts->next()): ?> 
<li> 
<a href="<?php $relatedPosts->permalink(); ?>" title="<?php $relatedPosts->title(); ?>"><?php $relatedPosts->title(); ?></a> <small class="info"><strong><?php $relatedPosts->author(); ?></strong> post in<?php $this->date('Y-m-d H:i:s'); ?></small> 
</li> 
<?php endwhile; ?> 
<?php else : ?> 
<li>No Related Post</li> 
<?php endif; ?>

3、输出Tags

输出所有(最好把它用在单独页面中):

<?php $this->widget('Widget_Metas_Tag_Cloud') ->parse('<span class="tagcloud"><a href="{permalink}">{name}</span></a>'); ?> 

或者使用(推荐)(使用于边栏):

<?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 $tags->permalink(); ?>" ><?php $tags->name(); ?></a> 
</li> 
<?php endwhile; ?> 

注:20控制输出数量

4、分页只显示新文章、旧文章

<?php $this->pageLink('? 新文章','prev'); ?> 
<?php $this->pageLink('旧文章 ?','next'); ?> 

5、测边栏每月归档后面显示文章数

<?php $this->widget('Widget_Contents_Post_Date', 'type=month&format=Y年m月') 
->parse('<li><a href="{permalink}">{date}</a> <span id="ignore">({count})</span></li>'); ?>

6、复制文章时带版权(注意这是JS)

<script type="text/javascript"> 
    function copy_code(text) { 
        if (window.clipboardData) { 
        window.clipboardData.setData("Text", text) 
            alert("已经成功复制到剪贴板!"); 
        } else { 
        var x=prompt('你的浏览器可能不能正常复制\n请你手动进行:',text); 
        } 
        //return false; 
    } 
</script> 

7、标签云

<?php $this->widget('Widget_Metas_Tag_Cloud', ignoreZeroCount=1&limit=20′)->to($tags); ?> 
<?php while($tags->next()): ?> 
<a href=”<?php $tags->permalink(); ?>”><?php $tags->name(); ?></a> 
<?php endwhile; ?>

8、最新文章

<?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; ?> 

9、相关内容

<?php $this->related(5)->to($relatedPosts); ?> 
<?php while ($relatedPosts->next()): ?> 
<a href=”<?php $relatedPosts->permalink(); ?>” title=” 
<?php $relatedPosts->title(); ?>”><?php $relatedPosts->title(); ?></a> 
<small><strong><?php $relatedPosts->author(); ?></strong> post in 
<?php $this->date('Y-m-d H:i:s'); ?></small> 
<?php endwhile; ?> 

11、日期归档显示统计数量

<?php $this->widget('Widget_Contents_Post_Date', 'type=month&format=F Y')->parse('<li><a href=”{permalink}”>{date}</a> ({count})</li>'); ?> 

12,友情链接 要装插件

<?php PageToLinks::output('links', 'h3', 'ul'); ?> 

13,头部关键信息

<?php $this->keywords('_'); ?> //关键词 
<?php $this->options->title(); ?> //站点名称 
<?php $this->options->description(); ?> //站点描述 
<?php $this->archiveTitle(); ?> //标题 
<?php $this->options->themeUrl('ie.css'); ?> //模板路径 
<?php $this->options->siteUrl(); ?> //主页网址 
<?php $this->options->feedUrl(); ?> 
<?php $this->options->commentsFeedUrl(); ?> 
<?php $this->pageNav(); ?> //分页 
<?php $this->options->generator(); ?> //版本号 

14,文章页面相关参数调用

<?php $this->title(); ?> //标题 
<?php $this->category(','); ?> //分类 
<?php $this->tags(', ', true, ''); ?> //标签 
<?php $this->date('F jS, Y') ?> //时间 
<?php $this->content(); ?> //内容 
<?php $this->thePrev('&laquo; %s', ''); ?> //上一篇 
<?php $this->theNext('%s &raquo;', ''); ?> //下一篇

15,全部文章列表代码,可以应用在任何地方:

<?php $this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->parse('<li>{year}-{month}-{day} : <a href="{permalink}">{title}</a></li>'); ?> 

16,全部标签集列表

<?php $this->widget('Widget_Metas_Tag_Cloud') 
     ->to($taglist); ?><?php while($taglist->next()): ?> 
<li><a href="<?php $taglist->permalink(); ?>" title="<?php $taglist->name(); ?>"><?php $taglist->name(); ?></a></li> 
<?php endwhile; ?> 

17,全部日志数量:

<?php $stat = Typecho_Widget::widget('Widget_Stat') ;echo ".$stat->PublishedPostsNum."; ?> 

18,使用下面这个方法,可以自定义首页的文章显示条数,以及自定义分类文章显示:

function themeInit($archive) { 
    if ($archive->is('index')) { 
        $archive->parameter->pageSize = 10; // 自定义条数 
    } 
}
或者:
function themeInit($archive) { 
    if ($archive->is('category', 'default')) { 
        $archive->parameter->pageSize = 10; // 自定义条数 
    } 
} 

19,调用某分类文章,pageSize是数量,mid是分类号:

<?php $this->widget('Widget_Archive@index', 'pageSize=6&type=category', 'mid=1') 
                ->parse('<li><a href="{permalink}">{title}</a></li>'); ?> 

20,侧栏评论忽略博主评论

<?php $this->widget('Widget_Comments_Recent','ignoreAuthor=true')->to($comments); ?> 

21,typecho自动显示摘要,180为自动摘要的字数(有人说是一半,可能他们的意思是字节吧)

<p><?php $this->excerpt(180); ?></p> 
<p class="more"><a href="<?php $this->permalink() ?>" rel="bookmark" title="<?php $this->title() ?>">阅读全文</a></p>

在这里提醒大家一下:

<?php $this->excerpt(180,'ABC'); ?>

则ABC是文章后的省略符号,默认是"..."你可以用

<?php $this->excerpt(180,''); ?> 

将其定义为空字符串,然后在【阅读全文】后面加上...我个人觉得这样好看一点。
Te多数调用语句都有类似的参数,随意组合一下,说不定会有惊喜呢。

22,评论输出:

<?php $comments->author(true); ?>//输出评论人昵称,参数true为带链接的,false为不带链接的; 
//ps.其实还有一个参数,类型也是布尔,作用是是否带noFollow 
<?php $comments->excerpt(18, '...'); ?>//输出评论摘要,第一个参数是要截取的长度,第二个是截取后的字符串; 
<?php $comments->permalink(); ?>//获取当前评论链接,木有参数; 
<?php $comments->title(); ?>//获取当前评论标题,同样木有参数; 
<?php $comments->dateWord(); ?>//输出词义化日期,就是输出“3小时前”、“三天前”之内的; 
<?php $comments->gravatar(); ?>//调用gravatar输出用户头像,有两个参数,第一个是头像尺寸,默认是32,第二个是默认输出的头像。 

23,分离文章的评论和引用通告:

打开模板的 comments.php 文件,找到通篇的核心语句:

<?php $this->comments()->to($comments); ?>这条语句控制着评论的类型,他的参数如下: 
语句 注释
<?php $this→comments()→to($comments); ?>  显示全部(默认)  
<?php $this→comments('comment')→to($comments); ?>  只显示 comment  
<?php $this→comments('trackback')→to($trackbacks); ?>  只显示 trackback  
<?php $this→comments('pingback')→to($pingbacks); ?>  只显示 pingback 
为了分开,我们开始对 comments.php 做如下修改,首先只显示评论:

<?php $this->comments('comment')->to($comments); ?><!-- 关键 --> 
<?php if ($comments->have()) : ?> 
 <ol> 
 <?php while ($comments->next()) : ?> 
 <li id="<?php $comments->theId() ?>"> 
  <div class="comment_data"> 
   <?php $comments->gravatar(32, '', '', 'avatar'); ?> 
   <span><?php $comments->author() ?></span> Says:<br /> 
   <?php $comments->date('F jS, Y'); ?> at <?php $comments->date('h:i a'); ?> 
  </div> 
  <div class="comment_text"><?php $comments->content() ?></div> 
 </li> 
 <?php endwhile; ?> 
 </ol> 
<?php endif; ?>然后输出 pingback,pingback 并不需要那么多的展示内容,假设只展示标题和日期:
<?php $this->comments('pingback')->to($pingbacks); ?><!-- 关键 --> 
<?php if ($pingbacks->have()) : ?> 
 <h3>Pingbacks</h3> 
 <ol> 
 <?php while ($pingbacks->next()) : ?> 
  <li id="<?php $pingbacks->theId() ?>"> 
   <?php $pingbacks->author() ?> <?php $pingbacks->date('F jS, Y'); ?> 
  </li> 
 <?php endwhile; ?> 
 </ol> 
<?php endif; ?>如果你要显示 trackback,也可以按如上的修改。 

24,Typecho文章标题字数限制

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

其具体作用:边栏文章单行显示;因有时边栏标题过长而换行时会使页面排版或动态效果有不完美的地方,此法便可解决。

有错误或者有添加的请回复。