dede:

sql标签:

  sql标签可以称得上是个万能标签了,查询数据库将其输出,这里介绍一些关于这个标签的用法:
  1.用来输出统计内容,这个是不错的,举个例子,我们来统计下总共发了多少的文章,思路就是输出dede_addonarticle这个文章附加表内容总数就可以了。
  {dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"}
  [field:name = "nums"/]
  {/dede:sql}
  2.使用~field~来进行特殊的查询,比如之前论坛上面很多会员需要做一个输出当前发布文章会员的相关内容,之前用sql或者arclist标签是没办法实现的,因为每篇内容是不同的,这里我们来用5.5的sql语句来做个示范。
  我们首先在文章模板中相应的位置加上下面的标签
  {dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"}
  [field:id/],
  {/dede:sql}
  这个放到article_article.htm页面,将会检索出当前会员发布的相关文章,这里的~ writer~会根据当前内容的环境变量进行替换后再执行查询。
  这里出现在SQL语句中条件查询的~ writer~,也就是$refObj->Fields[$value]这个里面的相关内容
模板中使用PHP
  许多人希望织梦的模板标签能够更加灵活,加入可以运行PHP的功能,这里在DedeCMS V5.5中就加入了一个可以执行php的特殊标签{dede:php}{/dede:php},这个标签可以执行PHP语句了。
  我这里举几个常用的例子:
  1.最简单的输出内容:
  {dede:php}
  $numA = 1;
  $numB = 2;
  echo $numA + $numB;
  {/dede:php}
  这个输出的内容是计算结果:
  3
  2.结合SQL查询输出单条内容
  {dede:php}
  $row = $dsql->GetOne('select id,typename from dede_arctype where id=2');
  print_r($row);
  {/dede:php}
  这个输出的内容是
  Array
  (
  [id] => 2
  [typename] => 问答
  )
  3.获取当前页面的变量
  比如我们这里进入系统后台的[模板]-[全局标记测试],我们在代码中填入下面的内容:
  {dede:php}
  print_r($refObj->Fields);
  {/dede:php}
  如果环境变量保持默认,即“不使用环境ID”,我们会看到以下的结果:
  Array
  (
  [typeid] => 0
  [phpurl] => /plus
  [indexurl] => /
  [templeturl] => /templets
  [memberurl] => /member
  [specurl] => /special
  [indexname] => 主页
  [templetdef] => /templets/default
  )
  那我们再换个环境变量测试看看,这里以我本地的栏目为测试了:
  Array
  (
  [id] => 3
  [reid] => 0
  [topid] => 0
  [sortrank] => 1
  [typename] => 产品
  [typedir] => {cmspath}/product
  … …
  [indexname] => 主页
  [templetdef] => /templets/default
  [position] => 主页 > 产品 >
  [title] => 产品
  )
  这样一来就检索出当前页面的局部变量了,接下来我们可以来结合前面的SQL语句来实现根据不同环境ID调用内容不同栏目内容。
  例如:
  {dede:php}
  $thisid = $refObj->Fields['id'];
  $row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid);
  print_r($row);
  {/dede:php}
  这样是来调用当前栏目的标题,这个标签功能类似于{dede:field.typename/}
如何编写自己的调用标签
  DedeCMS从V5.3开始就支持自己扩展标签,不过许多新人很少用那个东西,今天我就来简单的介绍下如何编写自己的调用标签。
  我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.php”格式,例如{dede:channel/}标签对应的是channel.lib.php文件。
  我们可以看一个示例标签:demotag.lib.php

<?php
if(!defined('DEDEINC')){
exit("Request Error!");
}
function lib_demotag(&$ctag,&$refObj)
{
global $dsql,$envs; //属性处理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = ''; //你需编写的代码,不能用echo之类语法,把最终返回值传给$revalue
//------------------------------------------------------ $revalue = 'Hello Word!'; //------------------------------------------------------
return $revalue;
}

  我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:
 
  这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数return $revalue;中的$revalue需要是经过处理后生成的字符串。
  $attlist="row|12,titlelen|24";这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:
  $revalue = 'Hello Word!';
  $revalue .="Row:".$row.";TitleLen:".$titlelen;
 
  这样我们可以看到,这个属性已经被创建变量并且赋值了。
  接下来我们可以再进一步去修改这个标签。
  比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面sql标签中的那个sql,只是这里我们将其分装为一个标签。
  我们可以新建一个标签,例如叫writerarc,那我们就需要创建一个writerarc.lib.php,然后模仿demotag编写函数,注意需要修改为
  function lib_writerarc(&$ctag,&$refObj)
  接下来我们就可以编写查询语句及对底层模板处理的相关函数了
  $revalue = '';
  $innertext = $ctag->GetInnerText();
  $ctp = new DedeTagParse();
  $ctp->SetNameSpace('field', '[', ']');
  $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
  $innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit 0, $row,这样就可以根据$row来确定查询的内容数目。
  当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。
  接下来我们通过执行查询对sql及输出变量进行处理:
  $dsql->Execute('me',$sql);
  while($rs = $dsql->GetArray('me'))
  {
  //根据属性处理查询变量
  $rs['title'] = cn_substr($rs['title'], $titlelen);
  //获取底层模板
  $ctp->LoadSource($innertext);
  foreach($ctp->CTags as $tagid=>$ctag) {
  if(!empty($rs[strtolower($ctag->GetName())])) {
  $ctp->Assign($tagid,$rs[$ctag->GetName()]);
  }
  }
  //根据底层模板及查询变量得到处理结果
  $revalue .= $ctp->GetResult();
  }
  这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到$revalue中。
  最后返回这个值return $revalue;
  整个文件内容如下:

<?php
if (! defined ( 'DEDEINC' )) {
exit ( "Request Error!" );
}
function lib_writerarc(&$ctag, &$refObj) {
global $dsql, $envs;
// 属性处理
$attlist = "row|12,titlelen|24";
FillAttsDefault ( $ctag->CAttribute->Items, $attlist );
extract ( $ctag->CAttribute->Items, EXTR_SKIP );
$revalue = '';
$innertext = $ctag->GetInnerText ();
$ctp = new DedeTagParse ();
$ctp->SetNameSpace ( 'field', '[', ']' );
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$dsql->Execute ( 'me', $sql );
while ( $rs = $dsql->GetArray ( 'me' ) ) {
// 根据属性处理查询变量
$rs ['title'] = cn_substr ( $rs ['title'], $titlelen );
// 获取底层模板
$ctp->LoadSource ( $innertext );
foreach ( $ctp->CTags as $tagid => $ctag ) {
if (! empty ( $rs [strtolower ( $ctag->GetName () )] )) {
$ctp->Assign ( $tagid, $rs [$ctag->GetName ()] );
}
}
// 根据底层模板及查询变量得到处理结果
$revalue .= $ctp->GetResult ();
}
return $revalue;
}
?>

  接下来我们来测试我们这个标签,我们修改article_article.htm模板,在里面加入以下的标签代码:
  {dede:writerarc row='10' titlelen='6'}
  [field:title/]
  {/dede:writerarc}
  通过动态浏览页面进行查看调试http://www.dedecms.com/plus/view.php?aid=3,我们会发现标签起作用了,输出了我们的内容。

将DEDE改写成生成的html到指定目录:
  简述:该方法可以将生成的html静态页面放到指定目录,如web,然后配置的虚拟主机直接指向web,这时相当于一个静态网站,而后台是通过另外一个域名绑定的,指向安装目录。这样能很好的提高网站的安全性。

  

  完成阶段说明:文档保存的栏目为{cmspath}/a/

  修改部分:1.修改去掉栏目链接中的/a,/include/helpers/channelunit.helper.php第227行,函数GetTypeUrl开头,增加如下代码:

/*
* 将生成html静态页面中的目录"/a"去掉
* 备注:此处是去掉栏目的路径中的"/a"
*/
$typedir = str_replace("/a/", "/", $typedir);

    2.去掉文章链接中的/a,/include/taglib/arclist.lib.php,约497行,$row['filename'] = $row['arcurl']后,增加代码:

/*
* 将生成html静态页面文章链接中的"/a"去掉
* 备注:此处是去掉文章链接的路径中的"/a"
*/
$row['filename'] = $row['arcurl'] = str_replace("/a/", "/", $row['arcurl']);

DEDE标签综合的更多相关文章

  1. HTML5快速入门(三)—— 标签综合运用

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  2. dede标签调用

    关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}">&l ...

  3. 修改DeDe标签Pagelist分页样式

    我们在用dede仿站的时候,调用文章列表页的分页时,我们会用到: {dede:pagelist listitem=”info,index,end,pre,next,pageno” listsize=” ...

  4. 织梦dede标签tags的美化教程

    我们在行dede仿站的时候,经常会遇到tags标签的调用,调用非常简单,官方有专门的调用标签,但是官方的调用是一成不变的模式,dede5.6以前的版本,基本上都是黑色相同大小的表示,而在dede5.7 ...

  5. dede 标签

     ◆织梦内容管理系统模板标签代码参考 [Arclist 标记] 这个标记是DedeCms最常用的一个标记,也叫自由列表标记,其中 hotart.coolart.likeart.artlist.imgl ...

  6. DEDECMS模板中dede标签使用php和if判断语句的方法

    先来看看下面这个标签{dede:field.tong_gg php=yes}if(@me==""||empty(@me))@me="<p>无</p> ...

  7. 修改DeDe标签Pagelist分页样式,自定义分页样式

    我们在用dede仿站的时候,调用文章列表页的分页时,我们会用到: {dede:pagelist listitem="info,index,end,pre,next,pageno" ...

  8. dede标签:arclist标签使用大全

    特别提示:arclist是织梦建站系统中最重要的标签,同时也是最基础的标签,希望大家熟练掌握,可以说是学习织梦必备知识. 标签名称:arclist标记简介:织梦常用标记,也称为自由列表标记,其中img ...

  9. dede标签大全

    想必很多人对后台不熟悉,并且觉得很难.其实不难,只是你们没有找到合适的方法学习而已!只有找到一个合适的学习方法,不管做什么事情,我想都很容易.学习讲究的是效率,而效率又是由思路决定的.就拿网页制作来说 ...

随机推荐

  1. window.open如何返回值给父窗口

    父窗口代码 function showMyWindowNew() { var iTop = (window.screen.availHeight - 30 - 450) / 2; //获得窗口的水平位 ...

  2. ASP.NET 构建高性能网站 第1篇

    网站优化需要考虑的方面 在用ASP.NET开发网站的时候,性能是永远需要考虑和关注的问题,性能不仅仅只是程序代码执行时候的速度,而是涉及到方方面面的东西. 就拿ASP.NET的一个请求来讲,从浏览器向 ...

  3. 几个常用的Eclipse插件

    用Eclipse Neon做ROS开发需要几个常用的插件,可以大大加速开发的进度. 1.常用插件 a.CMake Editer 地址:http://cmakeed.sourceforge.net/ec ...

  4. java的(PO,VO,TO,BO,DAO,POJO)解释1

    java的(PO,VO,TO,BO,DAO,POJO)解释  O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...

  5. nginx简单代理配置

    原文:https://my.oschina.net/wangnian/blog/791294 前言  Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器, ...

  6. 【linux】linux查看文件大小,磁盘大小

    查看指定目录下 文件或目录大小超过多少的 查看 /backup/tomcat7/ 目录下 超过500M大小的文件 并展示 文件详情 find /backup/tomcat7/  -type f -si ...

  7. SCRUM黑

    来自 :coolshell 这篇文章的原文在这里(原文链接)(下文不是全译,也不是部分译,我只是把其总结,有我自己的发挥,但是原意大致不变),这篇文章完全是在调侃Scrum的,作者第一段就是一个免费声 ...

  8. struts2 iterator 迭代标签只显示前五条记录

    <s:iterator value="#session.produceLists" var="produce" begin="0" e ...

  9. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  10. 文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write

    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write close(关闭文件) 相关函数 ope ...