home-code

示例❤源码



### 标签规范

* 先来个示例:
  - 显示5条新闻  
  {tag:ntop=[List][modid,news][limit,5]}  
  `<li>`id:&#123;=$v['did']}, 标题:&#123;=$t_title},   
  行下标:&#123;=$i_v}, 行数据:<?php dump($v); ?>`</li>`  
  &#123;/tag:ntop}

* 标签规范
  - 代码格式:  
  &#123;tag:tagName=[tagType,rowArr][attr1,val1][attr2,val2][...]}  
  `<div>`里面放html代码`</div>`  
  &#123;/tag:tagName}

* 格式说明
  - `tagName` 为自定义标签名,2~18个字母数字下划线组成的字符,以字母开头;  
    同一页最好不要有相同的,否则少部分情况下可能有冲突;
  - [tagType,rowArr] 为标签类别和行内数组,紧接在`tagName=`之后,  
    标签类别`tagType` 可以是 List(列表), Page(分页), One(单行), Type(类别列表), Push(推送), Free(自由调用);  
    行内数组`rowArr` 默认为`v`可省略,可自定义如[List,v2],[Page,p];
  - [attr1,val1] 为一组标签属性,可以有多组属性,且无顺序之分;

* 标签内变量
  - 在标签内部,整个列表数组为`$T_tagName`,如得到列表的记录数可用<?=count($T_tagName)?>
    其中`tagName`是自定义的标签名;
  - 标签中默认行内数组为`$v`,假设里面有字段`did`,`title`,`detail`;  
    调用如:&#123;=$v['title']},设置行内数组为v2,p等,则调用就用&#123;=$v2['title']},&#123;=$p['title']};
  - 或在字段前加上前缀`t_`后直接调用字段如:&#123;=$t_did},&#123;=$t_title},&#123;=$t_detail};
  - 多标签嵌套,$t_前缀会覆盖,请自定义行内数组调用;
  - 在列表循环中,循环下标默认为`$i_v`,其中`v`是可自定义的行内数组变量名;


下面一一介绍各类标签,和详细属性。


### 4大标签

#### List:列表标签

* 用于调用 [文档/资讯] | [互动/评论] | [用户/会员] [广告/连接] 列表
  - Demo代码  
  &#123;tag:list1=[List][modid,news][limit,3]}  
  &#123;title($t_title,12,$v)}  
  &#123;/tag:list1}

* 属性列表
  - 属性:`modid`为后台配置的模型ID,在特定模板中,可用`$this->mod`表示当前默认模型,  
    如:`[modid,news]`, `[modid,person]`, `[modid,$this->mod]`。
  - 属性:`join`为【文档/资讯】中附加详情内容,其它模型无效  
    如:`[join,detail]`。
  - 属性:`stype`为【文档/资讯/广告】中的栏目 或 【用户/会员】中的等级,  
    如:`[stype,cvip]`, `[stype,nsys]`,  
    如果为:`[stype]`不设置具体值,则从url中取值如:`stype=nsys`。
  - 属性:`show` 显示开关,默认不设置,值显示有效(审核)的资料即:[show,1],  
    如需显示隐藏的请设置`[show,0]`, 
    如需显示所有资料请设置[show,all]。
  - 属性:`pid` 关联pid,假设后台设置:[nrem]新闻评论 关联模型是 [news]新闻动态;  
    如:`[pid,2018-88-9988]`, 表示新闻id=`2018-88-9988`的评论,或用变量`[pid,$did]`。
  - 属性:`inids` 主键id列表,文章详情页,有`$rel_doc`变量来自关联id字段  
    如:`[inids,$rel_doc]`则找出关联的文章。
  - 属性:`keywd` 关键字条件,  
    如:`[keywd]`,参数值来自url中`keywd=xxx`,然后like比较的结果;  
    如:`[keywd,mycat]`,查询like `%mycat%`的结果;  
    适合:【文档/资讯】/【用户/会员】/【分类/组系】数据调用;【用户/会员】中比较字段是`mname`,其他模型比较字段是`title`;
  - 属性:`xxx(field)` 字段条件,拼接后台定义的字段条件:格式为`[字段名,值]`   
    如:`[brand]`,`[hinfo]`,省略值则从url中取如:`brand=huawei`;  
    如:`[hinfo,pindao+home+zhuanti,in]`,hinfo取列表中的值之一;
  - 属性:`where` 条件子句,设置值为自定义sql的where子句,  
    如:`[keywd,$wstr]`,其中`$wstr`为:<?php `$wstr="pid='2004-33-9999' AND xxx='yyy'"`; ?>
  - 属性:`order` 排序,  
    排序字段:默认不设置时,【用户/会员】是按添加时间;其它模型默认是主键;  
    排序方式:默认是倒序,或从url中`odesc=0`得到,或指定方式如`[order,m.did,1]`,`[order,m.did,0]`;  
    提示:【分类/组系】不使用排序;默认表别名为`m`(main-主表)。
  - 属性:`limit`,分页(列表)大小,如:`[limit,8]`。
  - 属性:`offset`,偏移量,如:`[offset,2]`。
  - 属性:`cache` 缓存,默认不配置,可以设置数字,单位是分钟;   
    如:`[cache,4h]`-4小时,`[cache,7d]`-7天,`[cache,30]`-30分钟。
  - 注意:[广告/连接]另有调用方式;(后续改进)点击属性可附加到演示标签上。

#### One:单条数据标签

* 用于调用 [文档/资讯] | [互动/评论] | [用户/会员] 一行数据 
  - Demo代码  
    `<`?php $whr="m.did='2015-9g-n7s1'"; ?`>`  
    &#123;tag:o1=[One][modid,cargo][join,detail][where,$whr]}  
    &#123;=$t_title} --- &#123;=$t_detail}  
    &#123;/tag:o1}

* 属性列表
  - 属性:`modid`为后台配置的模型ID,在特定模板中,可用`$this->mod`表示当前默认模型,  
    如:`[modid,news]`, `[modid,person]`, `[modid,$this->mod]`。
  - 属性:`join`为【文档/资讯】中附加详情内容,其它模型无效,  
    如:`[join,detail]`。
  - 属性:`inids` 主键id列表  
    如:`[inids,$did]`则找指定id=$did的文章。
  - 属性:`where` 条件子句,设置值为自定义sql的where子句,  
    如:`[keywd,$wstr]`,其中`$wstr`为:<?php `$wstr="did='2004-33-9999'"`; ?>
  - 注意:因为详情页,系统默认把当前行资料行已经解析出来了,所以此标签用的不是很多,其他属性参考List标签。

#### Type:类别列表标签

* [分类/组系] 列表
  - Demo代码  
    &#123;tag:t1=[Type][modid,indep]}  
    &#123;=$t_kid},&#123;=$t_title}  
    &#123;/tag:t1}

* 属性列表
  - 属性:`modid`为后台配置的模型ID,在Type标签中,只能使用[分类/组系]相关模型,  
    如:`[modid,brand]`-品牌, `[modid,ftype]`-行业, `[modid,local]`-镇区。
  - 属性:`idfix` id层级关系,Type标签特有属性,  
    如`[idfix,all]`,所有分类;
    如`[idfix,top]`,所有顶级分类;
    如`[idfix,sun:p1012]`,p1012的子分类(不含子分类下的分类);
    如`[idfix,sall:p1012]`,p1012的子分类(含子分类下的分类);
  - 提示:如果分类有两层或以上,需要设置此`idfix`属性,其他情况通常省略。

* 效果与源码
  - List,Type,One 标签效果与源码
  - [Demo效果]({=PATH_PROJ}/demo.php?tptag-tags), [Demo代码]({=PATH_PROJ}/demo.php?home-code&fp=demo/tptag/tags.htm)
  - 提示:查看Demo效果时,必要时请`查看源代码` 对比

#### Page:分页标签

* 用于调用 [文档/资讯] | [互动/评论] | [用户/会员] [广告/连接] 分页
  - Demo代码  
  &#123;tag:dlist=[Page][modid,news][limit,3]}  
  &lt;dl class="news-list">  
  &lt;div>列表头:共&#123;=$\_cbase['page']['pcnt']}页/&#123;=$\_cbase['page']['prec']}行资料&lt;/div>  
    &#123;:row}  
    &lt;dt>&lt;a href='&#123;surl($this->mod.".$t_did")}'>&#123;title($t_title,60,$v)}</a>&lt;/dt>  
    &lt;dd>&lt;i class="atype">&#123;sopt($t_catid,$this->mod,0)}&lt;/i>  
      &lt;i class="click">&#123;=$t_click}次</i>  
      &lt;i class="atime">&#123;stime($t_atime,min)}&lt;/i>&lt;/dd>  
    &#123;if (($i_v+1)%5==0) } &lt;hr> &#123;/if}  
    &#123;/row}  
  &lt;/dl>  
  &lt;div class="clear">&lt;/div>  
  &#123;php echo $\_cbase['page']['bar']; }  
  &#123;/tag:dlist}

* 属性与说明
  - Page的所有属性,与List相同,请参考List标签属性;
  - 分页标签,多了一个分页条为:`$_cbase['page']['bar'];`;
  - List,Page标签,默认是吧标签里的所有代码循环,标记`{:row}`,`{/row}`可自定义循环体;
  - 本标签综合了一些调用实例,如标题截取,类别显示,时间显示,使用$i_v判断每5行一个分割线等。
  - 提示:同一页不能有两个分页标签

* 效果与源码
  - Page 标签效果与源码
  - [分页效果]({=PATH_PROJ}/demo.php?news--so), [分页代码]({=PATH_PROJ}/demo.php?home-code&fp=demo/news/mtype.htm)
  - 提示:查看Demo效果时,必要时请`查看源代码` 对比


### 标签嵌套

* 需求:每个新闻类别下显示3条新闻列表:  
  - Demo代码  
  &#123;tag:tps=[Type,u][modid,news]}  
  &lt;h3>&#123;=$u['kid']} / &#123;=$u['title']}&lt;/h3>  
  &#123;tag:dlist=[List,v][modid,news][stype,$t_kid][limit,3]}  
  &#123;=$v['did']}, &#123;=$t_did}, &#123;=$t_title}&lt;br>  
  &#123;/tag:dlist}  
  &#123;/tag:tps}  
  - 嵌套标签中,请设置不同标签名,上述为:`tps`,`dlist`
  - 嵌套调用中,为避免当前行数组名变量冲突,请指定行内数组名,上述为:`u`,`v`

* Demo代码效果
  - [Demo效果]({=PATH_PROJ}/demo.php?news), [Demo代码]({=PATH_PROJ}/demo.php?home-code&fp=demo/news/mhome.htm)
  - 提示:查看Demo效果时,必要时请`查看源代码` 对比


### 其它标签

#### Free:自由数据标签

* 作用
  - 用于第三方数据,跨库调用
  - 以下假设调用第三方数据库(好房通房源数据)
  - 设置外部数据源连接信息:`imhaoft`如下:

* 外部数据源设置
  - 文件:/root/cfgs/boot/cfg_db.php
  - demo配置(在文件尾部添加类似代码)  
  `$_cfgs['imhaoft'] = $_cfgs;`
  `//$_cfgs['imhaoft']['db_host'] = 'localhost';`  
  `$_cfgs['imhaoft']['db_name'] = 'imhaoft'; // 数据库名(pdo连接不使用)`  
  `$_cfgs['imhaoft']['db_prefix'] = 'hft_';`  
  `$_cfgs['imhaoft']['db_suffix'] = '';`

* Free:调用`lease`(出租)信息
  - Demo代码:  
  &#123;tag:dlist4=[Free][dbkey,imhaoft][modid,lease][pgbar,1][order,LEASE_ID][limit,3]}  
  &#123;=$t_LEASE_SUBJECT} &lt;br>    
  &#123;/tag:dlist4}
  - 出租表名:lease,里面的字段与好房通api一致

* 属性与说明
  - 属性:`dbkey` 外部数据源,配置见上   
    如:`[dbkey,imhaoft]`,`[dbkey,phpcms]`。
  - 属性:`modid` 第三方数据模型(库)名称  
    如:出租:`[modid,lease]`,出售:`[modid,sale]`。
  - 属性:`pgbar` 是否分页   
    如:默认不配置,部分页,如需分页配置为`[pgbar,1]`。
  - 属性:`where` 条件子句,设置值为自定义sql的where子句,  
    如:`[keywd,$wstr]`,其中`$wstr`为:<?php `$wstr="xxx='yyy'"`; ?>
  - 属性:`order` 排序,  
    如`[order,m.LEASE_ID]`,`[order,m.SALE_ID,0]`;   
  - 属性:`limit`,分页(列表)大小,如:`[limit,8]`。
  - 属性:`offset`,偏移量,如:`[offset,2]`。

#### Push:数据推送标签

* 推送作用 
  - Push:数据推送标签,用于很自由的设置一组链接,完全自定义内容!
  - 用法很简单,倒是解析下为什么出来一个这么样的标签?!

* 源于现实
  - 如果一个新闻列表,有1w条新闻,推荐5条显示,用标签方便的做出来了;
  - 有一天,这5条要自定义排序,order一下,但可能效率下降了很多,如果资料多了,order位置也够你设置的;
  - 再有一天,公司出了一款重量级产品,有个专题介绍,不是新闻,boss要求第一条新闻位置,显示这个专题链接,  
    怎么有这个需求,不合理吧?但这是boss的要求...,你就临时处理一下模板,if,else,html...写死了一个链接;
  - 又有一天,有个很重要的客户合作,要第二条新闻位置显示客户的一个链接???
  - 估计我也疯了,宁愿辞职!
  - 但是,在辞职之前,可尝试用这个标签搞定?!

* 后台设置
  - 入口:后台 >> 广告 >> 手动推送
  - 根据需要,增加一条资料,注意可修改id,以方便调用;
  - 要哪些字段,由cfgs配置json数组,非常自由;
  - 注意填写:Max/Page:为可设置的资料的行数。

* 资料调用
  - Demo代码:  
    &lt;?php  
      $res=tagPush::gets('cargo-push8,news-push2,hpic-push5');  
      dump($res['cargo-push8']);   
      dump($res['news-push2']);   
    ?>

* 资料管理
  - 后台管理,可选取已有资料,也可自由填写数据;
  - 可连接到前台,可视化管理;


### 标签助手

* 此助手可界面化diy生成标签,大力推荐使用! 
  - [现在体验/root/tools/exdiy/tagor.php]({=PATH_PROJ}/root/tools/exdiy/tagor.php) 

* 提示:
  - 需要本地(localhost, 10.\*, 127.\*, 192.\*, ::1, FE80:\*, FEC0:\*)地址打开;
  - 或 登录管理员 后 才可使用。


<!--  

--- 
--- 


* 提示
  - 常规【广告/连接】调用,不建议使用这种方式调用,请使用js调用。


* 用于xx
  - Demo代码  
* 属性列表


- 属性:`xxx`   
    如:`yyy`。

--> 

-End-