最近在使用Maupassant主题的时候,偶然发现了一个小的样式Bug,主要就是页面头部导航在个别页面的展示效果会出错。因为调用的头部文件都是相同的,而样式却不同,所以问题基本是出现在页面判断。打开模版头部文件header.php第44行位置。

<a class="<?php if($this->is('index')): ?>current<?php endif; ?> <?php if($this->is('post')): ?>current<?php endif; ?>" href="<?php $this->options->siteUrl(); ?>"><?php _e('博客'); ?></a>

发现这段代码中,cho大佬只判断了首页、内容页;所以其他页面,包括标签、栏目、搜索页都会出现一些样式问题。只需要加上几个对应页面的判断语句就好了。

<a class="<?php if($this->is('index')): ?>current<?php endif; ?> <?php if($this->is('post')): ?>current<?php endif; ?> <?php if($this->is('tag')): ?>current<?php endif; ?> <?php if($this->is('category')): ?>current<?php endif; ?> <?php if($this->is('archive')): ?>current<?php endif; ?>" href="<?php $this->options->siteUrl(); ?>"><?php _e('博客'); ?></a>

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

$this->is('index');  //判断首页
$this->is('archive'); //判断archive
$this->is('single'); //判断为阅读页面page+post
$this->is('page'); //判断独立页面page
$this->is('post'); //判断文章页面post
$this->is('category'); //判断分类页面
$this->is('tag'); //判断标签页面
$this->is('front'); //判断文章列表页面
$this->is('attachment'); //判断附件页面

当你在typecho后台设置→阅读中设置将某个独立页面作为首页后,那么原来的首页(文章列表页)就不能用$this->is('index');去判断了,而是使用$this->is('front');进行判断。

分类,页面,文章还可以这样判断

$this->is('category', 'default'); //判断分类缩略名等于default
$this->is('page', 'start'); //判断独立页面缩略名等于start
$this->is('post', 1); //判断文章cid等于1

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

完整使用实例

<?php if($this->is('index')): ?>
//如果是首页就输出内容
<?php else: ?>
//不是首页输出内容,留空即可。
<?php endif; ?>

<?php if ($this->is('post')) : ?>
如果是文章页面就会显示这里的文字
<?php endif; ?>

那么,有哪些页面是可以供判断的呢:

index:判断当前页是否为主页
archive:判断当前页是否为文章归档页,比主页,分类文章页,标签文章页,日期归档文章页
category:判断当前页是否为分类文章页,第二个参数传入具体分类slug name,比如default等等,就可以判断具体是哪个分类
tag:判断当前页是否为标签文章页,第二个参数传入具体标签slug name,比如typecho等等,就可以判断具体是哪个标签
date:判断当前页是否为日期归档文章页,第二个参数传入year,month或者day,就可以判断是否为按年,按月还是按日归档
single:判断当前页是否为内容页,比如文章页,独立页面,附件显示页
post:判断当前页是否为内容页,第二个参数传入文章id,就可以判断具体是哪篇文章
page:判断当前页是否为独立页面,第二个参数传入页面slug name比如about,就可以判断具体是哪则独立页面
attachment:判断当前页是否为附件,第二个参数传入附件id,就可以判断具体是哪个附件

判断为当前文章列表页的第几篇文章,并单独输出内容

<?php if ($this->sequence == 1): ?>
如果是当前文章列表页的第1篇文章,就会输出该内容
<?php endif; ?>

判断登录

<?php if ($this->user->hasLogin()): ?>
此处内容登录可见
<?php endif; ?>

判断程序版本号
前台用输出版本号

<?php $this->options->Version(); ?>

就能输出typecho的版本号,而他的格式是这样的

1.1/17.11.15

1.1是他的版本,而后面的该版本的日期,所以说即使大家都是1.1,后面日期不一样的话你们的程序代码上就会有区别。

那么假设你的模板不兼容某个版本的typecho时,为何不做个温馨提示呢?

<?php
$tver = substr($this->options->->Version , 0 , 3);
if($tver>1.0){
echo '该模板可能不兼容大于1.0版本的typecho';
}
?>

也可以根据后面的日期进行判断,总之判断完就能搞各种有趣的事情。
在functions.php用$this->options->Version可能没有用,没用的话试试下面这个,应该可以:

Typecho_Widget::widget('Widget_Options')->Version

或者

$options = Helper::options();
$options->version();

参考原文:
易学堂:https://www.qqeg.cn/Typecho/17.html
Yotaku Blog:https://yotaku.net/243.html