[模板制作]模板教程【Pagelist 标记】(十二)

评论(0)
【Pagelist 标记】表示分页页码列表 适用范围:列表模板 通过调试了解其使用方法 我调试的方法是: 将templetsdefault文件夹下的list_default.htm和htmlist_article.htm文件中的代码,全部掏空。放入调用【Pagelist    .Cfp138 { display:none; } 【Pagelist 标记】表示分页页码列表
适用范围:列表模板

通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的list_default.htm和htmlist_article.htm文件中的代码,全部掏空。放入调用【Pagelist 标记】的代码,再在管理后台进行操作,如下:HTML更新-->更新栏目HTML-->开始生成HTML。再在IE中访问网站的各栏封面和列表,就可以得到返回的数据。


我调试【Pagelist 标记】的具体代码如下:
<ul>
{dede:list col='1' row='3' titlelen='20'
infolen='100' imgwidth='120' imgheight='80' pagesize='3' typeid='95'}
<li>[field:imglink/] [field:textlink/] <font style="color:gray;">[field:info/]</font></li>
{/dede:list}
</ul>
{dede:pagelist listsize='3' listitem='index pre pageno next end option'/}

得到如下返回数据:

釜底抽薪 从底层标签实现下拉菜单

评论(0)
至于前台的效果实现 我用的是mootool。我用的是v3.1 其他版本可以根据此方法修改制作思路:现在基于web2.0的下拉菜单 多是以<ul><li><a>一级菜单</a><ul><li><a>二级级菜单</a></li&g    .Xwg976 { display:none; } 至于前台的效果实现 我用的是mootool。
我用的是v3.1 其他版本可以根据此方法修改
制作思路:
现在基于web2.0的下拉菜单 多是以
<ul>
<li>
<a>一级菜单</a>
<ul>
<li>
<a>二级级菜单</a>
</li>
</ul>
</li>
</ul>
这样的格式来实现的。但是dede的{dede:channel}标签是无法实现这个效果的,或者只有添加typeid这个参数来手工实现下拉菜单,这样的效果耗时耗力。
于是觉得只有改底层模板来实现了,高了一个小时以后增加了标签
{dede:channeli row='' type='top'}
{typelink:root}<li><a href="[field:typelink/]">[field:typename/]</a><ul>[field:child/]</ul></li>{/typelink:root}
{typelink:children}<li><a href="[field:typelink/]">[field:typename/]</a></li>{/typelink:children}
{/dede:channeli}
其实就是一个嵌套的标签
{typelink:root}<li><a href="[field:typelink/]">[field:typename/]</a><ul>[field:child/]</ul></li>{/typelink:root}
是父菜单的innertext
{typelink:children}<li><a href="[field:typelink/]">[field:typename/]</a></li>{/typelink:children}
是子菜单的innertext
由于系统的消耗,目前就支持两级 ,其实已经够用了!
这里相信大家已经看懂了思路了,下面就是修改办法:
include/inc_typelink.php
增加函数:
function GetChanneli($typeid=0,$reID=0,$row=8,$typetype='sun',$innertext='',$myinnertext='')
{
if($typeid==0) $typeid = $this->TypeID;
if($row=="") $row = 8;
if($reID=="") $reID = 0;
if($col=="") $col = 1;

if($typetype=="") $typetype="sun";
if($innertext=="") $innertext = GetSysTemplets("channel_list.htm");

if($reID==0 && $typeid>0){
$dbrow = $this->dsql->GetOne("Select reID From cmsxx_arctype where ID='$typeid' ");
if(is_array($dbrow)) $reID = $dbrow['reID'];
}

$likeType = "";
if($typetype=="top"){
$sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
From cmsxx_arctype where reID=0 And ishidden<>1 order by sortrank asc limit 0,$row";
}
else if($typetype=="sun"||$typetype=="son"){
$sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
From cmsxx_arctype where reID='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
}
else if($typetype=="self"){
$sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
From cmsxx_arctype where reID='$reID' And ishidden<>1 order by sortrank asc limit 0,$row";
}

//扩展二级菜单
//主菜单的innertext
$root="";
//带有子菜单的innertext
$rootc="";
//子菜单的innertext
$children="";
$dtp3 = new DedeTagParse();
$dtp3->SetNameSpace("typelink","{","}");
$dtp3->LoadSource($innertext);

if(is_array($dtp3->CTags))
{
foreach($dtp3->CTags as $tagid=>$ctag )
{
$tagname=$ctag->GetName();
if($tagname=="root")
{
$root=$ctag->GetInnerText();
}
else if($tagname=="rootc")
{
$rootc=$ctag->GetInnerText();
}
else if($tagname=="children")


{
$children=$ctag->GetInnerText();
}
}
}
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace("field","[","]");
$dtp2->LoadSource($root);
$dsqli=new DeDeSql(fasle);
$dsqli->SetQuery($sql);
$dsqli->Execute();
$line = $row;
for($i=0;$i<$line;$i++)
{
if($row=$dsqli->GetArray())
{
if($typetype=="self" && $row['ID']=="$typeid"){
if($myinnertext!=''){
$linkOkstr = $myinnertext;
$row['typelink'] = $this->GetOneTypeUrl($row);
$linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
$linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
$likeType .= $linkOkstr;
}
}else{
//
$row['child']=$this->GetChannelList($row['ID'],0,18,$typetype='sun',$children,0,100,'','');


//
$row['typelink'] = $this->GetOneTypeUrl($row);
if(is_array($dtp2->CTags)){
foreach($dtp2->CTags as $tagid=>$ctag)
{ if(isset($row[$ctag->GetName()])) $dtp2->Assign($tagid,$row[$ctag->GetName()]); }
}
$likeType .= $dtp2->GetResult();
}
}
$GLOBALS['autoindex']++;
}
$this->dsql->FreeResult();
return $likeType;
}//GetChannel
在inc_archives_view.php,inc_arclist_view.php,inc_arcpart_view.php增加标签的解析
else if($tagname=="channeli"){
//获得栏目连接列表
if(trim($ctag->GetAtt('typeid'))=="" && $this->TypeID!=0){
$typeid = $this->TypeID;


$reid = $this->TypeLink->TypeInfos['reID'];
}
else{
$typeid = $ctag->GetAtt("typeid"); $reid=0;
}
$this->dtp->Assign($tagid,
$this->TypeLink->GetChanneli($typeid,$reid,$ctag->GetAtt("row"),
$ctag->GetAtt("type"),$ctag->GetInnerText(),"")
);
}
先后就交给系统来实现效果了

[模板制作]模板教程【Flink 标记】(八)

评论(0)
【Flink 标记】用于获取友情链接。 调用该标记后可以得到四种友情链接的形式。 使用思路、步骤: 一、明确使用范围 我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Flink 标记】的使用范    .Won441 { display:none; } 【Flink 标记】用于获取友情链接。
调用该标记后可以得到四种友情链接的形式。

使用思路、步骤:
一、明确使用范围
我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Flink 标记】的使用范围是:
封面模板

二、通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的index.html文件代码,全部掏空。放入调用【Flink 标记】的代码,再在IE中访问网站主页index.php,就可以得到返回的数据。

补充:



我调试【Flink 标记】的具体代码如下:
全部用文字显示:{dede:flink type='textall' row='4' titlelen='20'}{/dede:flink}<br />
文字和图文混合排列:{dede:flink type='textimage' row='4' titlelen='20'}{/dede:flink}<br />
仅显示不带Logo的链接:{dede:flink type='text' row='4' titlelen='20'}{/dede:flink}<br />
仅显示带Logo的链接:{dede:flink type='image' row='4' titlelen='20'}{/dede:flink}<br />


得到如下返回数据:

[模板制作]模板教程【Channel 标记】(三)

评论(0)
【Channel 标记】主要用于获取栏目列表,用法非常简单,主要是区分“type = top,sun/son,self ”的所调用的对象就行了。 说明:为了便于下面内容的理解,我将数据库中网站频道的截图如下: 使用思路、步骤: 一、明确使用范围 &n    .Xka108 { display:none; } 【Channel 标记】主要用于获取栏目列表,用法非常简单,主要是区分“type = top,sun/son,self ”的所调用的对象就行了。
说明:为了便于下面内容的理解,我将数据库中网站频道的截图如下:



使用思路、步骤:
一、明确使用范围
我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Channel 标记】的使用范围是:
封面模板、列表模板、文档模板。


二、通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的index.html文件代码,全部掏空。放入调用【Channel 标记】的代码,再在IE中访问网站主页index.php,就可以得到返回的数据。

调用方法一:
我调试【Channel 标记】的具体代码如下:
{dede:channel row='3' type='top'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

得到如下返回数据:



调用方法二:
我调试【imglist标记】的具体代码如下:
{dede:channel row='3' type='sun' typeid='96'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

得到如下返回数据:

[模板制作]模板教程【Mynews 标记】(九)

评论(0)
【Mynews 标记】用于获取站内新闻。 站内新闻有利于站长及时与会员沟通。 使用思路、步骤: 一、明确使用范围 我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Mynews 标记】的使用范围是    .Wuk932 { display:none; } 【Mynews 标记】用于获取站内新闻。
站内新闻有利于站长及时与会员沟通。

使用思路、步骤:
一、明确使用范围
我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Mynews 标记】的使用范围是:
封面模板

二、通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的index.html文件代码,全部掏空。放入调用【Mynews 标记】的代码,再在IE中访问网站主页index.php,就可以得到返回的数据。

我调试【Mynews 标记】的具体代码如下:
{dede:mynews row='2' titlelen='30'}标题:[field:title/] <br />
作者:[field:writer/] <br />
时间:[field:senddate function="strftime('%y-%m-%d %H:%M',@me)"/] <br />
内容:[field:body/] <br /><br /><br />
{/dede:mynews}




得到如下返回数据:

DedeCms新API整合其它系统的步骤

评论(0)

一、在Dedecms后台设置好通行证的相关参数

二、把DedecmsAPI相对应的文件复制到被整合系统根目录,替换同名文件

  

.Cmp400 { display:none; }  一、在Dedecms后台设置好通行证的相关参数

二、把DedecmsAPI相对应的文件复制到被整合系统根目录,替换同名文件

三、修改pp_dederemote_interface.php里的参数

四、OK测试一下

[模板制作]模板教程【Type 标记】(四)

评论(0)
【Type 标记】表示指定的单个栏目的链接,用法非常简单。 说明:为了便于下面内容的理解,我将数据库中网站频道的截图如下: 使用思路、步骤: 一、明确使用范围 我们在使用任何标记的过程中,都必须明确其使用的范    .Sxi101 { display:none; } 【Type 标记】表示指定的单个栏目的链接,用法非常简单。
说明:为了便于下面内容的理解,我将数据库中网站频道的截图如下:



使用思路、步骤:
一、明确使用范围
我们在使用任何标记的过程中,都必须明确其使用的范围,否则可能无法正常调用该标签,【Type 标记】的使用范围是:
封面模板、列表模板、文档模板。


通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的index.html文件代码,全部掏空。放入调用【Type 标记】的代码,再在IE中访问网站主页index.php,就可以得到返回的数据。

我调试【Channel 标记】的具体代码如下:
{dede:type typeid='96'}{/dede:type}
<br />
<br />
{dede:channel typeid='96'}
<a href='[field:typelink /]'>[field:typename/]</a>
{/dede:channel}

得到如下返回数据:



通过以上两行代码的对比,相信你的认识会更深刻。前者是生成单一的数据,后者通过数组生成一组的数据。

[模板制作]模板教程【Channelartlist 标记】(十)

评论(0)
【Channelartlist 标记】用于获取当前频道的下级栏目的内容列表。该标记在封面模板(包括主页)中的经常被用到,具体用法见下面实例。 除了宏标记外,channelArtlist 是唯一一个可以直接嵌套其它标记的标记,不过仅限于嵌套 {dede:type}{/dede:type} 和    .Boz235 { display:none; } 【Channelartlist 标记】用于获取当前频道的下级栏目的内容列表。该标记在封面模板(包括主页)中的经常被用到,具体用法见下面实例。
除了宏标记外,channelArtlist 是唯一一个可以直接嵌套其它标记的标记,不过仅限于嵌套 {dede:type}{/dede:type} 和 {dede:arclist}{/dede:arclist} 两个标记。

通过调试了解其使用方法
我调试的方法是:
将templets\default\文件夹下的index.html文件代码,全部掏空。放入调用【Channelartlist 标记】的代码,再在IE中访问网站主页index.php,就可以得到返回的数据。

例1
我调试【Channelartlist 标记】的具体代码如下:
{dede:channelArtlist typeid="94" col="1"}
<div style="width:500px;border:red solid 1px;float:left;">

<div style="width:500px;background:#ccddee;">
{dede:type}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
</div>

<div style="width:500px;float:left;">
<ul>
{dede:arclist row="5"}
<li><a href="[field:arcurl/]">[field:textlink/]</a></li>
{/dede:arclist}
</ul>
</div>
</div>
{/dede:channelArtlist}


注意:细心的朋友会发现,使用【Channelartlist 标记】时,需要你对div + css或者table的控制能力较强,否则在页面中很难控制它。请大家他细看下面例2,例1与例2代码上相差很小,但得到的布局却相差很大。仔细对比一下吧!

例2
我调试【Channelartlist 标记】的具体代码如下:


{dede:channelArtlist typeid="94" col="1"}
<div style="width:300px;border:red solid 1px;float:left;margin:5px;">

<div style="width:300px;background:#ccddee;">
{dede:type}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
</div>

<div style="width:300px;float:left;">
<ul>
{dede:arclist row="5"}
<li><a href="[field:arcurl/]">[field:textlink/]</a></li>
{/dede:arclist}
</ul>
</div>
</div>
{/dede:channelArtlist}

快速上手 企业建站DedeCms一马当先

评论(0)
DedeCms (织梦内容管理系统) 以简单、实用、开源而闻名,DedeCms 经历了前两个中等规模的版本之后,DedeCms v3进行了全面的架构升级,程序的系统架构由以前的以模板为框架导向转为以内容类型为框架导向,文档统一使用RSS标准归档+附加信息结构表,这样真正并且轻松的实    .Cfd905 { display:none; }

  DedeCms (织梦内容管理系统) 以简单、实用、开源而闻名,DedeCms 经历了前两个中等规模的版本之后,DedeCms v3进行了全面的架构升级,程序的系统架构由以前的以模板为框架导向转为以内容类型为框架导向,文档统一使用RSS标准归档+附加信息结构表,这样真正并且轻松的实现完全自由扩展,可以随心所欲的实现你要发布任何内容类型。系统提供了频道管理、栏目管理、内容发布、专题管理、采集管理、插件管理、会员管理以及系统管理等多个功能模块,在本文中将向大家介绍如何利用DeDeCms来帮助企业快速建立一个网站。

  一、准备工作

  在使用DedeCms之前,第一步首先需要架设一个PHP的环境,所需要安装的程序包括PHP 4.4.2,Apache,MySQL以及ZendOptimizer等(本地测试推荐使用AppServ工具,一次性装好PHP、Mysql、Zend),接着准备一套网站模板,这套模板可以是表格布局的,也可是DIV+CSS布局的,在官方论坛模板交流版块上也能找到一些不错的DedeCms模板,你也可可到其它专门的模板下载网站找一下。

  二、DedeCms的安装

  在浏览器中输入http://127.0.0.1/dedecms/setup/index.php,运行DedeCms安装程序(如图1)。在该界面的“数据库主机”文本框中输入服务器的IP地址,通常默认为“localhost”;在“数据库名称”文本框中输入要创建的DedeCms数据库名称(可任意);分别在“数据库用户”和“数据库密”文本框中输入安装MySQL时所设置的用户名和密码;接着在“用户名”和“密码”文本框中设置登录DedeCms后台所用的用户名和密码;然后在“CMS安装目录”中设置站点的路径,例如站点在目录dedecms下,可将该文本框设置为dedecms。另外在界面中也列出了Linux或Unix平台下程序各目录所需要设置的权限,对于Windows平台就不用对目录权限进行设置了。

  点击“确定”按钮即可转入DedeCms的后台登录界面(如图2),在此输入在安装程序界面中所设置的用户名和密码即可进行登录。

 

  二、栏目添加和管理

  其中“栏目名称”是设置栏目在前台显示的中文名称;“文件保存目录”是设置该栏目下静态页面文件的保存位置,只需要设置一个目录名称即可,如设置的文件保存目录为“edu”,那么该目录的位置就在站点要目录的“/html/edu”目录下;在“栏目属性”中有传统的列表形式、使用封面模板和使用用单独页面作为栏目三个单选框,在“高级选项”的“使用封面模板”选项中所指的封面模板是指频道里所有栏目的汇总页面,类似首页模板;剩下的其它选项可选其默认设置,点击“提交”按钮,一个栏目就创建好了。

  创建了一级栏目后,还需要创建二级或三级栏目,在DedeCms中创建二级或三级栏目是使用右键菜单功能来实现的。例如要在一个“站长学院”的顶级栏目下创建一个二级栏目,可在该栏目名称上右击鼠标,接着在弹出的菜单中选择“增加子类”(如图4),转入后的界面与创建顶级栏目是一样的。

  三、模板引擎代码的使用

  在了解DedeCms的模板代码之前,了解一下织梦模板引擎的知识是非常有意义的。在左侧面板列的“系统帮助”→“模板代码参考”下有详细的帮助信息。织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。下面举两个简单的例子:

  1.获取某个栏目的热门文章列表

  其代码如下:

  

{dede:arclist typeid='' orderby='click' titlelen='28' row='10' col='1'}
·<a href='[field:arcurl/]'>[field:title/]</a><br>
{/dede:arclist}

  在这段代码中,typeid是设置栏目的ID号,该ID号可在“网站栏目管理”界面中获取;orderby表示文章列表的排序方式;titlelen表示文章标题的长度;row表示文章列表的行数;col表示文章列表的列数;[field:arcurl/]和[field:title/]分别表示列表中文章的链接地址和标题。

  2.获取标题图片新闻列表

  

 这段代码中使用了imginfolist,其作用是获取设置了标题图片的最新新闻列表。其中imgwidth是设置图片的显示宽度;imgheight是设置图片的显示高度;[field:imglink/]是设置图片的链接地址。

  四、文章的更新和发布

  网站模板和栏目都设置好后,接下来就可向各个栏目添加文章了,在左侧面板列表中选择“内容发布”→“发布普通文章”可进入文章发布页面(如图5)。文章发布功能的使用非常的简单,在添加文章时若需要插入分页文章,可在分页的位置输入“”标题或者直接点击“page break”图形按钮。


  添加一篇文章后,系统会自动生成相应的静态页面文件,若在网站制作后期需要对以前的文章进行再次更新,可在左侧的面板中选择“HTML更新”,在该面板选项下提供了“更新主页HTML”、“更新栏目HTML”、“更新文档HTML”等选项。

五、采集管理

  在网站建设初期,若CMS系统没有一个采集功能,那更新文章的工作量是可想而知的,使用采集功能可以方便地在网站中加入丰富的内容。在左侧的面板列表中依次选择“采集管理”→“采集节点管理”,接着点击“添加新节点”按钮进入采集规则编写页面(如图6)。在编写采集规则时,是用“[Var:内容]”标记来表示所有的变量,例如编写文章标题的采集规则,通过查看采集页面源文件发现其代码如下:

  <span style="font-size:12pt"><b>快速上手 企业建站DedeCms一马当先”</b></span>

  那么“文章标题”中的采集规则就可写为<span style="font-size:12pt"><b>[Var:内容]</b></span>,非常的简单。

  六、结尾

  在本文中对DedeCms的使用作了一个简单的介绍,通过这个教程可对DedeCms的使用流程及方法有一个大致的了解,其中“模板引擎代码的使用”是DedeCms使用中的重点部分,考虑到官方已经提供了详细的帮助教程,所以也未作深入的讲解,不过用户只需要参考DedeCms自带模板中的代码就会很快上手了。

{dede:imginfolist typeid=0 row='4' col='1' infolength='10' imgwidth='125' imgheight='90' titlelength='20' tablewidth='100%' }
<TD>
<div align="center">
<A href=" [field:filename /]" target="_blank" title=" [field:title /]">[field:title /]</A>

[模板制作]模板教程【Mytag 标记】(六)

评论(0)
自定义宏标记的应用 今天天涯来介绍下自定义宏标记的应用,大家可以进入后台,在“模板管理”-》“自定义宏标记”中查看到该选项。自定义宏标记的作用: 可以将模板中多次出现的相同元素用一个自定义标记表示出来,从而达到,一次更    .Keh148 { display:none; } 自定义宏标记的应用 今天天涯来介绍下自定义宏标记的应用,大家可以进入后台,在“模板管理”-》“自定义宏标记”中查看到该选项。

自定义宏标记的作用:
可以将模板中多次出现的相同元素用一个自定义标记表示出来,从而达到,一次更改,全局更换的效果。辅助插件的广告管理也有相似的效果。

适用范围:
网页模板中多次出现的相同元素,例如:网站的导航条、网站的站点公告、网站的底部信息等,在我之前发布的几套模板中都运用到了自定义宏标记。

自定义宏标记的调用办法:
{dede:mytag name='标记名称' ismake='是否含板块代码(yes 或 no)' typeid='栏目ID'/}
1、name 标记名称,该项是必须的属性,以下 2、3是可选属性;
2、ismake 默认是 no 表示设定的纯HTML代码, yes 表示含板块标记的代码;
3、typeid 表示所属栏目的ID,默认为 0 ,表示所有栏目通用的显示内容,在列表和文档模板中,typeid默认是这个列表或文档本身的栏目ID。

下面来通过一个实例进行说明:
我有一个网站模板底部信息,其长度已经超出了系统可以设置的网站版权(cfg_powerby)的长度,但是我想实现一段代码,可以在不同模板(页面)中显示相同内容的效果。
我们就可以使用自定义宏标记来实现这个效果
如图进行设置:


然后我们回到模板制作的界面,将模板中的{dede:global name='cfg_powerby'/},替换为我们设置的自定义宏标记:
{dede:mytag name='footer'/},更新下,是不是已经变为我们设置的标记内容了啊。

当然,自定义宏标记里面也可以加入dedecms的标记内容,适合当前栏目的显示内容,不过需要在调用代码中将ismake设为yes才可以,也可以通过设置typeid使自定义宏标记在特定栏目中显示。

有人会问,我已经生成了很多页面了,现在想更改了一下自定义宏标记的内容,那岂不是要更改后重新再生成一遍,那样就不方便了。
其实柏拉图早就考虑到这点,在自定义宏标记中可以使用javascript调用,这样以来,只要改变一次就可以实现全局改变的效果。


具体操作:进入自定义标记管理,在相对应的标记管理项目中有JS调用这个选项,单击,dedecms自动生成调用该ID标记的js代码,例如<script src='/plus/mytag_js.php?aid=1' language='javascript'></script>
我们将刚才的{dede:mytag name='footer'/}用js替换掉,更新下,是不是还是原来的效果,我们再修改下标记的内容,怎么样?全局发生了变化。
怎么样,自定义宏标记内容强大吧,相信他的引入会给你的模板制作带来更好的效果。

st bt