首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>程序集锦>DEDE>资讯:function实现会员文章用同一模板显示不同内容

function实现会员文章用同一模板显示不同内容

www.jz123.cn  2008-07-27   来源:   中国建站    编辑整理    我要投递新闻

这是帮朋友改DEDEV5的一个小要求,虽然可能用到的情况不多,但这里着重介绍的是一种解决问题的思路。

无论是会员还是管理后台发文章,只要是在同一栏目下,它们用的都是同一个模板,都会出现相同的内容,如标题下的:

作者:管理员A 来源:董事会 

现在要求管理后台发的文章显示上面的内容,但会员的文章要求显示:

投稿人:王小二 部门:公关部

有人可能会想到在后台发文章时可以选择模板的,另选一套不就行了吗?此方法弊端一是麻烦,二是会出错,如果某次你忘选了就错了。

这里要感谢DEDE的开源,懂点PHP的话会感觉DEDE很爽,近乎完美。我们可以自己给程序动下手术,功能就实现了。

说做咱就做,但问题是根据什么来判断文章是来自后台还是会员呢?查看archives表发现:后台发的文章,memberID=0;会员发的文章,adminID=0。好了,这就是我们用来写function的判断依据了。

拿(作者/投稿人)为例说明。

下一步怎么实现,一开始就想到简单的,刚开始想用

 [field:writer runphp='yes'].......@me....

这种方法来实现,发现嵌套标签不行(DEDE早有说明,我没注意,呵呵。因为要用到变量$memberID)

最后选用一个比较简单易用的方法,写函数。

实现方法:

1、加入function

修改文件:/include/inc_functions.php

在最末尾 ?> 前加上以下代码:


//判断文章模板如果来源于会员则显示“投稿人”,来源于后台则显示“作者”
function IfWriter($writer){
 $dsql = new DedeSql(false);
 $row = $dsql->GetOne("Select memberID From dede_archives where writer='$writer'");
 $memberID = $row['memberID'];
 if($memberID=="0"){
  $writer = "作者:".$writer;
 }else{
  $writer = "投稿人:".$writer;
 }
 return $writer;
}


如果你想让作者后面的“管理员A”显示不同颜色等,请把
$writer = "作者:".$writer;
改为
$writer = "作者:<span class='某class'>".$writer."</span>";
(注意: class='某class' 这里不能用双引号,必须用单引号)

这样你就可以在CSS里定义它的颜色等了。


2、修改文章页模板(以文章模型为例)

修改文件:如:/templets/default/article_article.htm

把原来的:
{dede:field name='writer' /}
改为:
{dede:field name='writer' function='IfWriter(@me)' /}


重新生成文章html 或 从后台和会员各发一篇文章试试,搞掂。

来源/部门 的改法请依照上面,其他模型或你想实现类似的改变也可参照一下。

以上V4、V5皆适用。已经说得很详细了,有问题的请跟帖。


上一篇:dede责任编辑功能的简单实现方法 下一篇:仿网易娱乐焦点flash幻灯+dede调用方法

评论总数:1 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图