制作Typecho主题模板并不困难,只需要熟悉HTML和CSS的基础知识,然后按照嵌套模板的方式来编写代码。只要熟悉Typecho的内部标签,就能快速完成Typecho模板的制作。

Typecho自定义头部信息输出<?php $this->header(); ?>

<?php $this->header('keywords=&generator=&template=&pingback=&xmlrpc=&wlw='); ?>

以上代码即可过滤关键词、程序、模板名称、文章引用、离线写作等信息的输出。

$this->header()参数及方法说明

keywords:关键词
description:描述、摘要
rss1:feed rss1.0
rss2:feed rss2.0
atom:feed atom
generator:程序版本
template:模板名称
pingback:文章引用
xmlrpc:离线写作
wlw:离线写作工具
commentReply:评论回复

等号(=)为空则不输出该项目,各个参数之间使用 “&” 连接。 如果需要自定义rss地址,只填上 rss2=feed订阅地址 即可。

Typecho随机背景颜色标签云

<?php $this->widget('Widget_Metas_Tag_Cloud', 'sort=mid&ignoreZeroCount=1&desc=0&limit=30')->to($tags); ?>
<ul class="tags-list">
<?php while($tags->next()): ?>
    <li><a style="background-color: rgb(<?php echo(rand(40, 255)); ?>, <?php echo(rand(90,255)); ?>, <?php echo(rand(150, 255)); ?>)" href="<?php $tags->permalink(); ?>" title='<?php $tags->name(); ?>'><?php $tags->name(); ?></a></li>
<?php endwhile; ?>
</ul>

参数说明

sort:排序方式为 mid; ignoreZeroCount:忽略文章数为 0 的; desc:是否降序输出; limit:输出数目。

Typecho获取读者墙

<?php
$period = time() - 999592000; // 時段: 30 天, 單位: 秒
$counts = Typecho_Db::get()->fetchAll(Typecho_Db::get()
->select('COUNT(author) AS cnt','author', 'url', 'mail')
->from('table.comments')
->where('created > ?', $period )
->where('status = ?', 'approved')
->where('type = ?', 'comment')
->where('authorId = ?', '0')
->group('author')
->order('cnt', Typecho_Db::SORT_DESC)
->limit(25)
);
$mostactive = '';
$avatar_path = 'http://www.gravatar.com/avatar/';
foreach ($counts as $count) {
  $avatar = $avatar_path . md5(strtolower($count['mail'])) . '.jpg';
  $c_url = $count['url']; if ( !$c_url ) $c_url = Helper::options()->siteUrl;
  $mostactive .= "<a href='" . $c_url . "' title='" . $count['author'] . " (参与" . $count['cnt'] . "次互动)' target='_blank'><img src='" . $avatar . "' alt='" . $count['author'] . "的头像' class='avatar' width='32' height='32' /></a>\n";
}
echo $mostactive; ?>

Typecho归档页面

<?php $this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives);
    $year=0; $mon=0; $i=0; $j=0;
    $output = '<div id="archives">';
    while($archives->next()):
        $year_tmp = date('Y',$archives->created);
        $mon_tmp = date('m',$archives->created);
        $y=$year; $m=$mon;
        if ($mon != $mon_tmp && $mon > 0) $output .= '</ul></li>';
        if ($year != $year_tmp && $year > 0) $output .= '</ul>';
        if ($year != $year_tmp) {
            $year = $year_tmp;
            $output .= '<h3 class="al_year">'. $year .' 年</h3><ul class="al_mon_list">'; //输出年份
        }
        if ($mon != $mon_tmp) {
            $mon = $mon_tmp;
            $output .= '<li><span class="al_mon">'. $mon .' 月</span><ul class="al_post_list">'; //输出月份
        }
        $output .= '<li>'.date('d日: ',$archives->created).'<a href="'.$archives->permalink .'">'. $archives->title .'</a> <em>('. $archives->commentsNum.')</em></li>'; //输出文章日期和标题
    endwhile;
    $output .= '</ul></li></ul></div>';
    echo $output;
?>

自定义页面列表显示条数

在functions.php写一个函数(示例是控制 news 分类下的文章列表显示条数为 10 条)

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

自定义模板

Typecho 自定义模板,一是自定义首页模板;二是自定义页面模板;这两者方法不同,下面具体说明。

自定义首页模板

在当前模板目录下面建home.php,然后在文件的开头加上如下代码:

<?php
/**
 * 自定义首页模板
 *
 * @package index
 */

然后进入后台 设置 -> 阅读 页面,选择“站点首页”中的“直接调用[home.php]模板文件”,保存即可。

自定义页面(page)模板

只需要在当前模板目录下面建你需要的文件,比如 about.php,然后在文件的开头加上如下代码,可以自定义多个页面:

<?php
/**
 * 自定义页面模板 about
 *
 * @package custom
 */

然后进入后台 管理 -> 独立页面 自定义模板下拉菜单内就可以看到。

自定义分类模板

方法一、直接在当前模板目录下建立一个名为 category 的目录(目录可以不同,自定),然后在里面放上以你需要单独做模板分类的缩略名为文件名的 php 文件,比如 default.php,这样,在访问缩略名为default的分类时,它会自动调用这个模板。

方法二、在模板文件中使用 is 语法判断页面

<?php if ($this->is('category', 'default')): ?>
//默认分类模板
<?php endif; ?>
<?php if ($this->is('category', 'category2')): ?>
//分类2模板
<?php endif; ?>

调用某一分类下的文章

<?php $this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to($categoryPosts); ?>

调用相关文章

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

将以上内容粘贴至你想加入相关文章的位置,最后保存即可。

相关文章函数说明和调用方法

$this->related($limits, $type);
$limits 默认值为 5,表示显示的相关文章数量
$type   默认值为 NULL,表示文章的相关方式,只接受 author。当 $type 为 author 时,根据用户显示相关文章;为其他值时,根据标签显示相关文章。

Typecho可以使用is语法判断很多东西,比如

$this->is('index');
$this->is('archive');
$this->is('single');
$this->is('page');
$this->is('post');
$this->is('category');
$this->is('tag');

再比如

$this->is('category', 'default');
$this->is('page', 'start');
$this->is('post', 1);

需要注意的是,后面的参数是分类、页面的缩略名:

<?php if ($this->is('post')) : ?>
    这里就是内容了
<?php endif; ?>