zblog模板 php,ZBlogPHP自定义模板的名称与类型

用了zbp这么久,在开发zbp主题的时候,困扰开发者的大难题,就是如何自定义输出模板的名称与类型。

在zbp早期,是没有对模板读取备注中的模板名称,在最近的版本,zbp添加了模板中的模板名称识别。

例如:在index.php中添加{* Template Name: 首页模板 *}

添加以后,在编辑文章或者分类时,就能在模板中,看到模板的名称了。

不过呢,这种方法是不能控制模板在对应类型的编辑中出现的,属于比较简单的通用解决方法。

66cdc57ba7fe07371859758560eb99bc.png

其实,早在今年年初,我就有研究过关于模板自定义名称和类型的解决方法,只是一直未正式使用和对外发布,仅限在几名开发者中交流过。主要起因,也是因为当时猪瞎指挥我弄备注,结果不能识别,出错了。

这套解决方案的主要构思:

为模板添加备注,然后正则读取这段备注,获得设置的名称与类型;

接入编辑页面的输出接口,加上一个模板选择下拉,同时,利用JS去掉页面上的模板选择下拉(或者,JS替换option也可以),避免出现选择模板失败。

构思有了,那么再解析一下,如何添加这些代码。添加这些代码,最大的坑点,正则识别模板的名称与类型备注,还好,这里有YT(瑜廷)大神的帮助。

1、模板注释部分:{*

type : "article"

name : "测试模板"

*}

注意,如果要使用这套解决方法,请务必参照这个格式添加,保证后面的正则能正常识别。

在这段注释中,第一行是type(类型),表示模板文件属于什么类型的模板;第二行是模板的名称,支持正常的中英文等字符。

2、正则识别部分:preg_match_all('/\{\*\s*type\s*?\:\s*?\"([a-z,\d,_,-]+)\"\s*?name\s*?\:\s*?\"(.*?)\"\s*?\*\}/',$value,$temp);

if (isset($temp[1][0])&&isset($temp[2][0])) {

$array[$key] = array(

'type' => $temp[1][0],

'name' => $temp[2][0],

);

}

代码是我从测试案例中复制出来的,$value来自系统自动读取的$zbp->templates遍历(正常屏蔽了一些系统默认不显示的模板文件)。

正则匹配出名称与类型后,我们利用生成下拉列表时,传入的编辑页面类型,生成不同的下拉列表。

3、生成模板选择的下拉函数/**

* 生成模板的option选项

* @param {string} $default 当前采用模板

* @param {string} $type 生成对应类型 默认all全局

*/

function default_create_template_select($default,$type='all') {

global $zbp;

default_LoadTemplate();

function judgeType($tempType,$reqType) {

if ($tempType=='hide') {

return false;

}

if ($tempType == $reqType || $tempType=='all') {

return true;

}

if (($reqType == 'article'||$reqType=='page')&&$tempType=='single') {

return true;

}

if (($reqType == 'category'||$reqType=='tag'||$reqType=='author')&&$tempType=='list') {

return true;

}

return false;

}

$str = '';

$str .= '' . $zbp->lang['msg']['none'] . ''; // 无

foreach ($zbp->Config('default')->template_diy as $key => $value) {

if (judgeType($value['type'],$type)) {

if ($default==$key) {

$str .= '' . $value['name'] . '';

} else {

$str .= '' . $value['name'] . '';

}

}

}

echo $str;

}

这段就是生成模板下拉列表函数,主要是判断页面类型,以便在不同类型的编辑页面输出对应模板。

其它就相对简单了,接入对应的编辑页面接口,插入模板下拉选择。

4、接入编辑页面:// 接入文章编辑页的3号接口

function default_Article_Edit_Respons3() {

global $zbp,$article;

default_Article_CustomMeta_Response3($article);

}

// 3号接口需要展示的内容

function default_Article_CustomMeta_Response3(&$object) {

global $zbp;

$type = (GetVars('act','GET')=='PageEdt')?'page':'article';

echo

'

 模板

';

default_create_template_select($object->Template,$type);

echo   '

';

// 用js移除原有的下拉选择器

echo '

$("#template").remove();

';

}

下拉框几乎是复制系统下拉框,由于没有删除系统的模板下拉框的方法,我便是用JS删除系统原有下拉选择器。这里,对JS比较熟悉的童鞋,可以用JS更好的更换模板下拉选择的内容。

好了,如此这般,就能够为你开发主题自定义模板,添加对应的名称与分类啦。关于类型定义,我简单设定几个常见类型

all全部可用|hide全部隐藏|single文章与单页通用|article文章|page单页|list列表页通用|category分类|tagTag标签|author用户页

当然,这里也把演示文件放上来,大家可以去下载来看看。有一个需要注意的地方,在ZBP1.5后,$zbp->templates 改为 $zbp->template->templates

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值