其他新闻

其他新闻

dedecms建站顺序(dedecms婕忔礊)

时间:2023-11-26 信途科技其他新闻

刚刚接触织梦dedecms,就从基础看起,希望大家不要见笑,多多鼓励啊 呵呵。

在测试的时候发现静态模板类里面的 。

{dede:foreach array=”数组名”} [field:key/] [field:value/] {/dede:foreach}这本标签总不能正常使用,执行后总是返回 [field:key/] [field:value/] [field:key/] [field:value/] ….n个“[field:key/] [field:value/] ”而不是正在的数据,在网上搜了搜,结果大部分都是转载织梦系统的原装帮助文档里面的资料,没有说明此问题,这里有人也遇到了一样的问题,本来想回复他来,可是我是新人,他所在的版块我无权回复,就发一个新帖了,呵呵,扯远了,书归正传!

为什么会有这样的效果呢,数组名设置后是可以遍历的,而且遍历的次数也是对了,就是数据不能正常显示

肯定是哪里解析错误了,

顺着思路往下找,

最后在include/dedetag.class.php文件中的第578行和579行(版本不一样可能不同,在该文件的AssignSysTag()方法体里面)找到了答案!

$istr .= preg_replace(“/\[field:key([\r\n\t\f ]+)\/\]/is”,$k,$this->CTags[$i]->InnerText);

$str .= preg_replace(“/\[field:value([\r\n\t\f ]+)\/\]/is”,$v,$istr);

问题就在正则表达式上,主要是这部分([\r\n\t\f ]+)

说明在 [field:key 与 /] 之间可以包含换行、制表符、空格,但是不能什么都没有,

也就是说 [field:key/]是不对的

必须是

[field:key /](空格的)

[field:key /](制表符的)

[field:key

/](换行的)

类文件

include/dedetag.class.php

这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)

一、模板语法

织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。

1、织梦模板引擎的代码样式有如下几种形式:

{dede:标记名称 属性='值'/}

{dede:标记名称 属性='值'}{/dede:标记名称}

{dede:标记名称 属性='值'}自定义样式模板(InnerText){/dede:标记名称}

提示:

如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。

2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。

(1) global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:

{dede:global name='变量名称'}{/dede:global}

{dede:global name='变量名称'/}

其中变量名称不能加 $ 符号,如变量 $cfg_cmspath ,应该写成 {dede:global name='cfg_cmspath'/} 。

(2) foreach 用来输出一个数组,形式为:

{dede:foreach array='数组名称'}[field:key/] [field:value/]{/dede:foreach}

(3) include 引入一个文件,形式为:

{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}

对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录

3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:

{dede:标记名称 属性='值' function='youfunction("参数一","参数二","@me")'/}

其中 @me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:

{dede:field name='pubdate' function='strftime("%Y-%m-%d %H:%M:%S","@me")'/}

4、织梦标记允许有限的编程扩展。

格式为:

{dede:tagname runphp='yes'}

$aaa = @me;

@me = "123456";

{/dede:tagname}

@me 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。

此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。

二、解析方式

在 dedetag.class.php 里面有四个类

class DedeAttribute 属性结构表述

class DedeAttributeParse 属性解析器

class DedeTag 标签结构表述

class DedeTagParse 标签解析器

使用解析类解析模板时一般经过下面的步骤

1、初始化:

$dtp = new DedeTagParse();

2、载入模板/模板字符串:

$dtp->LoadTemplate(模板文件(绝对路径)); //会生成缓存,第二次不需解析模板

$dtp->LoadSource(字符串);

3、给标签赋值

foreach($dtp->CTags as $tid=>$ctag) {

//判断ctag的名称和属性,并给赋不同的值,通常用函数处理

if($ctag->GetName=='mytag') $dtp->Assign($tid, mytagvalue($ctag) );

}

在上面例子中,直接把名称为 mytag的标签转交给 mytagvalue 函数处理,mytagvalue 里判断$ctag的各个属性,返回不同内容即可。

在 V5.3版本中,通常除了field、list等专用标签之外,凡arc.*开头的类解析的文件,标签都是对应该 include/taglib 的源码的,这个由系统进行了自动的映射。

4、显示或保存为HTML

$dtp->display();

$dtp->SaveTo(静态文件名);

对于二次开发人员而言,不大需要知道dedecms模板具体解析方式,不过应该十分清楚CTag这个类的结构,从而判断标签不同属性进行处理。

class DedeTag

{

var $IsReplace=FALSE; //标记是否已被替代,供解析器使用

var $TagName=""; //标记名称

var $InnerText=""; //标记之间的文本

var $StartPos=0; //标记起始位置

var $EndPos=0; //标记结束位置

var $CAttribute=""; //标记属性描述,即是class DedeAttribute

var $TagValue=""; //标记的值

var $TagID = 0;

//获取标记的名称和值

function GetName()

{

return=https://xintu.xiaoyuani.com strtolower($this->TagName);

}

function GetValue()

{

return=https://xintu.xiaoyuani.com $this->TagValue;

}

//下面两个成员函数仅是为了兼容旧版

function GetTagName()

{

return=https://xintu.xiaoyuani.com strtolower($this->TagName);

}

function GetTagValue()

{

return=https://xintu.xiaoyuani.com $this->TagValue;

}

//获取标记的指定属性

function IsAttribute($str)

{

return $this->CAttribute->IsAttribute($str);

}

function GetAttribute($str)

{

return $this->CAttribute->GetAtt($str);

}

function GetAtt($str)

{

return $this->CAttribute->GetAtt($str);

}

function GetInnerText()

{

return $this->InnerText;

}

}

这样就解决问题了,我测试是可以的。

=============================

希望对需要的人可以解决问题!

扫描二维码推送至手机访问。

版权声明:本文由信途科技转载于网络,如有侵权联系站长删除。

转载请注明出处https://www.xintukeji.cn/xintu/23388.html

相关文章

免费建站系统wordpress(免费建站系统下载)

介绍几个目前市面上比较通用的建站系统,这里推荐的是由PHP语言编写的建站系统。php语言在开发网站的方面有着多种优势,可以说是开发网站最方便的语言之一。而且目前市面上有着众多云虚拟主机是使用php作为...

关键词快速排名推介云速捷6(关键词快速排名软件)

沪深两市主力净流出25.79亿元。医药龙头最受资金宠爱今日沪深两市主力资金净流出规模大幅度缩减,全天净流出25.79亿元。57股的主力净买入超亿元,药明康德获得8.66亿元的主力资金加仓,股价涨停。...

网络建站哪家好(大连网络建站)

相信很多跨境零售卖家及外贸出口企业同我们一样会看到,很多有外贸独立站建站需求的卖家同行们都在咨询和了解,比如作为独立站建站新手应该如何去选择建站系统?想自己做个跨境独立站商城,常见的一些自助建站哪个好...

淘宝关键词排名查询需要哪个(淘宝关键词排名是怎么做的)

生意参谋是淘宝平台推出的专业一站式数据分析工具。生意参谋具备数据分析、问题诊断和优化提升的一体式功能。因此很受淘宝网店运营工作者的欢迎淘宝关键词排名查询需要哪个,同时也是淘宝卖家的得力助手。那么淘宝关...

关于理解网络营销中的价格组合策略的信息

集中营销 D网络营销 13根据承担职能的不同,中间商主要分 恰当的价格 D恰当的地点 28不属于企业文化的作用的是 C。product价格price渠道place推广promotion4个组合营销策略...

网络营销的特点之一严密性,网络营销的特点之一是严密的营销渠道

现如今,网络越来越普及,同样的,网络营销也开始慢慢的普遍,那么网络营销有什么特点呢学习啦小编在这里给大家详细介绍 基本特征 1公平性。网络营销的特点 计算机联网的成本因为网络技术的日渐成熟变得越来越低...

现在,非常期待与您的又一次邂逅

我们努力让每一次邂逅总能超越期待

  • 效果付费
    效果付费

    先出效果再付费

  • 极速交付
    极速交付

    响应速度快,有效节省客户时间

  • 1对1服务
    1对1服务

    专属客服对接咨询

  • 持续更新
    持续更新

    不断升级维护,更好服务用户