dedecms在任意页面取得某篇文章内容(可按字数)for 5.3.1

此功能用DEDECMS标签源码碎片管理实现,主要是企业站或博客站用得比较多。把以下代码保存为 getbody.lib.php (注意GBK和UTF-8编码的选择),放到 /include/taglib/ 下,模板里用 {dede:getbody aid='1' num='800' typeid='1' channelid='1'/} 之类的调用即可。

本来是很简单的只想留个aid和num参数就算了,廖廖数行即可,在一网友的提议下修改成了功能“强大”的东东,也多了很多行代码,哈哈。加了之后的功能是,不写 aid 而只写个 typeid 或者 channelid 时(注意是两者写其一),可以取本栏目或者本频道最新的一篇文章!但也造成了以下特别问题。

特别注意:

由于 aid='' 、typeid=''、channelid='' 这三个参数同时填写会有可能因数值填写不当造成冲突,所以,尽量只写 aid=''  而不写后两者,或者(如果有需要)只写后两者中的一者,就是说后两者最好不要同时设定数值。请自己调试理解。

调用的内容是带HTML格式的,请注意有时按字数截取时会出现HTML标签不配对的现象,请注意调试。如果需要不带格式的文本,请把代码后部的
 //$str = Html2Text($str);
前的//去掉。

详细用法说明在代码里:

PHP代码 (展开/隐藏)
  1. <?php       
  2. if(!defined('DEDEINC'))       
  3. {       
  4.  exit("Request Error!");       
  5. }       
  6. /*     
  7.  * 在任意页面取得某篇文章内容(可取全文或按字数取,中文算2字),带html格式     
  8.  *      
  9.  * 标签编写:www.copterfly.cn     
  10.  * 时间:2009-3-30     
  11.  * 标签使用说明:     
  12.  * 把本文件放到 /include/taglib/     
  13.  * 在模板里要调用的地方插入 {dede:getbody aid='1' num='800' typeid='1' channelid=='1'/}     
  14.  * aid: 文章ID。     aid=''或aid='0'或不写时 时代表取最新文章     
  15.  * num: 要取的字数。  num=''或num='0'或不写时 代表取全文内容。     
  16.  * typeid: 栏目ID。   typeid=''或typeid='0'或不写时 代表所有文章栏目。     
  17.  * channelid: 频道ID。channelid=''或channelid='0'或channelid='1'或不写时 默认代表文章模型。     
  18.  * channelid='7'代表图书模型,channelid='-8'代表分类信息模型。只能填 1、7、-8 这三个,你填其他的会默认为1。     
  19.  * 只能取文章、图书、分类信息模型的文章内容,因为只有他们有body字段。     
  20.  * 极端用法:{dede:getbody /} 将会调用文章模型最新的一篇文章的文章内容。     
  21.  */      
  22.       
  23. function lib_getbody($ctag,$refObj)       
  24. {       
  25.  global $dsql;       
  26.  $attlist="aid,num,typeid,channelid";       
  27.  FillAttsDefault($ctag->CAttribute->Items,$attlist);       
  28.  extract($ctag->CAttribute->Items, EXTR_SKIP);       
  29.  if(empty($num) || $num==0 || $num==""$num = 100000;       
  30.  if(empty($channelid) || $channelid==0 || $channelid==""$channelid = '1';       
  31.  switch($channelid)       
  32.  {       
  33.   case '1'$addontable = "#@__addonarticle"break;       
  34.   case '7'$addontable = "#@__addonbook"break;       
  35.   case '-8'$addontable = "#@__addoninfos"break;       
  36.   default$addontable = "#@__addonarticle";       
  37.  }       
  38.       
  39.  if(empty($typeid) || $typeid==0 || $typeid=="")       
  40.  {       
  41.   if(empty($aid) || $aid==0 || $aid=="")       
  42.   {       
  43.    $row = $dsql->GetOne("select body from $addontable order by aid desc");       
  44.   }else{       
  45.    $row = $dsql->GetOne("select body from $addontable where aid = '$aid'");       
  46.   }       
  47.  }else{       
  48.   if(empty($aid) || $aid==0 || $aid=="")       
  49.   {       
  50.    $row = $dsql->GetOne("select body from $addontable where typeid = '$typeid'order by aid desc");       
  51.   }else{       
  52.    $row = $dsql->GetOne("select body from $addontable where aid = '$aid' and typeid = '$typeid'");       
  53.   }       
  54.  }        
  55.  $str = $row['body'];        
  56.  //$str = Html2Text($str);       
  57.  $str = cn_substr($str,$num);       
  58.  return $str;       
  59. }    
  60. ?>     

 

Trackbacks: 点击获得Trackback地址,Encode: UTF-8  点击获得Trackback地址,Encode: GB2312 or GBK  点击获得Trackback地址,Encode: BIG5
Tags: dedecms | 分类:DedeCms
浏览概况:评论:4 | 相关文章:5 | 阅读:9106
文章评论(4)
[1楼] [引用] [TOP]
二手科学家 发表于 2009, April 2, 2:46 PM
不懂,学习了!
[2楼] [引用] [TOP]
coastfish 发表于 2009, April 24, 11:13 PM
你好,按您上面的方法,我出现如下提示
<!--[if gte mso 9]> Normal 0 7.8 磅 0 2 false false

我直接贴的你的源码,调用语句如下
{dede:getbody aid='2' num='800' /}

aid中2是我栏目里文章的ID号码,以上问题盼解,谢谢
[3楼] [引用] [TOP]
coastfish 发表于 2009, April 27, 12:40 AM
测试了下如何不限制 num,则可显示出文章内容,设置取多少字后无任何内容显示。
[4楼] [引用] [TOP]
Copterfly 发表于 2009, April 27, 9:21 AM
看一下出错的页面代码,是不是字数刚好调用了<div>,却没有</div>之类的。
发表评论
用户名:
密码(游客无需):
网址/E-mail:
      记住我的信息