在这篇文章中,我们将为您详细介绍织梦CMS静态源码引擎的应用示例的内容,并且讨论关于织梦如何制作静态网站的相关问题。此外,我们还会涉及一些关于*源码网站浅谈织梦CMS使用心得、DedeCms常用函数参
在这篇文章中,我们将为您详细介绍织梦CMS静态源码引擎的应用示例的内容,并且讨论关于织梦如何制作静态网站的相关问题。此外,我们还会涉及一些关于*源码网站浅谈织梦CMS使用心得、DedeCms 常用函数参考:静态源码类、Dedecms(织梦CMS)子栏目高亮操作、dedecms(织梦CMS)免费么的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 织梦CMS静态源码引擎的应用示例(织梦如何制作静态网站)
- *源码网站浅谈织梦CMS使用心得
- DedeCms 常用函数参考:静态源码类
- Dedecms(织梦CMS)子栏目高亮操作
- dedecms(织梦CMS)免费么
织梦CMS静态源码引擎的应用示例(织梦如何制作静态网站)
织梦CMS中存在二种源码引擎,一个是静态源码引擎,也就是网站管理员经常提到的源码用的就是这个引擎,我们在织梦CMS源码里经常看到的标签,例如{dede:arclist}{/dede:arclist}等,就是使用的这个引擎;另一个是动态的源码引擎,这个源码引擎一般用在“非核心模块的动态页面或栏目页的源码解析”,从这名称就可以看出,动态源码引擎,用在动态页面,至于二者区别我们这里不多说,请查一下织梦手册,里面有详细进解。今天我们说的就是静态源码引擎,这个引擎就是我们经常用的,只是我们没有注意,我们通过在源码里写的标签,就是这个来引擎来解析的,这也不是今天的讨论的范围,这个静态源码引擎的核心文件是:include/dedetag.class.php,今天的教程,就是学习一下这个引擎里面的功能的使用。
如果不做二开的话,这个教程完全可以不用看,这些教程专为二开人员写的,也是自己在二开过程中的一点总结。
刚登录织梦后台后,左边的菜单就是就是通过循环标记,加上js来调用出来的,js今天我们不讨论,只看一下菜单是怎么实现的。在“织梦download标签分析”这个教程里面介绍过了,这里再做一个概括:
标签字符串的存在分二种情况,一种是存在于数据库表中,例如,download标签softlinks,图片集标签imgurls,这些字段对应的字符串值,必须查询出来,然后,通过源码引擎遍历出我们想要的内容。在这一种情况里面,又分二种,一种是存在在织梦源码表字段fieldset里面的,这里面保存的都是附加表字段;另一种是存在于附加表里面的字段值,例如软件模型附加表里面的softlinks。
插件模型表#@_plus里面字段menustring 对应的值,这个插件模型与频道模型是平级,这一点要注意。
另一个就是不在数据库表中,而是在文件里面,这些文件后缀可以是htm,html,txt等,一般的后缀文件都可以。今天我们进的就是第二种,我们自己定义的,应用这种特别灵活,*大好处就是不用操作数据库表。
不管哪一种,它们的通用代码是:
1.引入源码引擎:dedetag.class.php,这是必须的,没有这个,一切空谈。
2.实例化对象:$dtp = new DedeTagParse(),这个也是必须的,要不也是空谈。
3.设置名字空间:$dtp->SetNameSpace('field','<','>')这个是也必须设置的,要不源码引擎也不知道你要做什么。这个函数里面的field就是叫“标记的名字空间”,这个是可以改成自己的需要的,例如,织梦标签的标记的名字空
间是“dede”即$dtp->SetNameSpace("dede","{","}"),如果我们要自己定义一个命子空间,例如,$dtp->SetNameSpace('m','<','>')、SetNameSpace('menu','<','>')等都是可以的。
4.加载源码:$dtp->LoadTemplet('dedebase.html'),实际上所谓加载源码就是把存放标签的文件加载进来,以便后面的通过foreach把里面的内容遍历出来。源码文件dedebase.html里面的内容,如下所示。
<menu:item link="" title="织梦基地" />
<menu:item link="" title="织梦源码" />
<menu:item link="" title="织梦二开" />
这里面任何的内容都可以随便写,但是必须名字空间对应,例如,名字空间是field,而你在源码写的是menu,这样就错了,源码中必须是field或,名字空间必须是menu,还有标记的开始与结束符号,必须一样,否则也会出错。
在织梦有些文件里面,你会看到$dtp->LoadString(字符串),这完全正确,注意,这个函数里面的必须是字符串。我们去dedetag.class.php搜索检查看一下,你会发现,这个函数又调用了“载入源码字符串”函数LoadSource($str)
其中参数$str是字符串,然后,把这些字符串(也是就是标签)以这个字符串,作为文件名,缓存到文件data/tplcache/.md5($str).inc文件里面,然后,再把这个文件作为源码,通过函数LoadTemplet()载入,从中可以看出,*终还是通过加载了这个函数。
还可能通过LoadSource($ctag->InnerText)来加载,*终也是加载了源码,这里面的参数$ctag->InnerText是标记之间的文本,要注意的是这个标记之间的文件也可能是一个标签,即标记中嵌套着标记。例如,下面的代码:
$menusMain = "
<m:top mapitem='6' item='7' name='辅助插件' display='block'>
<m:item name='插件管理器' link='plus_main.php' rank='10' target='main' />
$plusset
</m:top>"
$dtp = new DedeTagparse();
$dtp->SetNameSpace('m','<','>');
$dtp->LoadString($menusMain);
foreach($dtp->CTags as $ctag)
{
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace('m', '<', '>');
$dtp2->LoadSource($ctag->InnerText);
foreach($dtp2->CTags as $j=>$ctag2)
{
$mapstring .= "<li><a href='".$ctag2->GetAtt('link')."' target='".$ctag2->GetAtt('target')."'>".$ctag2->GetAtt('name')."</a></li>\r\n";
}
$mapstring .= "</ul>\r\n</dd>\r\n</dl>\r\n";
}
代码已经简化了,请查文件dede/inc/inc_menu_map.php,*下面。
5.循环遍历标记: foreach($dtp->CTags as $ctag){},根据需要遍历出自己想要的内容。
以上就是循环标记的原理,现在我们看一个例子。
我想实现如下图所示的效果。
正常情况我们可以通过标签{dede:arclist}{/dede:arclist}就可以了,但是如果我想点每个标题,进入到不同的网站并且,不准查询数据库,用这个标签就完全实现不了了。
我们这样做就可以实现,建立一个文件dedebase.html这个文件名随便起,然后,在这里面写上如下代码。
<menu:item link="" title="织梦基地" />
<menu:item link="" title="织梦源码" />
<menu:item link="" title="织梦二开" />
<menu:item link="" title="织梦教程" />
<menu:item link="" title= 织梦CMS内容管理系统" />
然后,建立一个php文件test.php,在文件里写上,下面的代码。
<?php
header("Content-type:text/html;charset=utf-8");
require_once(dirname(__FILE__)."/include/common.inc.php");
/*require_once(DEDEINC."/typeunit.class.admin.php");
require_once(DEDEADMIN."/inc/inc_archives_functions.php");
*/
require_once(DEDEINC.'/dedetag.class.php');
$dtp = new DedeTagparse();
$dtp->SetNameSpace('menu','<','>');
$dtp->LoadTemplet('dedebase.html');
if(is_array($dtp->CTags))
{
foreach($dtp->CTags as $ctag)
{
$title = $ctag->GetAtt('title');
$link = $ctag->GetAtt('link');
echo "<li><a href='{$link}' target='main'>{$title}</a></li>\r\n";
}
}
?>
看看是不是已经实现了,搞定! 本文章网址:http://www.ppssdd.com/code/13812.html。转载请保留出处,谢谢合作!
*源码网站浅谈织梦CMS使用心得
使用织梦CMS将近3个月了,我的网站也差不多比较象样了.当时我一看到dedecms的官方网站,就觉得界面比较清秀.心里的*印象一下子就不错.于是对自己说,对头,就用她了。
其实之前我是用过动易的网站内容管理系统的,但总觉得心里有个疙瘩,觉得不够大气,也看过动易官方网站提供的大型用户的网站案例,那些算是动易的付费用户吧,总觉得也不是那么回事儿。
还有一个重要的原因,因为当时的动易并没有提供html生成功能,好象风讯是有的,但觉得风讯太难上手,就放弃了。
因为我不懂技术,总怕用PHP做出的网站系统不上手,所以一直都没敢试.其实没有想象中的那么难,dedecms系统的核心模板你可以等待官方的发布,如果有补丁就要尽快的打上。我们只要做些修改源码的小动作就可以了.
官方网站的界面毕竟太熟悉了,就象美女看多了也会腻一样.看到论坛里有人模仿MOP,模仿163,还有就是后来图王的网站管理员网也是dede的程序,好象人气也挺不错.那天我刚好上一个网站,觉得这个网站还挺简洁的,于是便找人(我不懂技术)仿这个站修改了一下源码.
呵呵,当然,个人网站管理员事情总是这么多.现在主界面都大部分改了。还有很多细节没有改好.
这3个月来,我的网站都被baidu/Google/yahoo等搜索引擎收录了.在流量方面也取得长足的进步,说明dedecms系统对搜索引擎还是挺友好的,因此我想我会坚持用下去的.当然dedecms也还有不足的地方.比如象专题的功能,*新专题变成显示*新新闻了.专题页也需要支持分页,后台需要有文档搜索功能和相同新闻的列表,相同新闻的列表是指网站管理员在发布新闻时有时会不小心发布相同的新闻,或几个人在发布时,也会造成这种情况.如果把相同的新闻列出来,就可以把不必要的删除掉。
别的小细节的问题,这里就不一一说出来了。但愿官方能够多吸取使用者的建议,dedecms必定前景光明.听说dedecms( ) 是开源的,因此在这里也对IT柏拉图团队致以崇高的敬意.
看过论坛没有相关我这类的dedecms使用心得的新闻,就让我来填补这个空白吧.我会在使用地过程中,不断地写出dedecms的使用心得及建议.网站管理员网的各位成员如有兴趣,也可以一起来发些心得讨论 *后,再次谢谢dedecms,谢谢IT柏拉图团队,谢谢使用dedecms的网站管理员们。
本文章网址:http://www.ppssdd.com/code/21574.html。转载请保留出处,谢谢合作!DedeCms 常用函数参考:静态源码类
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(织梦CMS)子栏目高亮操作
前言
继续来说说织梦(坑爹)CMS的问题吧。
场景:
企业动态下,分别有如下六个栏目:
要求点击到哪个栏目,哪个栏目则高亮显示
本来嘛,这不是so easy吗?(这里指PHP的其他cms)
但是对于dede,我上网看了半天,标签调用方法都尝试了,貌似没戏,当然,涉及到改源码一律忽略,没必要。(浪费时间,增加风险)
那么问题来了,怎么在短时间内解决这个问题呢?
方案
这里能想到最简单省事的就是使用Js了,当然,有人说你在栏目中判断id不就行了吗?是啊,但是id不能写死啊,否则后期用户更改栏目岂不是不灵活了。
好了,说正事。
下面是我上面调用的第一张图的html代码:
<divcurrent_typedir="{dede:field name=''typedir''/}">
<ul>
{dede:channelartlist typeid="14"}
<li typedir="{dede:field name=''typedir''/}">
<a href="{dede:field name=''typeurl''/}">
<div>{dede:field name=''typename''/}</div>
<span> </span>
</a>
</li>
{/dede:channelartlist}
</ul>
</div>
结构很简单,就是一个栏目列表的循环,循环中设置一个属性,获取到当前循环到的栏目的typedir(栏目存放目录),然后还获取到当前页面的typedir,下面用js进行比较,起码typedir是不会错的。
下面是js的代码,因为还涉及到hover的效果,所以代码中有一部分是hover的:
$(function(){
// 初始效果
checkMenu();
// 移动效果
$(".neibu_til li").hover(function(){
$(this).siblings().find("span").attr("class","");
$(this).find("span").attr("class","ing");
},function(){
$(this).find("span").attr("class","");
checkMenu();
});
function checkMenu()
{
var the_cur_dir = $(''.neibu_til'').attr(''current_typedir'').split(''/'').pop();
$(".neibu_til").find("li").each(function(){
var dir_last = $(this).attr(''typedir'').split(''/'').pop();
if (dir_last == the_cur_dir) {
$(this).find(''span'').attr(''class'',''ing'');
}
});
}
})
总结
好了,长话短说,就这么多,希望在这个不愉快的周六能给大家带来些许愉快吧。
dedecms(织梦CMS)免费么
dedecms即织梦cms是以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用该系统。
不过准确来说,dedecms是授权模式,就是个人非商业使用是免费的,但是网站一般都做些小广告什么的,就算商业啦,不过一般网站小也没人找你,目前国内真正免费和开源的只有JTBC CMS。
最新信息:2021.9.26日dedecms(织梦)官方发布公告:除个人非盈利网站外,均需要购买DedeCMS商业使用授权,授权费为5800元。针对逾期未获得授权的网站,我们将保留民事索赔权利,届时除了需要支付商业使用授权费外,您还需承担相应的合理维权费用。>>详见:知名开源CMS:织梦CMS,将告别免费,开源时代逐步没落!织梦CMS这次商业授权收费,影响是巨大的,而且具有划时代意义,也标志着国内免费开源时代、个人站长时代、网站建设行业时代逐步没落。php中文网建议,对于一些长期运营的项目,不要依赖开源的CMS,务必独立自主开发自己的CMS,程序上更安全,更灵活,另外也不会存在法律风险!推荐课程:《2021年最新最全面的CMS开发视频教程(收藏)》
更多dedecms技术文章,请访问dedecms使用教程栏目!
以上就是
我们今天的关于织梦CMS静态源码引擎的应用示例和织梦如何制作静态网站的分享已经告一段落,感谢您的关注,如果您想了解更多关于*源码网站浅谈织梦CMS使用心得、DedeCms 常用函数参考:静态源码类、Dedecms(织梦CMS)子栏目高亮操作、dedecms(织梦CMS)免费么的相关信息,请在本站查询。
本文标签: