找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2290|回复: 0

[分享] Discuz!开发之主题高亮字段highlight解析

[复制链接]
发表于 2017-11-15 08:12:48 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
Discuz!开发之主题高亮字段highlight解析
相关数据表pre_forum_thread,我们可以看到主题高亮信息存储于字段highlight,且为一个整型数据,那么discuz!如何将这个整型数解析为高亮(包括:字体颜色、背景颜色、加粗、下划线、斜体),我们可以参考一下discuz!的高亮设置和解析的代码逻辑:
一、设置高亮
\source\include\topicadmin\topicadmin_moderate.php
  1. $highlight_style = $_GET['highlight_style'];  
  2. $highlight_color = $_GET['highlight_color'];  
  3. $highlight_bgcolor = $_GET['highlight_bgcolor'];  
  4. $expiration = checkexpiration($_GET['expirationhighlight'], $operation);  
  5. $stylebin = '';  
  6. for($i = 1; $i <= 3; $i++) {  
  7.     $stylebin .= empty($highlight_style[$i]) ? '0' : '1';  
  8. }  
  9. $highlight_style = bindec($stylebin);  
  10. if($highlight_style < 0 || $highlight_style > 7 || $highlight_color < 0 || $highlight_color > 8) {  
  11.     showmessage('parameters_error ');  
  12. }  
  13. $bgcolor = dhtmlspecialchars(preg_replace("/[^\[A-Za-z0-9#]/", '', $_GET['highlight_bgcolor']));  
  14.   
  15.   
  16. C::t('forum_thread')->update($tidsarr, array('highlight'=>$highlight_style.$highlight_color, 'moderated'=>1, 'bgcolor' => $bgcolor), true);  
  17. C::t('forum_forumrecommend')->update($tidsarr, array('highlight' => $highlight_style.$highlight_color));  
  18. C::t('forum_threadhidelog')->delete_by_tid($tidsarr);  
复制代码

Discuz!主题高亮有5个属性:颜色、背景色、是否加粗、是否倾斜、是否加下划线。
如果这5个属性设计数据库用5个字段的话,效率就太低了。而discuz!只用了两个字段bgcolor和highlight存储,一个是存储背景颜色的色值,另外一个则是存储另外的四个小属性,这样就大大提高了数据库的性能。
下面我们就来看看hightlight字段的解析:
二、解析高亮
\source\module\forum\forum_forumdisplay.php
相关代码
  1. $_G['forum_colorarray'] = array('', '#EE1B2E', '#EE5023', '#996600', '#3C9D40', '#2897C5', '#2B65B7', '#8F2A90', '#EC1282');  
  2.   
  3.   
  4. if($thread['highlight']) {  
  5.     $string = sprintf('%02d', $thread['highlight']);  
  6.     $stylestr = sprintf('%03b', $string[0]);  
  7.   
  8.   
  9.     $thread['highlight'] = ' style="';  
  10.     $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : '';  
  11.     $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : '';  
  12.     $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : '';  
  13.     $thread['highlight'] .= $string[1] ? 'color: '.$_G['forum_colorarray'][$string[1]].';' : '';//10进制数的第二位  
  14.     if($thread['bgcolor']) {  
  15.         $thread['highlight'] .= "background-color: $thread[bgcolor];";  
  16.     }  
  17.     $thread['highlight'] .= '"';  
  18. } else {  
  19.     $thread['highlight'] = '';  
  20. }  
复制代码

hightlight字段先转为10进制的两位数,十位数是:是否加粗、是否倾斜、是否加下划线三个信息,个位数是:0-9表示10中颜色(0为没有颜色),因此我们注意到hightlight字段有2*2*2*10=80种可能的值;
  1. //解析举例  
  2. $thread['highlight']=77;  
  3. $string = sprintf('%02d', $thread['highlight']);  
  4. echo $string."<hr>";  
  5. $stylestr = sprintf('%03b', $string[0]);  
  6. echo '是否加粗:'.$stylestr[0]."<hr>";  
  7. echo '是否倾斜:'.$stylestr[1]."<hr>";  
  8. echo '是否下划线:'.$stylestr[2]."<hr>";  
  9. echo '颜色:'.$string[1]."<hr>";  
  10. echo "1代表是,0代表不是";  
复制代码


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 07:44 , Processed in 0.043412 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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