thinkcmf如何理解皮肤模板页面对应关系
发布于 作者:苏南大叔 来源:程序如此灵动~利用thinkcmf二次开发,做皮肤页面是个非常大的重要工作。说白了,这个工作就是用thinkcmf的方式套页面。本篇文章中,苏南大叔就简单的先抛砖引玉一下,看看如何新建一个基于thinkcmf的页面。
确定要修改的页面html文件
一般来说,可以通过页面url,就可以确认theme中的html页面。因为正常情况来说,thinkphp的url都基本上都是类似这样的:/<module>/<controller>/<action>
。对于一个项目来说:
<module>
是可能会省略掉的,一个项目有且仅有一个模块的<module>
可以省略。一般的时候,面向用户的模块的<module>
会设置为默认模式,从而在url中省略掉。<controller>
这个,一般来说,不会有什么差异。除非你配置了路由。<action>
,如果被省略掉的话,很有可能就是index
。一般来说,不会被省略掉。
通过上述的url,在实际的源码中,就可以在<module>
文件夹中,找到<controller>
文件,然后打开对应的<controller>
文件后,就可以找到函数名为<action>
的代码段。
下面重点来了:在这个代码段的最后,我们可以找到下面的类似语句。$this->display();
或者return $this->fetch()
之类的语句。一般都是这个<action>
的最后一句话。这里,你就可以确定无疑的找到对应的模板文件了,也就是你需要修改的theme皮肤文件。
下面是thinkphp的官方说明链接:
- tp3 display:http://document.thinkphp.cn/manual_3_2.html#template_display
- tp3 fetch: http://document.thinkphp.cn/manual_3_2.html#template_fetch
- tp5 display&fetch: https://www.kancloud.cn/manual/thinkphp5/118114
如果相关参数为空的话,那么一般都是加载默认的view模板,一般来说,就是你的项目theme目录下面的<controller>/<action>.html
文件,或者<controller>_<action>.html
文件。而thinkcmf下面的默认皮肤只是<controller>.html
。具体的表现形式,是与下面的设置有关的。
如果参数不为空的话,那么就看根据系统设置不一样,具体的写法也不一致。您可以查看官方函数说明,不过,一般都很容易直接看出对应要渲染的view文件的。
如果您需要的页面,是个thinkcmf
所没有的页面。那么还需要您建立对应的/<module>/<controller>.php
文件,在里面再新建<action>
方法。不过,这个不在本文的讨论范围内。
thinkcmf
的基本页面结构
在早期的thinkcmf
中,页面是有个总的页面layout的,然后每个html加载对应的layout设置后,再单独设置不同的区块内容即可,这也是苏南大叔喜欢的页面组成模式。也就是extend+block
的代码结构。
但是目前的thinkcmf
中,并不是这样组成的,并没有使用layout
,也没有使用extend + block
的方式,而是使用了include
的方式。苏南大叔个人表示不是很喜欢。下面是thinkphp5中的相关函数说明:
- layout: https://www.kancloud.cn/manual/thinkphp5/125013
- block: https://www.kancloud.cn/manual/thinkphp5/125014
- include: https://www.kancloud.cn/manual/thinkphp5/125009
- thinkcmf layout: https://www.kancloud.cn/thinkcmf/doc/266532
- thinkcmf extend + block: https://www.kancloud.cn/thinkcmf/doc/266533
具体的页面构成语句
在thinkcmf
的默认theme中,我们可以看到基本的结构。
其中一个非常要注意的地方就是:在public/head.html
中,有着下面的语句:
<taglib name="app\portal\taglib\Portal"/>
<include file="public@function"/>
在app\portal\taglib\Portal.php
中,有一些thinkcmf所特有的标签,这些自定义标签,可以用在我们的view文件中,是很有用的标签。当然,你也可以添加自己的标签到对应文件中。
在当前theme文件夹下面的public/function.html
中可以定义一些php函数,然后可以用到模版页面中,这个功能很鸡肋,不要也罢。在html文件里面,这样编写php函数,真心是无比怪异。
这些函数,可以移步到app/<module>/common.php
文件中,这个common.php
文件是自动加载的,并且还是在php文件里面编写php函数,看起来更加正常一些。
所以,对于thinkcmf来说,public/themes/<theme_name>/
文件夹下面,会有几个<module>
文件夹(默认就是portal文件夹),同级有个public
文件夹。<module>
文件夹下,会有很多个controller
文件夹,每个controller
文件夹内部,会有很多个<action>.html
文件。
每个<action>.html
文件,会include
到public
文件夹下面的一些<公共html代码片段>.html
的文件。如果在<action>.html
文件使用到thinkcmf的一些自定义标签的话,还需要在页面中加载对应的taglib的php文件,例如:
<taglib name="app\portal\taglib\Portal"/>
自定义常量
在上述截图中,我们看到了__TMPL__
这个thinkcmf自定义的常量,具体的文件路径是:simplewind/cmf/controller/HomeBaseController.php
,这个位置定义的,当然,对于后台的模板文件来说,这个变量是定义在AdminBaseController.php
文件中的。
更多官方说明,可以点击这里查看:https://www.kancloud.cn/thinkcmf/doc/266591 。
结论
在上一篇文章中,苏南大叔讲述了如何新建并识别一个皮肤目录,本文中讲述如何新建皮肤中的一个模板,下一篇文章中,苏南大叔将要讲述,在模板中,如何使用thinkcmf的标签函数。
更多thinkcmf的经验文章,请点击这里查看:https://newsn.net/tag/thinkcmf/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。