资料均从网上收集,然后作了整理。。
注意,由于dedecms的模版TAG功能,其实是类似于XML,所以在使用的时候,一定要象XML一样正确闭合,否则,该区块将不变解析
一般来说,我们所使用的DEDECMS模板代码样式有如下几种:
XML/HTML代码
- {dede:标记名称 属性='值'/}
- {dede:标记名称 属性='值'} {/dede:标记名称}
- {dede:标记名称 属性='值'} 自定义样式模板(InnerText),即底层模板 {/dede:标记名称}
- 如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。
1、标记通用特性
(1) 短标记:
{dede:tagname.name/} 等同于 {dede:tagname name='' /}
{dede:global.name/} 外部变量 等同于 <?php echo $name; ?> 【其实这里应该是全局变量】
{dede:var.name/} var数组 等同于 <?php echo $_vars['name']; ?>
{dede:field.name/} field数组 等同于 <?php echo $fields['name']; ?>
{dede:cfg.name/} 系统配置变量 等同于 <?php echo $cfg_name; ?>【cfg已经是全局了,所以这个标签其实也可以写成{dede:global.cfg_name/}】
(2) 块标记:
{dede:tagname}
循环代码:
{/dede:tagname}
(3)include 语法:
{dede:include file=''/}
{dede:include filename=''/}
{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}
例如: {dede:include filename="head.htm"/}
对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录
2、函数和PHP语法
if 条件
仅支持 if ,else ,else 直接用{else}表示,但不支持{else if}这样的语法 ,一般建议模板中不要使用太复杂的条件语法,如果确实有需要,可以直接使用 php 语法。
XML/HTML代码
- {dede:if 条件}
- a-block
- {else}
- b-block
- {/dede:if}
条件中允许使用 var.name 、 global.name 、 field.name、cfg.name 表示相应的变量。
如:
XML/HTML代码
- {dede:if field.id>10 }
- {/dede:if}
php 代码块:
XML/HTML代码
- {dede:php
- php 代码
- /}
或
XML/HTML代码
- {dede:php}
- php代码
- {/dede:php}
......其它还在整理中
先介绍一下array_diff函数
JavaScript代码
- array_diff -- 计算数组的差集
- 说明
- array array_diff ( array array1, array array2 [, array ...] )
-
-
- array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
-
- 注意: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
-
- 注意: 注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array1[0], $array2[0]); 检查更深的维度。
-
- ::::::本函数在 PHP 4.0.4 中是坏的! :::::
在网站的实际应用中,我们可能会用到TAG(标签),对标签的更新可能也会经常遇到,当然添加了之后不修改另作别论。
比如,我们为一条新闻添加了如下标签:新闻,CGX,艳照门 (开个玩笑,呵呵),存入数据库后,应该是在tag表里存入类似于这样的数据
XML/HTML代码
- id newsid tagname
- 1 1 新闻
- 2 1 CGX
- 3 1 艳照门
其中id是自增字段,newsid是新闻的ID,tagname是刚刚存入的标签(存的时候以逗号分隔)。
然而现实总是残酷的,XXX总局规定我们不得把“艳照门”作为关键字了,于是,我们不得不更新TAG(当然,直接从数据库里delete from table where tagname='艳照门'更方便,但这里我是在举例),于是新的TAG就可能变成了:新闻,CGX,其他图片。更新的时候,我们要从数据库里把“艳照门”去除掉,但怎么知道我把原来的标签“艳照门”删除了呢?这时候,array_diff就有用了。
PHP代码
- <?php
-
- $_POST['origin_tags'] = '新闻,CGX,艳照门';
-
- $_POST['news_tags'] = '新闻,CGX,其他图片';
-
- $origin_tags = explode( ',', trim( $_POST['origin_tags'] ) );
- $new_tags = explode( ',', trim( $_POST['news_tags'] ) );
-
- $diff_tags = array_diff( $origin_tags , $new_tags );
-
- echo "<pre>";
- print_r ( $diff_tags ) ;
- echo "</pre>";
-
- ?>
看,我们把“艳照门”打印出来了,于是,下一步我们就可以执行:DELETE FROM tablename WHERE news_id = 2 AND tagname = '艳照门';来删除这条记录,同时将新的数据插入数据库(新的数据判断重复可以采用array_intersect,使用方法与array_diff类似,这里就不提了,当然更方便的方法是把:$diff_tags = array_diff( $origin_tags , $new_tags ); 改为 $diff_tags = array_diff( $new_tags , $origin_tags );)
更新数据的方法有很多种,我在这里只是提出一个解决方案。希望大家能够给出其他更好的建议。