最新公告
  • 欢迎您光临牛气网,本站秉承“用心服务,做好服务”致力为站长提供优质的售后服务!立即加入我们
  • 织梦dedecms静态模板引擎的应用示例

    织梦dedecms中存在二种模板引擎,一个是静态模板引擎,也就是站长经常提到的模板用的就是这个引擎,我们在织梦dedecms模板里经常看到的标签,例如{dede:arclist}{/dede:arclist}等,就是使用的这个引擎;另一个是动态的模板引擎,这个模板引擎一般用在“非核心模块的动态页面或列表页的模板解析”,从这名称就可以看出,动态模板引擎,用在动态页面,至于二者区别我们这里不多说,请查一下织梦手册,里面有详细进解。

    今天我们说的就是静态模板引擎,这个引擎就是我们经常用的,只是我们没有注意,我们通过在模板里写的标签,就是这个来引擎来解析的,这也不是今天的讨论的范围,这个静态模板引擎的核心文件是:include/dedetag.class.php,今天的教程,就是学习一下这个引擎里面的功能的使用。

    如果不做二次开发的话,这个教程完全可以不用看,这些教程专为二次开发人员写的,也是自己在二次开发过程中的一点总结。

    刚登录织梦后台后,左边的菜单就是就是通过循环标记,加上js来调用出来的,js今天我们不讨论,只看一下菜单是如何实现的。在“织梦下载标签分析”这个教程里面介绍过了,这里再做一个概括:

    标签字符串的存在分二种情况,一种是存在于数据库表中,例如,下载标签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="http://www.dedebase.com" title="织梦基地" />
    <menu:item link="http://www.dedebase.com" title="织梦模板" />
    <menu:item link="http://www.dedebase.com" 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="http://www.dedebase.com" title="织梦基地" />
    <menu:item link="http://www.baidu.com" title="织梦模板" />
    <menu:item link="http://www.g.com" title="织梦二次开发" />
    <menu:item link="http://www.abc.com" title="织梦教程" />
    <menu:item link="http://www.sina.com" title= 织梦dedecms内容管理系统" />

    然后,建立一个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";
    }
    }

    ?>

    看看是不是已经实现了,搞定!

    1、本站所有资源皆来源于网络和用户自行上传,因此不包括售后和技术,敬请谅解!
    2、本站不保证所提供的源码的准确性、安全性和功能完善性,资源仅用于学习用!
    3、您下载的资源,请务必在24小时内删除,资源仅提供本地测试,请勿商用或者非法用途都与本站无关,一切后果自负!
    4、如发现资源下载不了,或者侵权请及时联系客服或者邮箱admin#niuqi.net,#改为@!
    牛气网 » 织梦dedecms静态模板引擎的应用示例

    发表评论

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: admin@niuqi.net),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者

    发表评论

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: admin@niuqi.net),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者
    • 62会员总数(位)
    • 3414资源总数(个)
    • 1879本月发布(个)
    • 66 今日发布(个)
    • 375已陪伴您(天)

    牛气网NIUQI.NET站长源码平台

    开通SVIP会员 了解详情
    升级SVIP尊享更多特权立即升级