GVKun编程网logo

DedeCms 常用函数参考:静态源码类(html静态源码)

3

在本文中,我们将为您详细介绍DedeCms常用函数参考:静态源码类的相关知识,并且为您解答关于html静态源码的疑问,此外,我们还会提供一些关于DedeCMS5.7标签tag长度限制的修改办法、DED

在本文中,我们将为您详细介绍DedeCms 常用函数参考:静态源码类的相关知识,并且为您解答关于html静态源码的疑问,此外,我们还会提供一些关于DedeCMS 5.7 标签tag长度限制的修改办法、DEDECMS JSON数据生成 DEDECMS JSON接口制作、dedecms list 判断 每隔3次输出内容、dedecms sql标签中调用其它变量值功能修改的有用信息。

本文目录一览:

DedeCms 常用函数参考:静态源码类(html静态源码)

DedeCms 常用函数参考:静态源码类(html静态源码)

 

DedeCms V5.3 常用函数参考:静态源码类

类文件
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 strtolower($this->TagName); } function GetValue() { return $this->TagValue; } //下面两个成员函数仅是为了兼容旧版 function GetTagName() { return strtolower($this->TagName); } function GetTagValue() { return $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; } }  


本文章网址:http://www.ppssdd.com/code/6295.html。转载请保留出处,谢谢合作!

DedeCMS 5.7 标签tag长度限制的修改办法

DedeCMS 5.7 标签tag长度限制的修改办法

 

大家都知道默认情况下,dedecms的标签tag长度是12个字节,也就是6个汉字,哪知道在织梦5.7中,也没有改掉这个烦恼的事,可能这个设定是基于效率问题考虑的,如果更新的时候设置的长度超过这个字符,系统就会不显示这个tag。有时候需要根据实际情况修改tag的长度,下面是办法,测试可用。

1.修改数据库中表dede_tagindex 和dede_taglist的tag字段属性:varchar(12)修改为varchar(255) 。

这个步骤需要直接操作数据库。

2.修改文件:/include/helpers/archive.helper.php

查找:if(isset($tag[12]) 修改为:if(isset($tag[255]) ;

再将if(isset($tag[20]) 修改为:if(isset($tag[255]) 。

本文章网址:http://www.ppssdd.com/code/13690.html。转载请保留出处,谢谢合作!

DEDECMS JSON数据生成 DEDECMS JSON接口制作

DEDECMS JSON数据生成 DEDECMS JSON接口制作

 

json数据格式可以方便不同站点之间进行数据调用引用,当然我们的DEDECMS也可以实现全站数据生成JSON供其他站点调用,代码很简单,主要用到include/json.class.php。

织梦本身是自带json标签的,调用办法:

{dede:json url='' cache=300}
[field:id/]-[field:title/]<br/>
{/dede:json}

  这个标签调用例子在织梦手册里已经给我们提供了,url是一个远程json接口地址,这个接口文件json.php代码 里面,*后的返回必须是把数据通过json_encode($feeds)系统函数,进行json编码后,通过echo或print()函数来打印出来,这二点是必须的,然后,在前台我们就可以通过$.ajax()或$.getjson()来获取数据。织梦系统给我们提供了一个json类,在include/json.class.php文件里面,也就是是说,我们在对php文件转换json编码,就有了二种办法:

  1.直接用php系统给我们提供的系统函数,json_encode(),我建立大家用这个,即简单又省事,既然,php系统给我们提供了,我们可以不用织梦系统提供的。

  2.就是用织梦系统提供的,encode(),在使用前,首先引入json.class.php,即:

   require_once(DEDEINC.'/json.class.php');
   $json = new Services_JSON(SERVICES_JSON_SUPPRESS_ERRORS);

   echo $json->encode($reval);

  $reval这个变量是我们从数据库或其它地方得到的,一般是一个二维数组,例如下:

  Array (
  [0] => Array ( [id] => 95 [title] => 原图设计)
  [1] => Array ( [id] => 113 [title] => ssssssssssss)
  [2] => Array ( [id] => 111 [title] => hjhj )
  [3] => Array ( [id] => 110 [title] => ssssssssssss)
     )

  经echo 以后,显示的内容如下所示。

  [
   {"id":"95","title":"\u539f\u521b"},
   {"id":"113","title":"ssssssssssss"},
   {"id":"111","title":"hjhj"},
   {"id":"110","title":"ssssssssssss"}
  ]

  这是经过encode()或用json_encode()后,显示的内容。即,用中括号括起来的,几个json数据,这个数据回给请求的$.ajax()或$.getjson(),并由其对这个数据进行处理,显示我们相要的结果。

知道了原理,接下来就是详细实现办法,如下:

首先新建一个PHP文件,命名为json.php(也可以新建个文件夹命名为api,然后PHP命名为index.php,这样调用的时候就只需要你的域名/api这样的方式调用),用于作为被调用的API接口,代码如下:

<?php

$cfg_NotPrintHead = false;

header("Content-Type: text/html; charset=utf-8");

include_once (dirname(__FILE__)."/../include/common.inc.php");

error_reporting(E_ALL || ~E_NOTICE);

require_once(DEDEINC.'/json.class.php');

$reval = array();

$dsql->SetQuery("SELECT id,title FROM `dede_archives` ORDER BY id DESC LIMIT 0,10");

$dsql->Execute('me');

while ($row = $dsql->GetArray('me')) {

$row['title'] = gb2utf8($row['title']);

$reval[] = $row;

}

$json = new Services_JSON(SERVICES_JSON_SUPPRESS_ERRORS);

echo $json->encode($reval);

?>

这里代码有进行了GBK转UTF8的操作,所以兼容GBK版的DEDECMS

调用办法:

{dede:json url='域名/json.php' cache=300}

[field:id/]-[field:title/]<br/>

{/dede:json}

把调用代码放到你你需要的地方就行

本文章网址:http://www.ppssdd.com/code/10237.html。转载请保留出处,谢谢合作!

dedecms list 判断 每隔3次输出内容

dedecms list 判断 每隔3次输出内容

 

{dede:list pagesize='12' runphp='yes'} [field:global name=autoindex runphp="yes"](@me%3==0)? @me='输出':@me='';[/field:global] {/dede:list}

花了好几个小时才解决,简直坑T,T

本文章网址:http://www.ppssdd.com/code/12681.html。转载请保留出处,谢谢合作!

dedecms sql标签中调用其它变量值功能修改

dedecms sql标签中调用其它变量值功能修改

 

织梦cms的代码除了自身的功能以外在源码标签调用以及自定义模型等方面确实很差,下面是是用sql标签调用匹配其他参数的代码修改:

一般在新闻页使用sql标签匹配另外一个参数我们会按照以下这样写,但结果输出为空:

{dede:sql sql="select title from `dede_archives` where `title` like '%~pername~%'" db='default'}

  <li><a href='[field:arcurl/]'>[field:title/]</a> </li> 

{/dede:sql}
dedecms源码标签默认编译的结果就是select title from `dede_archives` where `title` like '~%pername%~' 并没有传递进来pername的参数。

此时我们需要对织梦cms的函数进行以下修改:

$sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql);

修改为:(只需把引号去掉就可以实现了)

$sql = str_replace($conditions[0][$key], addslashes($refObj->Fields[$value]), $sql);

或者我们可以复制一份include/taglib/sql.lib.php重命名为likesql.lib.php并将对应代码修改,这样我们可以不影响{dede:sql sql=""}标签而用新的{dede:likesql sql=""}来实现模糊搜索。

本文章网址:http://www.ppssdd.com/code/13636.html。转载请保留出处,谢谢合作!

关于DedeCms 常用函数参考:静态源码类html静态源码的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于DedeCMS 5.7 标签tag长度限制的修改办法、DEDECMS JSON数据生成 DEDECMS JSON接口制作、dedecms list 判断 每隔3次输出内容、dedecms sql标签中调用其它变量值功能修改等相关内容,可以在本站寻找。

本文标签: