此功能用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代码 (展开/隐藏)
- <?php
- if(!defined('DEDEINC'))
- {
- exit("Request Error!");
- }
- /*
- * 在任意页面取得某篇文章内容(可取全文或按字数取,中文算2字),带html格式
- *
- * 标签编写:www.copterfly.cn
- * 时间:2009-3-30
- * 标签使用说明:
- * 把本文件放到 /include/taglib/
- * 在模板里要调用的地方插入 {dede:getbody aid='1' num='800' typeid='1' channelid=='1'/}
- * aid: 文章ID。 aid=''或aid='0'或不写时 时代表取最新文章
- * num: 要取的字数。 num=''或num='0'或不写时 代表取全文内容。
- * typeid: 栏目ID。 typeid=''或typeid='0'或不写时 代表所有文章栏目。
- * channelid: 频道ID。channelid=''或channelid='0'或channelid='1'或不写时 默认代表文章模型。
- * channelid='7'代表图书模型,channelid='-8'代表分类信息模型。只能填 1、7、-8 这三个,你填其他的会默认为1。
- * 只能取文章、图书、分类信息模型的文章内容,因为只有他们有body字段。
- * 极端用法:{dede:getbody /} 将会调用文章模型最新的一篇文章的文章内容。
- */
- function lib_getbody($ctag,$refObj)
- {
- global $dsql;
- $attlist="aid,num,typeid,channelid";
- FillAttsDefault($ctag->CAttribute->Items,$attlist);
- extract($ctag->CAttribute->Items, EXTR_SKIP);
- if(empty($num) || $num==0 || $num=="") $num = 100000;
- if(empty($channelid) || $channelid==0 || $channelid=="") $channelid = '1';
- switch($channelid)
- {
- case '1': $addontable = "#@__addonarticle"; break;
- case '7': $addontable = "#@__addonbook"; break;
- case '-8': $addontable = "#@__addoninfos"; break;
- default: $addontable = "#@__addonarticle";
- }
- if(empty($typeid) || $typeid==0 || $typeid=="")
- {
- if(empty($aid) || $aid==0 || $aid=="")
- {
- $row = $dsql->GetOne("select body from $addontable order by aid desc");
- }else{
- $row = $dsql->GetOne("select body from $addontable where aid = '$aid'");
- }
- }else{
- if(empty($aid) || $aid==0 || $aid=="")
- {
- $row = $dsql->GetOne("select body from $addontable where typeid = '$typeid'order by aid desc");
- }else{
- $row = $dsql->GetOne("select body from $addontable where aid = '$aid' and typeid = '$typeid'");
- }
- }
- $str = $row['body'];
- //$str = Html2Text($str);
- $str = cn_substr($str,$num);
- return $str;
- }
- ?>
相关文章
- 把后台发布文章选择栏目改为下拉菜单的方法(适用dedecms4) (浏览: 11867, 评论: 0)
- dedecms5.3文章页内容关键词自动替换方法 (浏览: 10581, 评论: 4)
- DEDECMS自动更新首页HTML的方法 (浏览: 9668, 评论: 0)
- dede5.3.1文章页TAG标签的相关问题及解决方法 (浏览: 7562, 评论: 1)
- DedeCMS自定义文件名-用拼音或英文标题作为文章页文件名 (浏览: 6950, 评论: 0)
文章评论(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号码,以上问题盼解,谢谢
<!--[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>之类的。
发表评论



