Dedecms列表页标签list/pagelist使用方法及pagelist的样式 | Specs' Blog-就爱PHP

mikel阅读(1516)

Dede的默认页面中有个list_article.htm页面,这是dede的列表页面。在列表页显示文章的列表,是通过dede的list和pagelist这两个个标签实现的。本文就这两个标签的使用及pagelist的样式进行下详细的说明。

来源: Dedecms列表页标签list/pagelist使用方法及pagelist的样式 | Specs’ Blog-就爱PHP

Dedecms列表页标签list/pagelist使用方法及pagelist的样式

Dede的默认页面中有个list_article.htm页面,这是dede的列表页面。在列表页显示文章的列表,是通过dede的list和pagelist这两个个标签实现的。本文就这两个标签的使用及pagelist的样式进行下详细的说明。

首先介绍下list标签的参数及使用方法:

标签名称:list

功能说明:表示列表模版里的分页内容列表

使用范围:仅列表页模版 list_*.htm

基本语法:{dede:list col=” titlelen=” infolen=” imgwidth=” listtype=” orderby=” pagesize=” orderway=”}{/dede:list}

参数说明:

col=” 内容列数
titlelen=” 标题长度
infolen=” 内容摘要长度
imgwidth=” 缩略图宽度
imgheight=” 缩略图高度
orderby=” 排序方式,有效的排序方式有 senddate、pubdate、id、click、lastpost、postnum,默认为sortrank
pagesize=’20’ 分页大小

底层模版字段:

ID(同id), typeid, sortrank, flag, ismake, channel, arcrank,click,money,title,shorttitle,color,writer,source,litpic(同picname),pubdate,senddate,mid,lastpost,scores,goodpost,badpost,notpost,description(同infos),filename, image, imglink, fulltitle, textlink, typelink,plusurl, memberurl, templeturl,stime(pubdate 的”0000-00-00″格式)

注:list标记除了支持档案表的基本模板变量外,还支持附加表的字段,你可以在模型管理中知道附加表支持列表使用的字段有哪些。

下面介绍pagelist的参数及使用方法:

标签名称:pagelist

功能说明:表示分页页码列表

适用范围:仅列表模板 list_*.htm

基本语法:{dede:pagelist listsize=’5′ listitem=”/}

参数说明:

listsize 表示[1][2][3] 这些项的长度 * 2
listitem 表示页码的样式,可以把下面的值叠加
index 首页
pre 上一页
pageno 页码
next 下一页
end 末页
option 下拉跳转框

例:{dede:pagelist listitem=’index,end,pre,next,pageno’ listsize=’5′ /}

但是有时候直接引用上面的标签的时候,会出现变形问题。因为pagelist本身就有一些样式是在include/arc.listview.class.php定义css样式的。所以如果你不采用默认模板的话,一调用这个标签就容易出现问题。这是因为列表页pagelist的分页标记在v5.1下默认输出这样的样式:

  1. <a href=‘#’>首页</a>
  2. <a href=‘#’>1</a>
  3. <a href=‘#’>2</a>
  4. <a href=‘#’>3</a>
  5. <a href=‘#’>下一页</a>
  6. <a href=‘#’>末页</a>

而在v5.3以后输出样式变成了这样:

  1. <li><a href=“#”>首页</a></li>
  2. <li><a href=“#”>1</a></li>
  3. <li><a href=“#”>2</a></li>
  4. <li><a href=“#”>3</a></li>
  5. <li><a href=“#”>下一页</a></li>
  6. <li><a href=“#”>末页</a></li>

下面是两个解决方法。

方法一:(比较直观的方法,个人感觉此方法最好)

首先把这个标签放在一个容器里

  1. <ul class=‘pagelist’>{dede:pagelist listsize=’5′ /}</ul>

然后定义css:

  1. .pagelist li{ float:left; marginright:3px; liststyletype:none;}

方法二:去掉<li>标签

在include/arc.listview.class.php中删除相应的<li>代码,输出就变成了v5.1的形式了。另外,include/arc.listview.class.php中option的代码注释掉了,恢复就能用了。

DEDECMS自带样式表CSS定义在 /templets/default/style/page.css 中所有涉及到 .dede_pages 的位置,V5.7中大约从第77开始。大家可以把这段CSS复制到自己的样式表中,然后修改成自己想要的样式就行了。

[原创]蚂蚁cms的ueditor上传图片窗口提示Uncaught SecurityError:Blocked a frame with origin错误解决方法

mikel阅读(7830)

最近的蚂蚁CMS的二次开发项目中,出现个奇怪的问题,有些电脑的发布信息的UEditor的上传图片窗口能够正常显示按钮和上传按钮,但是有些电脑的浏览器发布信息的UEditor的上传图片窗口不显示,并提示

“Uncaught SecurityError:Blocked a frame with origin错误”

分析原因:

从问题看开始以为跨域访问的权限问题,设置了ie浏览器和firefox浏览器的安全跨域访问设置,还是没有解决问题,

然后是怀疑UEditor编辑器的问题,于是去了官网查找资料,发现现在的蚂蚁CMS版本低,用的UEditor版本也是低的,替换了新版本的UEditor编辑器,替换了还是不行,

于是开始设置断点,结果发现UEditor的internal.js的断点window.formElement为null,代码如下:


dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
//这里的windwo.frameElement为null

于是加入了为空的判断:


if(window.frameElement)
{
//alert(window.frameElement.id);
dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
}else{

dialog = parent.$EDITORUI[parent.document.activeElement.id.replace( /_iframe$/, '' )];
}

我的电脑浏览器经过firebug的断点可以获取到window.parent的内容,但是客户的window.parent确获取不到

什么问题?于是开始搜索“window.parent 获取不到”找到csdn上的一个帖子

http://bbs.csdn.net/topics/220072908

“iframe页面的js中需要访问window.parent.document,本地运行正常。上传至服务器后,发现window.parent.document不能访问,没有任何错误提示。求解 ”

得到帖子内容的回复的启发:

“这要看一下parent跟self是不是同一个域名下的 ”

JavaScript的dom对象有权限访问的控制,特别是parent和self,opener和self等跨框架的访问。你看下你的window.parent.document域名跟你的域名相同不?你可以显示的使用
<script>document.domain=”你的域名”;</script>来设置父子窗口的域名 ”

怀疑是不是出在iframe的src的url地址的域名问题,结果发现iframe的src直接引用的是如下地址:

“?mod=zhengwu&amp;file=zhengwu&amp;action=add”

这个链接从哪来的?没有域名?然而编辑器中的image上传图片的窗口也是用的iframe但是src却是带域名的完整url的,如下:

“http://www.yuanmax.com/ueditor/dialogs/image/image.html”

难道是这个图片上传窗口的iframe的域名和parent页面的域名不一致?

然后继续查看整个框架页面结构,整体页面结构如下:

看来iframe-wrap的src出了问题,src的地址是”?mod=zhengwu&amp;file=zhengwu&amp;action=add”

那么iframe-wrap的src地址从哪来的?点击左侧的“发布信息”在右侧的”iframe-wrap”显示,代码如下:

<a href=”?mod=zhengwu&amp;file=zhengwu&amp;action=add” target=”iframe-wrap”>发布信息</a>

好了,来源找到了,那么开始解决问题。

解决问题:

1.先找找后台管理的左侧菜单是怎么生成的?于是找到根目录下的后台管理文件:admin.php


if($mod!='index')
{
$modinfo=$moduleobj-&amp;amp;amp;amp;gt;get($mod,'folder');
$adminrole=explode(',',$modinfo['adminrole']);

if($action!='main' && (!$modinfo || (!in_array($_roleid,$adminrole) && !in_array($_userid,$admin_founders))))
{
exit('&amp;amp;amp;lt;script language="JavaScript"&amp;amp;amp;gt;{self.top.location.href="'.ADMIN_FILE.'";}&amp;amp;amp;lt;/script&amp;amp;amp;gt;');
}

$adminmenurole=string2array($modinfo['adminmenu']);
if($adminmenurole && isset($adminmenurole[$action]) && $action)
{
$adminmenurole=explode(',',$adminmenurole[$action]['role']);
if($action!='main' && (!in_array($_roleid,$adminmenurole) && !in_array($_userid,$admin_founders)))
{
exit('&amp;amp;amp;lt;script language="javascript"&amp;amp;amp;gt;{self.top.location.href="'.ADMIN_FILE.'";}&amp;amp;amp;lt;/script&amp;amp;amp;gt;');
}
}

if(in_array($action,array('type','type_add','role','config','grade')) &&$_SESSION['mysiteid'] &&$_sid)
{
exit('非法请求!IP:'.IP."已记录!");
}

if($modinfo['issystem'] &&!in_array($mod,array('member')))
{
include SYSTEM_ROOT.'admin/'.$file.'.inc.php';
}
else
{
include SYSTEM_ROOT.$modinfo['folder'].'/admin/load.inc.php';
}

调取

$modinfo=$moduleobj->get($mod,'folder');
中获取模型类文件根据模型id的值$mod的获取模型的信息,模型类文件路径:include\module.class.php


function get($id,$byfield='id')
{
return $this->db->fetch_one("SELECT * FROM `$this->table` WHERE `$this->table`.`$byfield`='".stripslashes($id)."'");
}

2.调取include SYSTEM_ROOT.$modinfo[‘folder’].’/admin/load.inc.php’;模型的加载文件,加载模板

3.模板调取include\module.class.php中的adminmenu()函数:


function usermodule()
{
return $this->db->fetch_all("SELECT * FROM `$this->table` WHERE `$this->table`.`issystem`=0 AND `$this->table`.`status`=1 ORDER BY `$this->table`.`orderby` ASC,`$this->table`.`id` DESC");
}

function adminmenu($moduleid)
{
global $_userid,$_roleid,$admin_founders,$_sid;
$menu='';
$modinfo=$this->get(intval($moduleid));
$r=string2array($modinfo['adminmenu']);
foreach($r as $key => $_r)
{
$adminrole=explode(',',$_r['role']);
if(!SITETYPE || ($key!='type' && $key!='type_add' && $key!='role' && $key!='config' && $key!='grade') || !$_sid)
{
if((in_array($_roleid,$adminrole) || in_array($_userid,$admin_founders)) && trim($_r['name']))
{
$menu.='


';
}
}
}

return $menu;
}

4.好了问题找到了,这里的连接加上$LA[‘siteurl’]的网站域名,修改了代码,加入了$LA的引用,解决:


function usermodule()
{
return $this->db->fetch_all("SELECT * FROM `$this->table` WHERE `$this->table`.`issystem`=0 AND `$this->table`.`status`=1 ORDER BY `$this->table`.`orderby` ASC,`$this->table`.`id` DESC");
}

function adminmenu($moduleid)
{
global $_userid,$LA,$_roleid,$admin_founders,$_sid;
$menu='';
$modinfo=$this->get(intval($moduleid));
$r=string2array($modinfo['adminmenu']);
foreach($r as $key => $_r)
{
$adminrole=explode(',',$_r['role']);
if(!SITETYPE || ($key!='type' && $key!='type_add' && $key!='role' && $key!='config' && $key!='grade') || !$_sid)
{
if((in_array($_roleid,$adminrole) || in_array($_userid,$admin_founders)) && trim($_r['name']))
{
$menu.='

';
}
}
}

return $menu;
}

top,parent,opener,iframe - 低头编码_抬头看路 - 博客园

mikel阅读(1256)

来源: top,parent,opener,iframe – 低头编码_抬头看路 – 博客园

1.opener:指用WINDOW.OPEN等方式创建的新窗口对应的原窗口。
2.top:
该变更永远指分割窗口最高层次的浏览器窗口。
3.parent:
该变量指的是包含当前分割窗口的父窗口。如果在一个窗口内有分割窗口,而在其中一个分割窗口中又包含着分割窗口,则第3层的分割窗口可以用parent变量引用第2层窗口,用top引用顶层窗口。
对于窗体中的frame和iframe加载的页面元素来说。parent 返回的时包含该iframe的页面窗口引用,top则返回最上层的窗口引用,self当然返回的仍然是自身的引用。
4. self,window都是获取当前页面窗口自身对象的引用

使用document.getElementById(“IframeA”)取到的是iframe标签对象,通过该对象可以获取iframe的各个属性,例如src、frameborder、style等,但是不能获取到iframe所包含的子页面的各个对象。;

使用document.frames(“IframeA”)取到的是iframe组件对象,通过该对象可以获取到iframe所包含的页面的子页面的各个对象,例如子页面的window对象,但是不能获得iframe标签得各个属性,例如上面说到的src等

1.html
<script>
function check(){
var obj1=document.getElementById(“myframe”);
alert(obj1.src);
//alert(obj1.window.document.myform.username.value);//Error
var obj2=document.frames(“myframe”);
alert(obj2.window.document.myform.username.value);
//alert(obj2.src);//Error
}
</script>
<body onload=”check()”>
<iframe id=”myframe” name=”myframe” src=”2.html” frameborder=”3″ style=”width:300;height:200;border-width:1;border-color:red;border-style:solid”></iframe>
</body>
2.html
<body>
<form name=”myform”>
用户名:<input type=”text” name=”username” value=”test” />
</form>
</body>

附:Window对象、Parent对象、Frame对象、Document对象和Form对象的阶层关系:Windwo对象→Parent对象→Frame对象→Document对象→Form对象,
如下:parent.frame1.document.forms[0].elements[0].value;

问题:在一个页面嵌入框架<iframe>,然后在框架中使用jvascript脚本:parent.xx.value=’xxxxx’; 在IE中可以正常看到赋值,但是在firefox中则不能完成赋值。请问在firefox中调用父框架的对象应该是哪个,是否和IE兼容?

解答:window.parent.document.form名.xx.value=’xxxxx’;   window可省略。
parent.document.form名.xx.value=’xxxxx’;
parent.document.getElementById(“xx”).value=’xxxxx’;

window.parent与window.opener的区别 JavaScript调用主窗口方法

1:   window.parent 是iframe页面调用父页面对象

举例:      a.html

<html>
<head><title>父页面</title></head>
<body>
<form name=”form1″ id=”form1″>
<input type=”text” name=”username” id=”username”/>
</form>
<iframe src=”b.html” width=100%></iframe>
</body>
</html>

如果我们需要在b.htm中要对a.htm中的username文本框赋值(就如很多上传功能,上传功能页在Ifrmae中,上传成功后把上传后的路径放入父页面的文本框中),我们应该在b.html中写:

<script type=”text/JavaScript”>
var _parentWin = window.parent ;
_parentWin.form1.username.value = “xxxx”;
</script>

2:   window.opener 是window.open 打开的子页面调用父页面对象
opener:对打开当前窗口的window对象的引用,如果当前窗口被用户打开,则它的值为null。
self:自引用属性,是对当前window对象的应用,与window属性同义。
self代表自身窗口,opener代表打开自身的那个窗口,比如窗口A打开窗口B。如果靠window.open方法,则对于窗口B,self代表B自己,而opener代表窗口A

主页面子页面窗口函数调用.rar (2.8 KB)

图解GitHub基本操作 - SeeYouBug - 博客园

mikel阅读(1222)

来源: 图解GitHub基本操作 – SeeYouBug – 博客园

一、注册并登陆到github网站

1.1、打开github网站首页(https://github.com/

1.2、注册一个自己的github账号

创建账户后再验证自己的邮箱,然后就可以登陆到github上来。

1.3、登陆自己的github账号

点击右边的按钮,开始创建一个自己的github仓库。

二、创建一个自己的仓库

 

 

三、在Hbuilder环境下上传自己的开源项目到github仓库

 

打开Hbuilder选择你要上传到github的开源项目,点击右键选择team,点击共享项目。

点击右侧create创建一个本地的github仓库名。

四、在Hbuilder环境下把github上的源码引入Hbuilder项目中

首先复制你要从github上下载的源码地址如下图:

然后打开Hbuilder,选择文件导入

上面这里需要等待一段时间,因为这个操作是从github服务器上把数据拉到本地,需要等待一段时间。后面的操作直接点下一步下一步,其他选项默认即可。

最后,你若看到这个页面说明,你从github上引入的源码就成功导入到Hbuilder本地了。下面这个图就从github上导入的源码项目。

五、在github上下载源码到本地

在github上找到你要下载的源码,点击如下按钮即可下载到本地。

六、删除不用的github仓库

 首先进入到你的github仓库首页如下页面:

然后双击进入你要删除的仓库

总结:这里我只是简单的介绍了一下github的基本操作,目的是为了帮助那些刚刚入门的初学者,想把自己的项目托管到github上却不知道怎么操作做了一个引导。

HTML5动画软件工具编辑器 HTML5动画分类 工具推荐 - 拂晓风起-Kenko - 博客园

mikel阅读(1320)

来源: HTML5动画软件工具编辑器 HTML5动画分类 工具推荐 – 拂晓风起-Kenko – 博客园

接下来介绍几款制作HTML5动画的工具,它们可以分为几类:

1、导出canvas动画:

Flash CC(13.1)、Animation、Radi

2、导出DIV+CSS3动画:

HTML5 Maker、Edge Animation、Tumult Hype、Nodefire

3、导出SVG动画:

Hippo

基本上所有工具导出的动画都会依赖一个独立的js库,这个库用于解析数据,展示动画。而其中两个工具(Radi和Hippo)就比较突出,它们并不依赖独立js库,而是把必须的最精简的js直接内嵌到HTML中,这个做法减小了初次加载的文件。这种实现方式对于小规模动画很有好处。

先来个最牛逼的html5制作的html5动画工具镇楼。

由于图片太多,就懒得贴图了,有兴趣的朋友直接下载我整理的doc吧。

直接上doc: http://files.cnblogs.com/kenkofox/html5%E5%8A%A8%E7%94%BB%E5%B7%A5%E5%85%B7.zip

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

除上述全部编辑器之外,还不得不提及两个比较牛逼的js库,用于辅助动作制:

CreateJS:http://www.createjs.com/#!/CreateJS

GSAP-JS:http://www.greensock.com/gsap-js/

CreateJS被Adobe CC用于导出html5动画,而GSAP的制作者GreenSock一直都是Flash动画界的佼佼者。具体用法不在这里详细叙述,大家有兴趣可以点击链接看看。

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

PHP empty、isset、isnull的区别 - 流风,飘然的风 - 博客园

mikel阅读(1396)

来源: PHP empty、isset、isnull的区别 – 流风,飘然的风 – 博客园

PHP empty、isset、isnull的区别

empty

如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,””、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

isset

如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

is_null

检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】

实例代码:

function response_data($data){
        $this->output->set_header('Content-Type: application/json; charset=utf-8');
        if(empty($data)){
            $data = array();
        }
        echo json_encode($data);
    }

destoon短信接口修改方法 - 浮云的等待 - 博客园

mikel阅读(1155)

来源: destoon短信接口修改方法 – 浮云的等待 – 博客园

destoon是很优秀的B2B行业站程序。程序模块化开发契合度很高,二次开发起来也很顺畅。数据缓存,权限分配,SEO功能方面都不错。

但是在使用这套程序的时候,常常要用到发送短信的功能,而destoon本身只接入了自己的短信接口。一些初接触destoon的开发者不知道如何修改。

所以铁牛特此写个文档分享如何修改destoon如何接入外部短信接口。

 

第一步:找到/include/global.func.php文件,搜索函数send_sms

修改function send_sms为function send_sms_back,新建函数send_sms

function send_sms($mobile, $message, $word = 0, $time = 0) {
global $db,
$DT,
$DT_TIME,
$DT_IP,
$_username;
if (!$DT['sms'] || !$DT['sms_uid'] || !$DT['sms_key'])
return false;
$sms_url = 'http://app.com/test/sms.php'; //你的短信接口地址
//例如你的短信接口是http://app.com/test/sms.php?username=athena&amp;amp;pwd=123456&amp;amp;mobile=15889726201&amp;amp;msg=我的测试短信内容
$word or $word = word_count($message);
$sms_message = rawurlencode(convert($message, DT_CHARSET, 'UTF-8'));
//data是你的url字符串 例如:username=athena&amp;amp;pwd=123456&amp;amp;mobile=15889726201&amp;amp;msg=我的测试短信内容
$data = 'username='.$DT['sms_uid'].'&amp;amp;pwd='.$DT['sms_key']. '&amp;amp;mobile='.$mobile13.'&amp;amp;msg='.$sms_message;
//采用PHP的cURL库推送网页
$cur = curl_init($sms_url);
curl_setopt($cur, CURLOPT_POST, 1);
curl_setopt($cur, CURLOPT_POSTFIELDS, $data);
curl_setopt($cur, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($cur, CURLOPT_HEADER, 0);
curl_setopt($cur, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($cur, CURLOPT_RETURNTRANSFER, 1);
$rec = curl_exec($cur);
curl_close($cur);
$code='';
if(!$rec==$DT['sms_ok']){
$code = 'Can Not Connect SMS Server';
}else{
$code =$DT['sms_ok'];
}
$db-&amp;gt;query("INSERT INTO {$db-&amp;gt;pre}sms (mobile,message,word,editor,sendtime,code) VALUES ('$mobile','$message','$word','$_username','$DT_TIME','$code')");
return $code;
}

第二步:设置短信返回值

我的短信接口地址是:http://app.com/test/sms.php,如果短信发送成功,信息是success,这个发送成功的信息需要在destoon管理后台去设置

07dce7bc2ed7bb045baa5bd730d95bc4

4d2b98a8a124ab7778fd35f158949721

 

提示:如果你的curl_init()函数不可用

找到找到php.ini,修改extension=php_curl.dll 把前面的分号去掉
如果你的php库没有php_curl.dll,那么将php_curl.dll php5ts.dlllibeay32.dll ssleay32.dll 复制到 windows/system32下 重启IIS或Apache服务即可

织梦 {dede:list}列表按多种排序显示_LongSir_新浪博客

mikel阅读(943)

织梦 {dede:list}列表按多种排序显示_LongSir_新浪博客,LongSir,

来源: 织梦 {dede:list}列表按多种排序显示_LongSir_新浪博客

orderby=’sortrank’ 文档排序方式

orderby=’hot’ 或 orderby=’click’ 表示按点击数排列

orderby=’sortrank’ 或 orderby=’pubdate’ 按出版时间排列

orderby=’near’

orderby==’lastpost’ 按最后评论时间

orderby==’scores’ 按得分排序

orderby=’id’ 按文章ID排序

orderby=’rand’ 随机获得指定条件的文档列表

orderby=’scores’ 按评论来排序 官方没有写的

倒序 orderway=’asc’

orderway是设置排序的方式,值为desc和asc

 

dedecms列表页实现文档按权重weight排序(从小到大的顺序)方法:

1,在list_artcile.htm模板中使用

{dede:list pagesize=’12′ orderby=’weight’ orderway=’asc’}

2,然后修改include目录下的arc.listview.class.php

查找else if($orderby==”lastpost。。。

在下面补充

else if($orderby==”weight”) { $orderSQL = ” order by arc.weight $orderWay”; }

3,同样是这个文件,查找“if(ereg(‘hot|click|lastpost’,$orderby))”改为:

if(ereg(‘hot|click|weight|lastpost’,$orderby))

上面三个步骤,即可实现列表页内容按权重排序,越小越靠前。dedecms v5.7SP1 测试成功!

PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数

mikel阅读(965)

一、中文截取:mb_substr()

mb_substr( $str, $start, $length, $encoding )

$str,需要截断的字符串
$start,截断开始处,起始处为0
$length,要截取的字数
$encoding,网页编码,如utf-8,GB2312,GBK

实例:

复制代码 代码如下:
<?php
$str=’脚本之家:http://www.jb51.net’;
echo mb_substr($str,0,4,’utf-8′);//截取头5个字,假定此代码所在php文件的编码为utf-8
?>
结果显示:脚本之家

二、获取中文长度:mb_strlen()

mb_strlen( $str, $encoding )

$str,要计算长度的字符串
$encoding,网页编码,如utf-8,GB2312,GBK

实例:

复制代码 代码如下:
<?php
$str=’脚本之家:http://www.jb51.net’;
echo mb_strlen($str,’utf-8′);//假定此代码所在php文件的编码为utf-8
?>
结果显示:24

Destoon模板存放规则及语法参考_二次开发_教程知识_百行工作室

mikel阅读(999)

一、模板存放及调用规则模板存放于系统 template 目录,template 目录下的一个目录例如 template/default/ 即为一套模板模板文件

来源: Destoon模板存放规则及语法参考_二次开发_教程知识_百行工作室

一、模板存放及调用规则

模板存放于系统 template 目录,template 目录下的一个目录
例如 template/default/ 即为一套模板

模板文件以 .htm 为扩展名,可直接存放于模板目录
例如 template/default/index.htm
也可以存放于模板目录的子目录里
例如 template/default/member/index.htm

在PHP文件里,使用模板语法为
<?php include template(‘index’);?>
或者
<?php include template(‘index’, ‘member’);?>

如果当前默认模板套系为default,则:
<?php include template(‘header’);?>
表示使用 template/default/header.htm 模板文件
<?php include template(‘header’, ‘member’);?>
表示使用 template/default/member/header.htm 模板文件

模板目录下在 these.name.php 是模板别名的配置文件,模板别名可以在后台模板管理修改。

模板解析后的缓存文件保存于cache/tpl/目录,扩展名为 .tpl.php

二、模板语法

1、包含模板 {template ‘header’} 或 {template ‘header’, ‘member’}

{template ‘header’} 被解析为
<?php include template(‘header’);?>
表示使用 template/default/header.htm 模板文件
{template ‘header’, ‘member’}
被解析为 <?php include template(‘header’, ‘member’);?>
表示使用 template/default/member/header.htm 模板文件

2、变量或常量表示

变量 {$destoon} 被解析为 <?php echo $destoon;?>
常量 {DESTOON} 被解析为 <?php echo DESTOON;?>
对于数组,标准写法应为 例如 {$destoon[‘index’]},可简写为 {$destoon[index]},模板在解析时会自动追加引号。

3、函数 {func_name($par1, $par2)}

{func_name($par1, $par2)} 被解析为
<?php func_name($par1, $par2);?>

4、PHP表达式 {php expression}

{php expression} 被解析为 <?php expression ?>

5、条件语句 {if $a==’b’} do A {/if} 或 {if $a==’b’} do A {else} do B {/if} 或 {if $a==’b’} do A {elseif $b==’c’} do C {else} do B {/if}

{if $a==’b’} do A {/if} 被解析为
<?php if($a==’b’) { do A }?>
{if $a==’b’} do A {else} do B {/if} 被解析为
<?php if($a==’b’) { do A } else { do B } ?>
{if $a==’b’} do A {elseif $b==’c’} do C {else} do B {/if} 被解析为
<?php if($a==’b’) { do A } else if($b==’c’) { do C } else { do B } ?>

6、LOOP循环 {loop $var $v}…{loop} 或
{loop $var $k $v}…{loop}

{loop $var $v}…{loop} 被解析为
<?php if(is_array($var)) { foreach($var as $v) { … } }?>
{loop $var $k $v}…{loop} 被解析为
<?php if(is_array($var)) { foreach($var as $k=>$v) { … } }?>

三、特殊用法

1、变量或表达式可以用HTML注释,例如 <!–{$destoon}–> 仍被解析为 <?php echo $destoon; ?> (可自动过滤此类注释)
2、模板可以用<!–[注释内容]–>,进行注释,模板编译时会自动去除,不会显示在页面中。(V>=5.0) 3、可直接在模板里书写PHP代码,直接书写PHP代码与 DESTOON 模板语法是兼容的。