如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

利用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皮肤文件。

thinkcmf如何理解皮肤模板页面对应关系 - theme_php

thinkcmf如何理解皮肤模板页面对应关系 - theme_folder3

下面是thinkphp的官方说明链接:

如果相关参数为空的话,那么一般都是加载默认的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中的相关函数说明:

具体的页面构成语句

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文件,会includepublic文件夹下面的一些<公共html代码片段>.html的文件。如果在<action>.html文件使用到thinkcmf的一些自定义标签的话,还需要在页面中加载对应的taglib的php文件,例如:

<taglib name="app\portal\taglib\Portal"/>

thinkcmf如何理解皮肤模板页面对应关系 - theme_folder

thinkcmf如何理解皮肤模板页面对应关系 - theme_folder2

自定义常量

在上述截图中,我们看到了__TMPL__这个thinkcmf自定义的常量,具体的文件路径是:simplewind/cmf/controller/HomeBaseController.php,这个位置定义的,当然,对于后台的模板文件来说,这个变量是定义在AdminBaseController.php文件中的。

thinkcmf如何理解皮肤模板页面对应关系 - theme_const

更多官方说明,可以点击这里查看:https://www.kancloud.cn/thinkcmf/doc/266591

结论

在上一篇文章中,苏南大叔讲述了如何新建并识别一个皮肤目录,本文中讲述如何新建皮肤中的一个模板,下一篇文章中,苏南大叔将要讲述,在模板中,如何使用thinkcmf的标签函数。

更多thinkcmf的经验文章,请点击这里查看:https://newsn.net/tag/thinkcmf/

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。