演示标签的使用:

列表显示

注:对于文章而言,channel_id为栏目编号,id为内容编号,用法类似。

栏目channel_id可以是一个固定值:3

{content@list cid="3"}

id可以是多个值固定值,相当于in(ids)

{channel@list id="2,4,6"}或{channel@list id="in(2,4,6)"}

栏目id:2其他

id一个表达式 gt|eq|lt|egt|elt|neq|<|>|=|!=|in|notin|not in|like|not like|notlike|between|not between|notbetween

避免使用尖括号> <,因为有些编辑器会识别为html标签起止符号,代码解析错误报警告

{content@list cid="gt 5"}

注意:id只能一个条件,不支持and多条件写法,如 id="gt 3 and lt 10"是错误的

多个条件时,可以使用where

{content@list where="id gt 30 and id elt 40"}

限制输出数量,如num="3"

指定排序方式,如order="sort asc"

指定循环变量,如item="hello",默认为@前面的名称,如content。在某些情况下多列表嵌套时指定不同名称可 能有用。

指定查询字段,如fields="id,title,description",默认是所有字段。谨慎使用,有的字段在表间关联时需要。

使用缓存,如cache="index_news_7,3600"

{list cid="7" num="3" order="sort asc" item="hello" cache="index_news_7,3600"}

分页列表,使用pagesize参数后,列表会分页显示,如pagesize="5",每页显示5条记录

注意区分numpagesize,使用num不产生分页链接

控制分页导航位置,正常情况下,分页连接跟随列表后面,可以使用links="no"列表下面的分页链接暂不显示

然后可以在其他地方输出分页链接

{content@list id="between 70 and 90" pagesize="5" links="no"}

这里不输出分页了

列表赋值,可以使用assign="mylist",将列表内容赋值给变量mylist,可以在其他地方输出

{content@list where="title like '%经济%'" num="3" assign="mylist"}

输出上面的分页: 输出上面的列表:

单条内容读取

读取id100的文章内容

{content@get id="100"}

栏目id:<!--无数据-->|文章id:<!--无数据-->| |发布日期:<!--无数据--> |栏目名称:无

读取id5的栏目

{channel@get id="5"}

栏目id:<!--无数据-->
类似的,支持类型写法的标签还有:

栏目

支持表达式:id=""parent_id=""where=""【语法糖pid=""cid=""都相当于parent_id=""

{channel@list}

{channel@get}

内容

支持表达式:id=""channel_id=""where=""【语法糖cid=""都相当于channel_id=""

{content@list}.....{/content@list}

{content@get/}

广告

支持表达式:id=""position_id=""where=""【语法糖cid=""都相当于position_id=""

{banner@list}.....{/banner@list}

{banner@get/}

广告位

支持表达式:id=""where=""

{position@list}.....{/position@list}

{position@get/}

合集

支持表达式:id=""where=""

{tag@list}.....{/tag@list}

{tag@get/}

标签格式

list为闭环标签

{content@list ...}

循环内容html

{/content@list}

get非闭环标签

{content@get ...}

内容html

{content@get .../}

内容html

注意cid=""是语法糖

content@中等同于:channel_id=""

channel@中等同于:parent_id=""

banner@中等同于 position_id=""

{content@list cid="3"}相当于{content@list channel_id="3"}

where中会尝试替换cid为真实字段,但因为where表达式复杂,可能会替换失败。所以使用where条件时,最好使用真实字段名。

{content@list where="channel_id=3"}

直接使用list或get

其实常用的数据表,直接使用上面的标签就可完成了。但对于没有支持的其他表,可以支持使用list或get标签。

使用其他表,需要指定表名,如table="cms_content"

表达式只支持主键id="xxx"where="xxx",不支持cid="xxx"

list

循环变量默认为item,其他使用item="xxx"指定

{list table="cms_content" where="channel_id in(6,7,8)"}

get

变量默认为data,其他使用assign="xxx"指定

{get table="cms_channel" id="6"}

栏目id:<!--无数据-->

默认模板

内容列表:默认{content@list}就行,pagesizeorder等参数会自动注入后台配置,若不使用注入的,可添加对应参数覆盖

内容详情:数据会自动注入$content,不需要再使用{content@get}标签重复获取

动态页面

动态页面用于是复杂,不特定的内容,自由发挥

模板存放在dynamic目录下

dynamic/test.html目录下,访问路径为http://yourhost.com/e/test

单页

单页必须绑定一篇文章,访问路径层级更高,一般用于突出显示的内容

about.html,访问路径为http://yourhost.com/about.html

而普通内容访问路径为http://yourhost.com/content/a1.html

助手方法

1、字符截取more($str,$len,$more='...更多')

如截取标题长度为36,若长度超过36,则显示...更多

使用方式1(管道):{$content.title|more=36,'...更多'}

或方式2(方法):{:more($content.title,36,'...更多')}

2、获取指定栏目的url:channel_url($id)

如:输出id为3的栏目的url:{:channel_url(3)}:#

3、获取指定内容的url:content_url($id)

如:输出id为3的内容的url:{:content_url(3)}:/d/3.html

4、也可以自定义其他助手方法,例如对应thinkphp框架,可以在`app/common.php`(tp5为:`application/common.php`)中定义方法

    <?php
    function text666($text){
        return $text .' 666';
    }
    

模板中使用:{:text666('hello')},输出为:hello 666

5、当然也可以使用内置方法:thinkphp内置方法

模板主题

主题存放在网站根目录的/theme/

系统自带默认主题为default,生成路径为/,访问路径为http://yourhost.com/

可以开发多个主题,如mobile,生成路径为/m/,访问路径为http://yourhost.com/m/

主题目录结构如下:

    ├─channel           [存放栏目模板]
        ├─default.html  [栏目默认模板,未绑定模板的栏目使用此模]
        └─....          [创建更多模板并绑定栏目]
    ├─common            [公共片段,如头部、底部]
        ├─footer.html   [底部]
        ├─header.html   [头部]
        ├─layout.html   [基础模板,继承模式时有用]
        ├─navi.html     [导航]
        └─....          [创建更多页面]    
    ├─content           [存放内容详情模板]
        ├─default.html  [详情默认模板,未绑定模板的栏目使用此模]
        └─....          [创建更多模板并绑定栏目]
    ├─dynamic           [存放动态解析模板]
        ├─demo.html     [演示页面]
        ├─search.html   [搜索页面]
        ├─tag.html      [合集页面]
        └─....          [创建更多页面]    
    ├─static            [存放主题静态资源]
        ├─css           [样式]
        ├─images        [图片]
        ├─js            [脚本]
        └─....          [其他目录、文件]
    ├─about.html        [单页:关于我们,可绑定一篇文章]
    ├─contact.html      [单页:联系我们,可绑定一篇文章]
    ├─index.html        [首页]
    └─....              [创建更多单页]
    

页面类型说明

公共片段:供其他页面引用,使用{include}标签引用

栏目模板:默认会注入当前栏目变量`$channel`,不需要再使用{channel@get}重复读取了。直接使用{$channel.name}等标签输出栏目信息即可。使用{content@list}读取所属文章列表,一般不需要额外的参数,栏目id,分页大小、排序等都会注入栏目后台设置。若需要个性化再按需使用相关参数设置。

详情模板:默认会注入当前内容变量`$content`,不需要再使用{content@get}重复读取了。直接使用{$content.title}等标签输出文章信息即可。

动态解析模板:使用比较自由,可做栏目列表也可做详情页,或者更复杂的组合。不像[栏目模板]和[详情模板]会有默认的注入或行为,纯看标签的写法。

单页:可绑定已篇文章,绑定后和详情模板用法一样。若不绑定文章,用法和动态解析模板用法一样。

不同页面类型的区别:

详情页:访问路径为二级:/d/xx.html,全部可生成静态化。

栏目页:访问路径为二级:/c/xx.html 或 /c/xx-p.html。
可以静态化第一页,如/c/4.html/c/c4-1.html可静态化,[/c/4-2.html....]不可静态化。

动态解析页:不可静态化,每次访问都要动态解析,并可自动注入url参数。访问路径为二级:/e/xx.html

    
    如url:`/e/test?a=1&b=2` 动态解析页:
    可在模板中使用:
    {content@list cid="$a" num="$b"}
    {/content@list}
    安全事项,注入的参数会进行基本的strip_tags()过滤,并且查询条件不会拼接字符串。
    但从谨慎的角度考虑,对于一些明确类型的参数,可进行类型转换,
    如上面的参数a、b可明确为数字类型,可以使用php的`intval()`函数进行转换:
    {content@list cid=":intval($a)" num=":intval($b)"}
    {/content@list}
    
    

单页:绑定文章的可静态化,不绑定文章的不可静态化。访问路径为一级:/xx.html(与首页index.html同级)

页面路径个性化

栏目页默认为:[id],[id]代表栏目编号,id为2的栏目访问路径为`/c/2.html`,假如栏目名称为[新闻],那可以把[id]修改为news,那此栏目的路径为`/c/news.html`。

详情页默认为:[id],[id]代表文章编号,id为100的文章访问路径为`/d/100.html`,假如此文章属于[新闻]栏目,那可以把[id]修改为news-[id],那此文章的路径为`/d/news-100.html`

以上操作在栏目编辑的【生成设置】中操作

静态资源

符串替换写法:/theme/default/css/style.css

或相对路径:../static/css/style.css./static/css/style.css

以上路径会被替换为/theme/xxx/css/style.css

不能使用绝对路径,如:/static/css/style.css

约定规则,静态资源应放在主题所在目录的/static/目录下,并在此修改,然后发布到/theme/xxx/目录下。

不要直接修改/theme/xxx/里面的静态资源,以免被覆盖。

如你不想这样,可以像上面说的使用绝对路径/static/css/xxx.css

模板字符串替换

1、当前模板的静态资源路径@static@:/theme/default/

2、当前模板的首页路径@site_home@:/

调试

在页面任意位置使用标签:{show@vars}将显示当前页面环境变量,这些变量在套标签时也许有用。

如当页面前环境变量为:

        
        
{
    "__site_home__": "/",
    "__wconf__": {
        "name": "滇运安物流系统",
        "keywords": "滇运安物流系统,滇运安,滇运安物流系统,物流",
        "description": "滇运安物流系统",
        "copyright": "Copyright © 2025. 滇运安物流系统 All rights reserved.",
        "click_make_static": "123",
        "click_write": "10",
        "use_layout": "1",
        "make_static": "0"
    },
    "__set_page_path__": "",
    "__page_type__": "dynamic",
    "html_id": "3",
    "tpl_id": "1"
}

结尾

thinkphp:模板标签使用文档

演示页面不需要请删除此文件(/theme/xxx/dynamic/demo.html),重新生成路由(后台菜单-模板管理-生成路由)