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

这里的技术是共享的

You are here

dede根据文章ID获取文章静态地址的函数

shiping1 的头像

织梦DedeCms用SQL获取文章静态地址

时间:13-07-09 08:40 来源:织梦吧 作者:五道杠的小男人 点击:782次
在Dede系统里面,可以自由使用SQL语句来配合织梦标签进行更多的个性化调用。基本参照格式为: {dede:sql sql=select 字段 From 表名称 where 条件语句} [field:字段名/] {/dede:sql} 由上面这种基本格式,我们就可以基本转换出一条调用文档列表的调用标签了

在Dede系统里面,可以自由使用SQL语句来配合织梦标签进行更多的个性化调用。基本参照格式为:

{dede:sql sql='select 字段 From 表名称 where 条件语句'}
[field:字段名/]
{/dede:sql}

由上面这种基本格式,我们就可以基本转换出一条调用文档列表的调用标签了,代码为:

{dede:sql sql='select * From dede_archives limit 10'}
< a href="/plus/view.php?aid=[field:id/]">[field:title/]</a>
{/dede:sql}

大家看到了上面的文档链接的底层模板地址的是动态的,那么我们要如何来进行转换,让它链接到静态地址呢,这里我们只需要对[field:id/]进行一下转换,转换后的完整代码为:

{dede:sql sql="SELECT * FROM dede_archives limit 10"} 
<li>·<a href='

[field:id runphp='yes'] $id=@me;@me='';$url=GetOneArchive($id);@me=$url['arcurl'];[/field:id]'>[field:title/]</a>

</li>
{/dede:sql}

如果是dede:php标签,也差不多,主要是运用GetOneArchive这个方法,例如:

{dede:php}
$dsql->SetQuery("SELECT * FROM dede_archives limit 10");
$dsql->Execute();
while($arr = $dsql->getArray()){
$arcurl = GetOneArchive($arr['aid']);
echo '<li>·<a href=“'.$arcurl['arcurl'].'
”>[field:title/]</a></li>';
}
{/dede:php}

来自 http://www.zhimengba.com/jsjc/225.html
http://www.genban.org/news/dedecms-4442.html


dedecms使用sql语句调用文章静态链接地址的方法

2014-11-16 14:45 作者:wowo 来源:WwW.55zM.Com 浏览: 138次 我要评论 (条) 字号:  

摘要:本文实例讲述了dedecms使用sql语句调用文章静态链接地址的方法。分享给大家供大家参考。具体分析如下: 很多时候我们用织梦后台调用数据的时候,自带的标签很多时候都没办法调用我们要的数据,因此要自己写sql去调用,之前有个问题搞了两天都没搞出来,后来看到

 

本文实例讲述了dedecms使用sql语句调用文章静态链接地址的方法。分享给大家供大家参考。具体分析如下:

很多时候我们用织梦后台调用数据的时候,自带的标签很多时候都没办法调用我们要的数据,因此要自己写sql去调用,之前有个问题搞了两天都没搞出来,后来看到下面这个文章,问题解决了.

使用dedecms这个程序建站有五年多的时间了,期间建了不少网站,欢迎各位朋友找我建站.

补充:

发布这篇文章后,无意间发现在了dedecms的GetOneArchive,只要传入一个文档id就可以获得文章链接了,其实这个函数返回的的文章信息数组包含了:链接地址,标题,文章ID,栏目ID,这里只需要文章链接地址,具体代码如下:
 

复制代码
代码如下:
{dede:sql sql="select * From dede_archives a where a.title like '%织梦建站%' and a.arcrank>-1 limit 8"} 
<</code>li><</code>a title="[field:title/]" href="[field:id runphp='yes']$url=GetOneArchive(@me);@me=$url['arcurl'];[/field:id]">[field:title runphp='yes']@me=cn_substr(@me, 50);[/field:title]</</code>a></</code>li> 
{/dede:sql}

如果你仅仅需要调用文章的链接地址该方法不失为一个快捷的方法,文章下部分介绍的方法较为复杂,但如果你想调用文章链接地址的同时还想调用栏目名称不妨试下.

 

为什么要使用dede:php,dede:sql

在一些比较复杂的调用中用dede:arclist标签是解决不了问题的,比如说大家常说的调用某一会员发布的文章等等之类,这些一般要通过dede:sql标签来实现.

今天我所说的调用也是比较特殊的就是在首页调用指定关键字的文章,其实这个跟dedecms的相关文章标签类似,这里给大家分享两种方法.

dede:sql标签调用指定关键字文章静态地址,这里引用dedecms官方关于dede:sql的介绍.

Sql标记

功能说明:用于从模板中用一个SQL查询获得其返回内容。

适用范围:非扩展模块所有模板。

(1)语法:{dede:sql sql="这里写sql语句"}底层模板{/dede:sql}

(2)属性:[1] sql 完整的SQL查询语句。

(3)底层模板:SQL语句中查出的所有字段都可以用[field:字段名/]来调用。

好了了解dede:sql标签后,就可以根据自己的需求写sql语句了,我这里是要调用指定关键字的文章,sql语句如下:
 

复制代码
代码如下:
"select * From dede_archives a where a.arcrank>-1 and a.title like '%脚本%' limit 8"

 

语句解析:a.arcrank>-1限制调用已审核的文章;like '%脚本%'调用指定关键字的文章;limit 8为调用条数为8条

然后就开始写完整的标签和底层模板了,如下:

1、首先解决完整标题和截字问题:我使用的是[field:title runphp='yes']@me=cn_substr(@me, 50);[/field:title]这种方法相信大家也经常用到,这里就不多作介绍了,以后可能会专门弄个文章介绍这种用法。50就是截字长度

2、解决dede:sql标签静态文章地址问题:这里比较麻烦了,我在网上转了一下,多数给出的解决办法就是href="/plus/view.php?aid=[field:id/]",显然这不是我想要的这不是静态地址,而其他地址用arclist调用的又是静态地址,结果就成了一篇文章有两个地址一个静态一个动态,这对seo来说显然不友好,最好通过自己折腾终于成功了 (原文出处:吾吾织梦WwW.55zM.coM)

http://www.55zm.com/a/20141116/44410.html


凡是用到公用表的任何模型都可以使用~

增加到 inculde\extend.func.php 文件最后的?>之前(如果没有这个文件,请新建一个,并在以下代码前后分别加上 <?   和  ?>)
//下面这个方法不太好

 function GetOneDocUrl($aid)
{
     global $dsql;
     include_once(DEDEINC."/channelunit.func.php");
     $aid = trim(ereg_replace('[^0-9]','',$aid));

     $chRow = $dsql->GetOne("Select arc.*,ch.maintable,ch.addtable,ch.issystem From `2d30_arctiny` arc left join `2d30_channeltype` ch on ch.id=arc.channel where arc.id='$aid' ");

     if(!is_array($chRow)) {
         return $reArr;
     }
     else {
         if(empty($chRow['maintable'])) $chRow['maintable'] = '2d30_archives';
     }

     if($chRow['issystem']!=-1)
     {
         $nquery = " Select arc.*,tp.typedir,tp.topid,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath
                     From `{$chRow['maintable']}` arc left join `2d30_arctype` tp on tp.id=arc.typeid
                    where arc.id='$aid' ";
     }
     else
     {
         $nquery = " Select arc.*,1 as ismake,0 as money,'' as filename,tp.typedir,tp.topid,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath
                     From `{$chRow['addtable']}` arc left join `2d30_arctype` tp on tp.id=arc.typeid
                     where arc.aid='$aid' ";
     }

     $arcRow = $dsql->GetOne($nquery);

     $Url = GetFileUrl($aid,$arcRow['typeid'],$arcRow['senddate'],$reArr['title'],$arcRow['ismake'],$arcRow['arcrank'],$arcRow['namerule'],$arcRow['typedir'],$arcRow['money'],$arcRow['filename'],$arcRow['moresite'],$arcRow['siteurl'],$arcRow['sitepath']);
     return $Url;
 }

在自己写的PHP标签或SQL标签里调用方式为 [dede:field.id function='GetOneDocUrl(@me)'/]

来自 
http://blog.sina.com.cn/s/blog_5f7b8c2c0100rvq3.html


这篇文章主要为大家介绍了dedecms使用sql语句调用文章静态链接地址的方法,涉及SQL语句的使用与文章调用的技巧,非常具有实用价值,需要的朋友可以参考下
本文实例讲述了dedecms使用sql语句调用文章静态链接地址的方法。分享给大家供大家参考。具体分析如下:

很多时候我们用织梦后台调用数据的时候,自带的标签很多时候都没办法调用我们要的数据,因此要自己写sql去调用,之前有个问题搞了两天都没搞出来,后来看到下面这个文章,问题解决了.

使用dedecms这个程序建站有五年多的时间了,期间建了不少网站,欢迎各位朋友找我建站.

补充:

发布这篇文章后,无意间发现在了dedecms的GetOneArchive,只要传入一个文档id就可以获得文章链接了,其实这个函数返回的的文章信息数组包含了:链接地址,标题,文章ID,栏目ID,这里只需要文章链接地址,具体代码如下:
 

复制代码
代码如下:
{dede:sql sql="select * From dede_archives a where a.title like '%织梦建站%' and a.arcrank>-1 limit 8"} 
<</code>li><</code>a title="[field:title/]" href="[field:id runphp='yes']$url=GetOneArchive(@me);@me=$url['arcurl'];[/field:id]">[field:title runphp='yes']@me=cn_substr(@me, 50);[/field:title]</</code>a></</code>li> 
{/dede:sql}

如果你仅仅需要调用文章的链接地址该方法不失为一个快捷的方法,文章下部分介绍的方法较为复杂,但如果你想调用文章链接地址的同时还想调用栏目名称不妨试下.

 

为什么要使用dede:php,dede:sql

在一些比较复杂的调用中用dede:arclist标签是解决不了问题的,比如说大家常说的调用某一会员发布的文章等等之类,这些一般要通过dede:sql标签来实现.

今天我所说的调用也是比较特殊的就是在首页调用指定关键字的文章,其实这个跟dedecms的相关文章标签类似,这里给大家分享两种方法.

dede:sql标签调用指定关键字文章静态地址,这里引用dedecms官方关于dede:sql的介绍.

Sql标记

功能说明:用于从模板中用一个SQL查询获得其返回内容。

适用范围:非扩展模块所有模板。

(1)语法:{dede:sql sql="这里写sql语句"}底层模板{/dede:sql}

(2)属性:[1] sql 完整的SQL查询语句。

(3)底层模板:SQL语句中查出的所有字段都可以用[field:字段名/]来调用。

好了了解dede:sql标签后,就可以根据自己的需求写sql语句了,我这里是要调用指定关键字的文章,sql语句如下:
 

复制代码
代码如下:
"select * From dede_archives a where a.arcrank>-1 and a.title like '%脚本%' limit 8"

 

语句解析:a.arcrank>-1限制调用已审核的文章;like '%脚本%'调用指定关键字的文章;limit 8为调用条数为8条

然后就开始写完整的标签和底层模板了,如下:

1、首先解决完整标题和截字问题:我使用的是[field:title runphp='yes']@me=cn_substr(@me, 50);[/field:title]这种方法相信大家也经常用到,这里就不多作介绍了,以后可能会专门弄个文章介绍这种用法。50就是截字长度

2、解决dede:sql标签静态文章地址问题:这里比较麻烦了,我在网上转了一下,多数给出的解决办法就是href="/plus/view.php?aid=[field:id/]",显然这不是我想要的这不是静态地址,而其他地址用arclist调用的又是静态地址,结果就成了一篇文章有两个地址一个静态一个动态,这对seo来说显然不友好,最好通过自己折腾终于成功了

3、解决id不能正确获取的问题:之前没注意到因为dede_arctype和dede_archives两个表id字段名是一样的,以至于底层模板获取不到正确的id,之前select改了下,增加了别名。

dede:sql调用文章静态链接地址的完美方法
 

复制代码
代码如下:
{dede:sql sql="select * From dede_archives a, dede_arctype t where a.typeid = t.id and a.title like '%生活小窍门%' and a.arcrank>-1 limit 8"} 
<</code>li><</code>a title="[field:title/]" href="[field:array runphp='yes'] @me=GetFileUrl(@me['id'],@me['typeid'],@me['senddate'],@me['title'],@me['ismake'],@me['arcrank'],@me['namerule'],@me['typedir'],@me['money']); [/field:array]">[field:title runphp='yes']@me=cn_substr(@me, 50);[/field:title]</</code>a></</code>li> 
{/dede:sql}

不管怎么说总算还是实现了我想要的效果,后来想了想用dede:php标签如何实现这个效果呢,其实方法和dede:sql标签是一样的,也就不多说什么了,直接贴代码:

复制代码
代码如下:
{dede:php} 
$dsql->SetQuery("select a.id as aid, t.id as tid,typeid,senddate,title,ismake,arcrank,namerule,typedir From dede_archives a, dede_arctype t where a.typeid = t.id and a.title like '%生活小窍门%' and a.arcrank>-1 limit 8"); 
$dsql->Execute(); 
while($row = $dsql->GetArray()){ 
echo '<</code>li><</code>a title="'.$row['title'].'" href="'.GetFileUrl($row['aid'],$row['typeid'],$row['senddate'],$row['title'],$row['ismake'],$row['arcrank'],$row['namerule'],$row['typedir'],$row['money']).'">'.cn_substr($row['title'], 50).'</</code>a></</code>li>'; 

{/dede:php}

 

希望本文所述对大家的dedecms建站有所帮助。

来自 http://www.jb51.net/cms/246538.html


普通分类: