结合RXThinkCMF_TP6记录自定义标签的使用
结合RXThinkCMF_TP6记录自定义标签的使用
下载了一套开源后台框架项目RXThinkCMF_TP6,安装了下居然少了mysql文件,进官网看貌似要收费,好吧,看看代码也好。代码内有一处用到了TP6自定义标签,跟了下代码看到是在admin项目下config的view.php引入的,如下:
// 预先加载的标签库
'taglib_pre_load' => implode(',', [
\app\admin\widget\Widget::class,
\app\admin\widget\Common::class,
\app\admin\widget\Upload::class,
\app\admin\widget\Item::class,
\app\admin\widget\Editor::class,
\app\admin\widget\Layout::class,
\app\admin\widget\Icon::class,
\app\admin\widget\Checkbox::class,
\app\admin\widget\City::class,
\app\admin\widget\Date::class,
]),
在admin\widget下建了一系列自定义的标签,此处只研究第一个Widget类;
NO1:当定位到\app\admin\widget目录时,下面木有找到相关的类,一个都木有,好吧,只能先结合官网的html页面分析下了
NO2:首先在widget目录下新建文件Widget.php,内部初始内容为:
<?php
namespace app\admin\widget;
use think\template\TagLib;
class Widget extends Taglib{
// 标签定义
protected $tags = [
];
}
NO3:在admin项目的view目录下可以看到在meun视图下的index.html有使用到,如下:
<div class="layui-input-inline" style="width: auto;">
{widget:query name="查询"}
{widget:add name="添加菜单"}
{widget:dall name="批量删除"}
{widget:expand name="全部展开"}
{widget:collapse name="全部折叠"}
</div>
可以看到是使用的自闭合标签,开启官方页面可以看到显示的是一些BUTTON按钮
NO4:在标签定义内添加自定义的标签如下:
protected $tags = [
// 标签定义: attr 属性列表 close 是否闭合(0 自闭合 1 闭合) alias 标签别名 level 嵌套层次
'query' => ['attr' => 'name', 'close' => 0],
'add' => ['attr' => 'name', 'close' => 0],
'dall' => ['attr' => 'name', 'close' => 0],
'expand' => ['attr' => 'name', 'close' => 0],
'collapse' => ['attr' => 'name', 'close' => 0],
'edit' => ['attr' => 'name', 'close' => 0],
'delete' => ['attr' => 'name', 'close' => 0],
'addz' => ['attr' => 'name', 'close' => 0],
];
NO5:添加自定义标签替换的内容,以query为例:
public function tagQuery($tag)
{
$name = $tag['name'];
$icon = '';
$parseStr = "<button class='layui-btn' lay-submit lay-filter='searchform' id='search'><i class='layui-icon'>".$icon."</i>".$name."</button>";
return $parseStr;
}
button类名等相关信息可以在官方页面找到,其他替换方法类似该定义
NO6:此时刷新前端页面将显示对应的按钮部分