Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航为大驾家提供DedeCMS站点程序站点教程相关的知识,比如织梦程序安装教程,织梦程序系统故障等教程。

理解织梦程序模板引擎有什么意义?一方面可以更好地自定义标签。更多在于了解织梦程序系统,理解模板引擎是理解织梦程序工作原理的第一步。理解织梦程序会使咱们写php相关具体代码如下时更顺手,同时能学习一些php相关具体代码如下的组织方式。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这似乎不是那么简单,如果你只想学习自定义标签,可以看一下“是否需要自定义标签”和““扩展标签””就够了。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

一解析式引擎7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

如果你还没用过dedecms网站程序的标签,先用一下,也可以看一下“dedecms网站程序网页模板编写”。熟悉一下memberlist这个标签,下面会以这个标签为例。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

织梦程序提供的模板分析引擎有解析式和编译式两种,由于现在主要使用前者,这里也只讨论前者。
 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

***root/test.php  封面php(root指的是根目录,以下都假设dedecms网站程序被放在了站点的根目录)
 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php     require_once (dirname(__file__).'/include/common.inc.php');     //利用解析式模板所需的网站文件     require_once (dirname(__file__).'/include/dedetag.class.php');   //生成解析模板引擎类对象 $dtp=new DedeTagParse(); //设置命名空间,由于下面的标签用tianya命名空间,所以要设置一下。 $dtp->SetNameSpace('tianya'); $dtp->LoadTemplate(dirname(__file__).' est.tpl.htm ');   //把标签替换成具体的值 foreach ($dtp->CTags as $id=>$tag) {     if($tag->GetName()=='my')         //把id为$id的tag翻译成这是my标签<br/>         $dtp->Assign($id,'这是my标签<br/>');         else if($tag->GetName()=='test')         $dtp->Assign($id,'这是test标签<br/>'); }   //把解析好的html文本echo出来 $dtp->Display();  ?>


***root/test.tpl.htm 网页模板7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    {tianya:my att1=1 att2='2'}
        [field:my/]
    {/tianya:my}
    {tianya:test att1=1 att2='2'}
        [field:test/]
    {/tianya:test}


执行root/test.php就能查看结果7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

由上面的例子可以看出解析式模板运作的套路:7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

1php网站文件具体调用网页模板,并显示。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

2htm网站文件提供网页的大体框架,等待数据来完善网页的具体网站内容,称为网页模板。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

上面的相关具体代码如下就是把第一个标签(my标签)显示为这是my标签<br/>;第二个标签显示为这是test标签<br/>。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

上面的相关具体代码如下是怎么办妥的7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

更改***root/test.php如下7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php     require_once (dirname(__file__).'/include/common.inc.php');     //利用解析式模板所需的网站文件     require_once (dirname(__file__).'/include/dedetag.class.php');   $dtp=new DedeTagParse(); //设置命名空间,由于下面的标签用tianya命名空间,所以要设置一下。 $dtp->SetNameSpace('tianya'); $dtp->LoadTemplate(dirname(__file__).' est.tpl.htm '); var_dump($dtp);    //这是查看解析结果的重要相关具体操作方法 ?>

***root/test.tpl.htm 网页模板7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    {tianya:my att1=1 att2='2'}
        [field:my/]
    {/tianya:my}
    {tianya:test att1=1 att2='2'}
        [field:test/]
    {/tianya:test}

可以看到$dtp对象的内部结构,其中有一个DedeTag类的数组CTags,DedeTag类的定义见root/include/ dedetag.class.php。最好不要直接用DedeTag类的字段,而用DedeTag提供的系统数据库函数。比如用tag1->GetName()而不是用tag1->TagName。花一小段时间就能把DedeTag类看完,这些语法在以后自定义标签时会有用。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

再看一个例子,***root/test.php
 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php     require_once (dirname(__file__).'/include/common.inc.php');     require_once (dirname(__file__).'/include/dedetag.class.php');   function lib_my($att1,$att2) {         return '这是my标签<br/>属性值'.$att1.$att2.'<br/>'; }   $dtp=new DedeTagParse(); $dtp->SetNameSpace('tianya'); $dtp->LoadTemplate(dirname(__file__).' est.tpl.htm');   foreach ($dtp->CTags as $id=>$tag) {     if($tag->GetName()=='my')     $dtp->Assign($id , lib_my($tag->GetAtt('att1'),$tag->GetAtt('att2'))); }   $dtp->Display();  ?>

***root/test.htm 网页模板7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    {tianya:my att1=1 att2='2'}
        [field:my/]
    {/tianya:my}
    {tianya:test att1=1 att2='2'}
        [field:test/]
    {/tianya:test}

会发现模板解析中有四种“势力”7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在include/ DedeTagParse.class.php中定义的解析引擎类,负责读取模板,把其中的dedecms网站程序标签替换成具体html文本。DedeTagParse、SetNameSpace、LoadTemplate就是类里面的相关具体操作方法。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

标签翻译需要一些转换规则,lib_my就是这一类根据标签的属性和具体数据得出html。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

待显示的php创建编译引擎类对象,对模板进行编译,在Display时,echo出html网站文件。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

htm模板,具体调用标签,用html的形式写出动态网页的效果,属于被翻译的部分。html模板主要负责界面层次,利用封装好的标签进行内部处理。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

除了这四大势力,还有一个势力视图类。include/中以arc开头的网站文件都是解析引擎的视图类。视图类就是封装了解析引擎类的类,仅仅加了一些系统数据库函数而已。在下载的cms默认模板中,root/index.php就用了PartView这个视图类,解析了templets/default/index.htm。五大势力的关系如下图。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

咱们现在想象一个标签如何被解析的。咱们知道,一个xml标签有四个元素:命名空间(上面的tianya,在dedecms网站程序中是dede)、标签名(my)、属性(att)、InnerText(标签之间的网站内容)。命名空间在SetNameSpace中指明了,标签名由if($tag->GetName()=='my')这一句分配任务,属性作为系统数据库函数参数使用,就差InnerText的处理。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

再来看看如何处理底层模板字段([field:my/]等,field是一个关键字,在实际应用中,常常是数据库元组中的字段)7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

***root/test.php
 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php     require_once (dirname(__file__).'/include/common.inc.php');     require_once (dirname(__file__).'/include/dedetag.class.php');   //看完后面的相关具体代码如下再来看这个系统数据库函数 function lib_zoo(&$ctag) {         //还记得刚才$dtp->CTags的结构吗?这里把$ctag作为参数传递,lib__zoo外面的相关具体代码如下就不用涉及太多的标签处理了     $reval='这是my标签<br/>属性值'. $ctag->GetAtt('att1').$ctag->GetAtt('att2').'<br/>'; $innerText = $ctag->GetInnerText();   //底层模板字段的结构都形如[field:XX]这里把它看作以field为命名空间,[]为分隔符的标签。     $dtp=new DedeTagParse();     $dtp->SetNameSpace('field','[',']');     $dtp->LoadSource($innerText);       //不妨把$row想想成从数据库中读取出来的出来的数据     $row[‘name’]= 'Snoopy';     $row[‘animal’]= 'dog';          //把标签替换成具体的值     foreach ($dtp->CTags as $id=>$tag)     {         if($tag->GetName()=='name')             $dtp->Assign($id, $row[‘name’]);         else if($tag->GetName()=='animal')             $dtp->Assign($id, $row[‘animal’]);     }     $reval.=$dtp->GetResult().'<br/>';     return $reval; }   $dtp=new DedeTagParse(); $dtp->SetNameSpace('tianya'); $dtp->LoadTemplate(dirname(__file__).' est.htm');   foreach ($dtp->CTags as $id=>$tag) {     if($tag->GetName()=='zoo')     $dtp->Assign($id, lib_zoo($tag)); }   $dtp->Display();  ?>


***root/test.htm7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

{tianya:zoo att1=1 att2='2'}
     [field:name/] is a [field:animal/]
{/tianya:zoo}

可见,解析底层模板和解析标签是一样的,只不过把底层模板当作是以field为命名空间,‘[’和‘]’为边界的标签而已。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

接着看一下include/taglib/memberlist.lib.php,和lib_zoo很像吧。你是不是突然懂得如何定义标签了,读memberlist.lib.php里面的相关具体代码如下,模仿,就能自定义标签了,可参考“扩展标签”。所以自定义标签只用在include/taglib里加入XX.lib.php网站文件,里面定义lib_XX系统数据库函数即可。快点去试一试。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

***把root/index.php(默认模板根目录中的)里面的7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

改成$pv->SetTemplet($cfg_basedir .'/test.htm');7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在root/test.htm使用自定义标签吧7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

是否需要自定义标签7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

笔者刚学织梦程序标签时,第一个感觉就是之梦的标签比较抽象,不够好用。比如说刚才的zoo的问题,我就会定义一个zoo标签。后来才发现应该用定义频道的相关具体操作方法解决,可参考“dedecms网站程序中自定义数据模型”这篇文章。另外,标签也有一些弱点,在网站开发中会慢慢体会到。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

上面讲了五大势力的关系、一个标签的解析过程和如何定义标签,回忆一下看看是否对标签解析有了六七成的把握。解析式模板的运作还有很多细节,读源码是最好的学习相关具体操作方法。但有点难度,看自己需要的程度吧,可以跳过这一段。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

***把root/index.php(默认模板根目录中的)里面的7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

改成$pv->SetTemplet($cfg_basedir .'/test.htm');7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

编写root/test.htm7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

{dede:memberlist row=6 signlen=30} 
<li><a href="[field:spaceurl/]" target="_blank">[field:uname/]</a></li>
{/dede:memberlist}

运行index.php7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这是怎么办到的,跟踪相关具体代码如下自己想吧(tips:适当地var_dump一些变量,还有用一下ctrl F)。主要看dedetag.class.php这个网站文件,是织梦程序的核心网站文件,还是该看一看的。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

过程大概是这样的:new PartView()(include/ arc.partview.class中)具体调用了DedeTagParse(),SetNameSpace ()做了一些初始化工作。LoadTemplate() 一方面读取网页模板相关具体代码如下,另一方面具体调用ParseTemplet()把网页模板分解标签,属性,底层模板等,得到$pv->CTags。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

Display()具体调用echo GetResult()的结果。GetResult()就是由分解好的标签,属性,底层模板等算出结果html。由于dedecms网站程序标记满足树形的语法规则(像html一样),所以,计算标签是一个遍历树的过程。至于每个标签的值的计算,就具体调用了AssignSysTag(),它处理了global等标记。对于自定义标记,通过具体调用IncludeFile处理,这个系统数据库函数又通过了复杂的具体调用,最后具体调用了includehelperschannelunit.helper中的MakeOneTag()的系统数据库函数。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

自己整理一下吧!7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

二 解析与网页的上下文7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

       后面的部分是我在写完“关于网页模板”后补上的,涉及到封面模板、站点列表模板和文档模板,不了解的读者可以先看看那篇文章。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

       通过链接,网页可以在封面页、站点列表页和文档页间跳转,那怎么样在页面中传递信息呢?可以用get方式。由于系统有生成功能,它会把解析的结果生成纯的html页面,不太容易看清解析的过程。不妨先不用生成功能,如在网站的后台添加一篇文章,在发布选项处选“仅动态浏览”,之后保存,预览。看到地址栏网站内容形如http://localhost/plus/view.php?aid=114。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

       不妨细细研究这个超链接,首先是aid=114。aid指article id,是文章的编号。通过给出这个编号,通过XXX处理,就能得出文章的所有信息,再加上文档模板(就像一个格式),就能的出具体的html文档页。类似地,还有tid(type id,栏目号)、cid(channel id,频道/模型号)或其他。这是在上下文间传递的信息。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  之后说说plus/view.php。打开该网站文件,发现里面用aid为参数,创建了一个视图类Archives的对象(在include/arc.archives.class中定义),并具体调用Display系统数据库函数显示。这和根目录/index.php用partview视图类对象来解析模板的道理是一样的,不过这里多附加了aid表示具体的文章(而index中的东西是通用的,不用附加上下文)。也就是说,解析封面模板、站点列表模板和文档模板都有建立解析引擎对象。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  另外,链接中对应php网站文件不一定是plus/view.php,显示文档可用plus/view.php;显示站点列表可用plus/list.php。我猜测之所以会有文档模板和站点列表模板差异就是来自于不同的视图类。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  之后,若在文章的发布选项处选“生成html”,就是具体调用视图类的SaveTohtml系统数据库函数。得到的文章链接形如http://localhost/a/webbase/javascript-ajax/2010/0409/114.html。7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


怎么确定一个站点是不是用dedecms网站程序建的?7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

7fgAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

关于DedeCMS站点程序站点教程相关的知识,就说到这里了希望能帮助朋友们。

标签:

分享到:

  网友投稿

注册时间:

网站:0 个   APP:0 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市