浮生偷闲·诗画共赏|游浙里x网易游戏天下IP 给各位少侠送专属旅游福利啦!
黄公望耗时7年,奔波于富春江两岸,挥毫洒墨重现两岸风光,绘成旷世巨作《富春山居图》。时过境迁,数百年后的今天,富春江沿途的景色是否依然如画中一般壮丽呢?...
2024-11-13
刚刚接触织梦,就从基础看起,希望大家不要见笑,多多鼓励啊 呵呵。
在测试的时候发现静态模板类里面的 。
{dede: array=”数组名”} [field:key/] [field:value/] {/dede:}这本标签总不能正常使用,执行后总是返回 [field:key/] [field:value/] [field:key/] [field:value/] ….n个“[field:key/] [field:value/] ”而不是正在的数据,在网上搜了搜,结果大部分都是转载织梦系统的原装帮助文档里面的资料,没有说明此问题,这里有人也遇到了一样的问题,本来想回复他来,可是我是新人,他所在的版块我无权回复,就发一个新帖了,呵呵,扯远了,书归正传!
为什么会有这样的效果呢,数组名设置后是可以遍历的,而且遍历的次数也是对了,就是数据不能正常显示
肯定是哪里解析错误了,
顺着思路往下找,
最后在/.class.php文件中的第578行和579行(版本不一样可能不同,在该文件的()方法体里面)找到了答案!
$istr .= (“/\[field:key([\r\n\t\f ]+)\/\]/is”,$k,$this->CTags[$i]->);
$str .= (“/\[field:value([\r\n\t\f ]+)\/\]/is”,$v,$istr);
问题就在正则表达式上,主要是这部分([\r\n\t\f ]+)
说明在 [field:key 与 /] 之间可以包含换行、制表符、空格,但是不能什么都没有,
也就是说 [field:key/]是不对的
必须是
[field:key /](空格的)
或
[field:key /](制表符的)
或
[field:key
/](换行的)
类文件
/.class.php
这个文件是 V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)
一、模板语法
织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的更大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
1、织梦模板引擎的代码样式有如下几种形式:
{dede:标记名称 属性='值'/}
{dede:标记名称 属性='值'}{/dede:标记名称}
{dede:标记名称 属性='值'}自定义样式模板(){/dede:标记名称}
提示:
如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。
2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1) 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{dede: name='变量名称'}{/dede:}
或
{dede: name='变量名称'/}
其中变量名称不能加 $ 符号,如变量 $ ,应该写成 {dede: name=''/} 。
(2) 用来输出一个数组,形式为:
{dede: array='数组名称'}[field:key/] [field:value/]{/dede:}
(3) 引入一个文件,形式为:
{dede: file='文件名称' ='是否为dede板块模板(yes/no)'/}
对文件的搜索路径为顺序为:绝对路径、文件夹,CMS安装目录,CMS主模板目录
3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:
{dede:标记名称 属性='值' ='("参数一","参数二","@me")'/}
其中 @me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:
{dede:field name='' ='("%Y-%m-%d %H:%M:%S","@me")'/}
4、织梦标记允许有限的编程扩展。
格式为:
{dede: ='yes'}
$aaa = @me;
@me = "";
{/dede:}
@me 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板的内容,因此需编程的标记只能使用默认的。
二、解析方式
在 .class.php 里面有四个类
class 属性结构表述
class 属性解析器
class 标签结构表述
class 标签解析器
使用解析类解析模板时一般经过下面的步骤
1、初始化:
$dtp = new ();
2、载入模板/模板字符串:
$dtp->(模板文件(绝对路径)); //会生成缓存,第二次不需解析模板
或
$dtp->(字符串);
3、给标签赋值
($dtp->CTags as $tid=>$ctag) {
//判断ctag的名称和属性,并给赋不同的值,通常用函数处理
if($ctag->=='mytag') $dtp->($tid, ($ctag) );
在上面例子中,直接把名称为 mytag的标签转交给 函数处理, 里判断$ctag的各个属性,返回不同内容即可。
在 V5.3版本中,通常除了field、list等专用标签之外,凡arc.*开头的类解析的文件,标签都是对应该 / 的源码的,这个由系统进行了自动的映射。
4、显示或保存为HTML
$dtp->();
或
$dtp->(静态文件名);
对于二次开发人员而言,不大需要知道模板具体解析方式,不过应该十分清楚CTag这个类的结构,从而判断标签不同属性进行处理。
class
var $=FALSE; //标记是否已被替代,供解析器使用
var $=""; //标记名称
var $=""; //标记之间的文本
var $=0; //标记起始位置
var $=0; //标记结束位置
var $=""; //标记属性描述,即是class
var $=""; //标记的值
var $TagID = 0;
//获取标记的名称和值
()
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,请告知我们,本站将立刻删除涉嫌侵权内容。
相关文章
黄公望耗时7年,奔波于富春江两岸,挥毫洒墨重现两岸风光,绘成旷世巨作《富春山居图》。时过境迁,数百年后的今天,富春江沿途的景色是否依然如画中一般壮丽呢?...
2024-11-13
在当今数字化的时代,网站已经成为了企业、个人乃至各种组织展示自身形象、提供信息和服务的重要平台。而成品网站源码则为搭建各类网站提供了便捷且高效的途径。成品网...
2024-11-13
➤➤欢迎收看伊洛纳小课堂!➤➤伊洛小课堂专为冒险家指点迷津(*^▽^*)许多勇士刚玩伊洛纳的都会很蒙,因为地图太大,也太乱,想要的东西连体式都没有,不用慌...
2024-11-13
cf悦在惊动活动已经正式开始了,这是游戏最新的活动只要你是心悦会员或者是京东会员,那么即可登陆CF悦在京东即可领取CF黄金武器礼包,下面就跟小编一起来看活动详情...
2024-11-13
热评文章
2022年专属火龙之神途新版
1.80龙神合击传奇
1.76永恒小极品+5复古传奇
1.76双倍魔天大极品第三季单职业
1.76神梦传奇三职业
1.80聖统圣统合击三职业传奇