ZblogPHP主题配置制作入门(一)

做了这么久的ZblogPHP主题,发现自己还有一个比较重要的缺陷,那就是“主题配置”的制作。说起来主题配置,我们这些不懂得PHP的小白可以通过“博士”的“主题插件制作器”来完成。但由于是通过插件来做的,很多东西还是不那么完善,所以,逼迫我又不得不回到原点:学习主题配置文档的制作。今天我就分享下我的学习成果吧!

概念:
说起来“主题配置”,其实就是一个捆绑在主题上的插件。所以,我们学习”主题配置”制作时,可以通过学习一个简单的插件来开蒙。我选择的插件是:Gravatar头像。这个插件的原理很简单,将发表评论时显示的评论者头像进行替换,当这个头像有相应的Gravatar头像时,则替换成Gravatar头像,没有就返回默认头像。如果你不知道什么是Gravatar头像,去百度吧。

入门工作:
我们先把这个插件包完整的下载下来,应该在文件\zb_users\plugin文件夹下有个Gravatar的文件架,里面就四个文件:

logo.png:这个就是插件的图片,我们做主题配置不会遇到这个;

plugin.xml:这是插件的规范说明(详情)。主题配置中,这个文件被省略了,因为ZblogPHP调用主题配置时直接调用了theme.xml,所以这个我们也不需要太了解。

include.php:插件模块。一个主题模块中可有可无的,但如果你要使用主题配置,就必须创建这个一个模块,并将它命名为“include.php”。模块中,重点定义了开关插件、插件挂靠方式、插件作用等内容。后续我们会详细讲解。

main.php:插件设置模块。这个在主题配置模块中,就是我们点开后的设置界面了。里面是通过PHP程序直接写的一些格式代码,我后面会简单讲解下。

拆解:
我们可以把wik插件开发部分、Gravatar头像插件中的include.php、main.php和Metro主题下的include.php、editor.php这5个文件同时打开,以备拆解分析。使用Metro主题作为参照,是因为它是里面使用了比较简单的代码,看起来还能理解的原因。它是默认主题之一,可以直接找到相应主题包下载打开即可。

先来看Gravatar头像插件中include.php文件:

<?php
 
#注册插件
RegisterPlugin("Gravatar","ActivePlugin_Gravatar");
 
#插件挂靠方式
function ActivePlugin_Gravatar() {
    Add_Filter_Plugin('Filter_Plugin_Mebmer_Avatar','Gravatar_Url');
}
 
#保存设置插件
function InstallPlugin_Gravatar(){
	global $zbp;
	$zbp->Config('Gravatar')->default_url='http://cn.gravatar.com/avatar/{%emailmd5%}?s=40&d={%source%}';
	$zbp->Config('Gravatar')->source='{%host%}zb_users/avatar/0.png';
	$zbp->Config('Gravatar')->local_priority=0;	
	$zbp->SaveConfig('Gravatar');	
}
#关闭插件
function UninstallPlugin_Gravatar(){
	global $zbp;
	$zbp->DelConfig('Gravatar');
}
#插件所执行的功能
function Gravatar_Url(&$member){
    ....
}

第一部分注册插件,这在wiki里面有描述(插件开发第5点),是固定的格式。这也很容易理解,就是告诉ZblogPHP程序,我们新动作了。同样的,主题配置中,也使用了相同的开头方式。

第二部分挂靠插件,这在wiki中也有相应描述(插件开发第4点)。因为插件开发接口很多,有什么前台、后台、评论、会员之类区分,所以有一个比较完整的系统接口列表。而我们做主题开发呢,通常只要和定义后台顶部导航栏接口(Filter_Plugin_Admin_TopMenu)打交道。后面的Gravatar_Url应该和下面插件执行功能对应起来看,这段文字也很容易被翻译出来了,大家根据实际需要套用即可。

第三部分保存设置插件,这部分需要和对应的main.php文件一起看,里面的需要是使用的PHP的基础语法和wiki里面提及的调用方法(插件开发第8点)。global是全球函数调用(PHP语法)。Gravatar头像插件有三个可以调整的变量,一个是替代的Gravatar头像地址,一个是没有头像时返回的默认头像,另外一个是是否会员优先的开关按钮。那么对应看来,中间三个zbp就是定义的这三点了。最后一个SaveConfig,通过英文我们也可以知道,是保存参数。打开Metro主题下的include.php,我们再简单对比下,理解基本正确。不过它加了一个“当主题有效时”的逻辑判断,这很重要!

第四部分关闭插件,对应Metro主题下的include.php,因为它在设置插件时有相应的前提条件,所以它的关闭插件其实就是个样子,所以这点对于我们做主题配置来说,没什么作用。

第五部分插件执行的功能,这点自我领悟吧。

Metro主题下的editor.php文件和Gravatar头像插件中main.php文件是同样一个意思,取决你在配置主题theme.xml时设置的名称,所以呢,我们就直接拿editor.php来开涮吧。editor.php文件:

<?php
require '../../../zb_system/function/c_system_base.php';
require '../../../zb_system/function/c_system_admin.php';
 
$zbp->Load();
$action='root';
if (!$zbp->CheckRights($action)) {$zbp->ShowError(6);die();}
if (!$zbp->CheckPlugin('metro')) {$zbp->ShowError(48);die();}
$blogtitle='Metro主题配置';
 
If ($zbp->Config('metro')->HasKey('version')){
	$strlayout=$zbp->Config('metro')->custom_layout;
	$strBodyBg=$zbp->Config('metro')->custom_bodybg;
	$strHdBg=$zbp->Config('metro')->custom_hdbg;
	$strColor=$zbp->Config('metro')->custom_color;
	$aryBodyBg= explode('|',$strBodyBg);
	$aryHdBg= explode('|',$strHdBg);
	$aryColor= explode('|',$strColor);
}
 
$a=Array("","左","中","右") ;
$r="?" . rand();
 
require $blogpath . 'zb_system/admin/admin_header.php';
require $blogpath . 'zb_system/admin/admin_top.php';
?>
    略,中间是一段Table的配置界面,对应内容自己看。
<?php
require $blogpath . 'zb_system/admin/admin_footer.php';
RunTime();

这段文件里面很多内容我也没吃的准,就让我猜猜看吧。首先这个是可视界面,那么既然是PHP的模式,它必然会把头、尾、身段拆开来写。通过这个PHP代码,我们大体了解了,后台“主题配置”的结构原理:上面是c_system_base.php,c_system_admin.php两个大头,中间是加载主题配置的一系列参数,最后呢,再加上admin_header.php,admin_top.php两个身段,中间一大段落的table,最后呢,加载个尾巴admin_footer.php。

中间加载的主题配置语法方式和插件开发所提及的一样,至于其他的东西,等我看明白再和大家分享吧。有需要的朋友ctrl+D保存下,对你后续开发大有用哦!