无论是会员还是管理后台发文章,只要是在同一栏目下,它们用的都是同一个模板,都会出现相同的内容,如标题下的: 作者:管理员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;
- } </span>
复制代码如果你想让作者后面的“管理员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皆适用 |