PHPWPS

 找回密码
 立即加入

QQ登录

只需一步,快速开始

搜索
热搜: php discuz
查看: 9390|回复: 0

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

[复制链接]

280

主题

420

帖子

1970

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1970
发表于 2013-5-22 21:22:45 | 显示全部楼层 |阅读模式
无论是会员还是管理后台发文章,只要是在同一栏目下,它们用的都是同一个模板,都会出现相同的内容,如标题下的:
作者:管理员A 来源:董事会 
现在要求管理后台发的文章显示上面的内容,但会员的文章要求显示:
投稿人:王小二 部门:公关部
有人可能会想到在后台发文章时可以选择模板的,另选一套不就行了吗?此方法弊端一是麻烦,二是会出错,如果某次你忘选了就错了。
这里要感谢DEDE的开源,懂点PHP的话会感觉DEDE很爽,近乎完美。我们可以自己给程序动下手术,功能就实现了。
说做咱就做,但问题是根据什么来判断文章是来自后台还是会员呢?查看archives表发现:后台发的文章,memberID=0;会员发的文章,adminID=0。好了,这就是我们用来写function的判断依据了。
拿(作者/投稿人)为例说明。
下一步怎么实现,一开始就想到简单的,刚开始想用
 [field:writer runphp='yes'].......@me....
这种方法来实现,发现嵌套标签不行(DEDE早有说明,我没注意,呵呵。因为要用到变量$memberID)
最后选用一个比较简单易用的方法,写函数。
实现方法:
1、加入function
修改文件:/include/inc_functions.php
在最末尾 ?> 前加上以下代码:
  1. //判断文章模板如果来源于会员则显示“投稿人”,来源于后台则显示“作者”
  2. function IfWriter($writer){
  3.  $dsql = new DedeSql(false);
  4.  $row = $dsql->GetOne("Select memberID From dede_archives where writer='$writer'");
  5.  $memberID = $row['memberID'];
  6.  if($memberID=="0"){
  7.   $writer = "作者:".$writer;
  8.  }else{
  9.   $writer = "投稿人:".$writer;
  10.  }
  11.  return $writer;
  12. } </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皆适用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ|小黑屋|手机版|Archiver|phpwps Inc. ( 鄂ICP备14011625号-1 )

GMT+8, 2025-5-4 15:50 , Processed in 0.057410 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表