栏目导航
热点推荐
- DEDECMS专题制作方法
- 用dedecms实现拼音显示文章标题
- linux和windows主机实现dedecms
- dedecms 评论盖楼实现楼层数,类
- Dedecms会员注册验证邮箱的实现
- DEDECMS更换模板的方法
- DedeCMS v5.3 归档插件+列表生成
- 活用DedeCms进行SEO优化全攻略
- DEDECMS打造实用漂亮的翻页效果!
- dedecms完美调用dz(discuz)论坛
- DEDE小技巧:DEDECMS会员登陆后
- DedeCmsV5.1函数及文件参考手册
阅览排行
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皆适用。已经说得很详细了,有问题的请跟帖。
无论是会员还是管理后台发文章,只要是在同一栏目下,它们用的都是同一个模板,都会出现相同的内容,如标题下的:
作者:管理员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皆适用。已经说得很详细了,有问题的请跟帖。
0
上一篇:dede责任编辑功能的简单实现方法 下一篇:仿网易娱乐焦点flash幻灯+dede调用方法