首页 理论教育导入标签库,实现editor编辑器嵌入

导入标签库,实现editor编辑器嵌入

【摘要】:ThinkPHP官方的editor标签位于tp扩展标签库中,在使用前需要在解压包中找到Examples/Tag/Lib/TagLib/TagLibTp.class.php文件,然后将其复制到ThinkPHP/Extend/Driver/TagLib目录,最后在模板中直接嵌入标签即可,如以下代码所示。图6-3 editor编辑器嵌入效果利用同样的原理,读者还可以嵌入其他好用的编辑器,本书17.4.1节就是利用自定义标签实现百度编辑器嵌入的。

前面介绍的标签都是系统内置的标签,ThinkPHP模板引擎标签处理机制借鉴了JSPTag设计思想,提供了灵活的标签扩展驱动。使用标签扩展,开发人员就可以将一些常用的功能代码封装为标签,在使用时就像使用内置标签一样,直接输入标签参数即可完成标签的调用。被封装为标签的代码可以是PHP、JavaScript、HTML等,最终这些代码将被模板引擎转换为模板中可用的脚本代码。下面首先介绍怎样创建自定义扩展标签,然后再讲解怎样在模板中使用自定义标签。

1.创建自定义扩展标签

存放扩展标签的目录位于ThinkPHP/Extend/Driver/TagLib,要创建自定扩展标签需要在该目录下创建相应的类文件。和其他常见类库一样,一个文件类代表一个标签类库,它的命名方式为“TagLib+标签库名称”,文件后缀名为.class.php。为了方便演示,这里将创建一个名为My的标签类库,类库文件名为TagLibMy.class.php。打开TagLibMy.class.php文件,首先定义类库类名,并让其继承于TagLib基类,如以下代码所示。

978-7-111-42852-7-Part02-173.jpg

这样一个名为My的标签类库就可以被系统识别了。只有类库没有标签是没有意义的,所以还需要为该类库制作标签。TagLib类提供了parseXmlAttr扩展接口,该方法能够将数组信息解释为标签所需要的XML属性。为了方便讲解,这里将制作一个简单的logo标签,该标签用于显示网站的logo,共有2个参数,分别为标签的id以及logo的大小类型,步骤如下。

首先在tags属性中定义标签属性(即参数),这里共定义2个属性,如以下代码所示。

978-7-111-42852-7-Part02-174.jpg

如上述代码所示,在tags类成员属性中,定义了一个名为logo的数组,该数组索引键就是标签名称。logo数组的值为关联数组,关联数组内的数组元素决定了标签的功能,其中attr指定了标签的属性(参数),其他的数组元素作用如下。

➢close:标签是否为闭合方式(0闭合1不闭合),默认为不闭合。

➢level:标签的嵌套层次(只有不闭合的标签才有嵌套层次)。

➢alias:标签别名。

attr数组决定了自定义标签能够接收的属性,如果需要多个标签属性,只需要在attr数组项值中定义多个数组元素即可。

定义完标签数据后,接下来还需要定义标签的处理方法。标签处理方法就是一个普通的实例类方法,在该方法内需要使用parseXmlAttr将数组解释成XML数据,如以下代码所示。

978-7-111-42852-7-Part02-175.jpg(www.chuimin.cn)

如上述代码所示,标签的处理方法命名规则为“_标签名”,这是系统的规范。上述代码的功能很简单,就是根据logo标签中的size属性值,返回logo图标。通过上述步骤,一个简单的自定义标签就制作完成了,剩下的就是在模板中使用。

2.使用自定义扩展标签

使用自定义标签和使用系统内置的标签,最大不同之处在于使用自定义标签需要引入标签类库,并且需要声明标签前缀为类库名。引入自定义标签类库需要使用Taglib系统标签,例如引入前面创建的My类库,代码如下所示。

978-7-111-42852-7-Part02-176.jpg

引入扩展类库后,就可以直接使用了,格式为“<类库名:标签名 属性/>”代码如下所示。

978-7-111-42852-7-Part02-177.jpg

通过前面内容的介绍,相应读者已经对扩展标签有了一个清晰的认识,也体验到自定义扩展标签的灵活与方便。在ThinkPHP官方开发包中,提供了众多第三方扩展包,这些扩展包多数都是利用自定义扩展标签来实现的,例如系统提供的富文本编辑器

在模板中使用富文本框是一件轻松的事,ThinkPHP框架本身就提供了editor标签,该标签能够直接在页面中嵌入编辑框。ThinkPHP官方的editor标签位于tp扩展标签库中,在使用前需要在解压包中找到Examples/Tag/Lib/TagLib/TagLibTp.class.php文件,然后将其复制到ThinkPHP/Extend/Driver/TagLib目录,最后在模板中直接嵌入标签即可,如以下代码所示。

978-7-111-42852-7-Part02-178.jpg

editor标签中的id指定与当前页面中textarea互相绑定的id;uploadurl属性指定的了编辑器中图片上传保存的路径;width属性指定编辑器的显示宽度。最终效果如图6-3所示。

978-7-111-42852-7-Part02-179.jpg

图6-3 editor编辑器嵌入效果

利用同样的原理,读者还可以嵌入其他好用的编辑器,本书17.4.1节就是利用自定义标签实现百度编辑器嵌入的。总之,系统提供的标签扩展有效地增强了模板引擎功能,其作用类似于Smarty扩展插件,无论作为界面设计人员,还是后台PHP开发人员,都应掌握。