制作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; ?>
评论(0)