欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

dede:sql的用法2 参数 变量 标签库文件 /include/taglib/sql.lib.lib.php

dedecms子栏目获取父级栏目名称

{dede:sql sql=”SELECT * FROM  `dede_arctype` WHERE id=~reid~ LIMIT 1″}
[field:typename/]
{/dede:sql}

标签名称:sql
功能说明:用于从模板中用一个SQL查询获得其返回内容
适用范围:全局使用
基本语法:
 {dede:sql sql=""}底层模板{/dede:sql}
参数说明:
sql="" 完整的SQL查询语句
底层模板字段:
 SQL语句中查出的所有字段都可以用[field:字段名/]来调用
应用实例:
 1.调用某个特定会员发布的文章内容
 {dede:sql sql='Select * from dede_archives where mid=1'}
 <a href='/plus/view.php?aid=[field:id/]' target='_blank'>[field:title/]</a>
 {/dede:sql}
mid为用户ID

下面就是实现dedecms获取当前文章ID并显示缩略图的代码,感兴趣的朋友可以研究研究:
{dede:sql sql='Select * from dede_archives where id=~id~'}  
<!--从dede_archives表中查询当前文章ID所对应的相关信息-->  
<img src="[field:litpic/]" alt="[field:title/]" style="max-height:150px; max-width:170px;" />   
{/dede:sql}
以上内容转载的,扩展下获取当前文档所在主表、附加表字段信息:     
{dede:sql sql='Select down,title from dede_addonarticle JOIN dede_archives ON dede_addonarticle.aid = dede_archives.id where id = ~id~'}
       <a href='[field:down/]' target='_blank'>[field:title/]</a>
        {/dede:sql}
上例中,down为新增字段。使用的时候,根据情况做改动。


如何实现标签引入其他标签变量 sql标签中使用标签变量

今天看到有人问起怎么实现 arclist 标签中调用 shottitle 作为 关键字的输入
sql标签现在已经支持 引用其他标签 但是官方没有说明 这里简单说一下
~ tagname ~   在sql标签中 sql="“ 中在任何位置加~ tagname ~ 来实现


  1. {dede:sql sql="SELECT  * FROM table WHERE keyword= ~ shortitle ~ AND channelid='3'  ORDER BY pubdate"}        
                      <li> [field:title'/]</li>            
                      {/dede:sql}

除了以上的简单调用 当我们想使得某个标签也支持传递进入参数怎么办,在5。3中仅需要把 sql标签的文件的

(在 /include/taglib/sql.lib.lib.php 里面)



  1. //传递环境参数
        preg_match_all("/~([A-Za-z0-9]+)~/s", $sql, $conditions);
        if(is_array($conditions))
        {
            foreach ($conditions[1] as $key => $value)
            {
                if(isset($refObj->Fields[$value]))
                {
                    $sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql);
                }
            }
        }

这里传递的是sql 这个参数的的环境变量  你可以对需要修改的标签的变量使用以上方式处理即可做到传环境标量的说。
(这里var_dump($refObj->Fields)一下 就知道 怎么回事了)


比如 我给arclist 标签加上  memberid 这个参数 并且 传递环境变量  就可以在某个位置调用同一会员的文章了。
代码不贴了 先干活  回头接着发表

dedecms里面有两个标签还是比较灵活的,一个是{dede:php}{/dede:php}另外一个是{dede:sql}标签,
{dede:php}标签注释要用来在模板中写php代码的,{dede:sql}主要是用来调用sql用的,
下面就来介绍下这两个标签到底该如何使用。该文章是转自百度空间的一篇文章。
        {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]这个里面的相关内容

普通分类: