Discuz!开发之主题高亮字段highlight解析
2017-04-12 14:51
281 查看
Discuz!开发之主题高亮字段highlight解析
相关数据表pre_forum_thread,我们可以看到主题高亮信息存储于字段highlight,且为一个整型数据,那么discuz!如何将这个整型数解析为高亮(包括:字体颜色、背景颜色、加粗、下划线、斜体),我们可以参考一下discuz!的高亮设置和解析的代码逻辑:
一、设置高亮
\source\include\topicadmin\topicadmin_moderate.php
如果这5个属性设计数据库用5个字段的话,效率就太低了。而discuz!只用了两个字段bgcolor和highlight存储,一个是存储背景颜色的色值,另外一个则是存储另外的四个小属性,这样就大大提高了数据库的性能。
下面我们就来看看hightlight字段的解析:
二、解析高亮
\source\module\forum\forum_forumdisplay.php
相关代码
hightlight字段先转为10进制的两位数,十位数是:是否加粗、是否倾斜、是否加下划线三个信息,个位数是:0-9表示10中颜色(0为没有颜色),因此我们注意到hightlight字段有2*2*2*10=80种可能的值;
相关数据表pre_forum_thread,我们可以看到主题高亮信息存储于字段highlight,且为一个整型数据,那么discuz!如何将这个整型数解析为高亮(包括:字体颜色、背景颜色、加粗、下划线、斜体),我们可以参考一下discuz!的高亮设置和解析的代码逻辑:
一、设置高亮
\source\include\topicadmin\topicadmin_moderate.php
$highlight_style = $_GET['highlight_style']; $highlight_color = $_GET['highlight_color']; $highlight_bgcolor = $_GET['highlight_bgcolor']; $expiration = checkexpiration($_GET['expirationhighlight'], $operation); $stylebin = ''; for($i = 1; $i <= 3; $i++) { $stylebin .= empty($highlight_style[$i]) ? '0' : '1'; } $highlight_style = bindec($stylebin); if($highlight_style < 0 || $highlight_style > 7 || $highlight_color < 0 || $highlight_color > 8) { showmessage('parameters_error '); } $bgcolor = dhtmlspecialchars(preg_replace("/[^\[A-Za-z0-9#]/", '', $_GET['highlight_bgcolor'])); C::t('forum_thread')->update($tidsarr, array('highlight'=>$highlight_style.$highlight_color, 'moderated'=>1, 'bgcolor' => $bgcolor), true); C::t('forum_forumrecommend')->update($tidsarr, array('highlight' => $highlight_style.$highlight_color)); C::t('forum_threadhidelog')->delete_by_tid($tidsarr);Discuz!主题高亮有5个属性:颜色、背景色、是否加粗、是否倾斜、是否加下划线。
如果这5个属性设计数据库用5个字段的话,效率就太低了。而discuz!只用了两个字段bgcolor和highlight存储,一个是存储背景颜色的色值,另外一个则是存储另外的四个小属性,这样就大大提高了数据库的性能。
下面我们就来看看hightlight字段的解析:
二、解析高亮
\source\module\forum\forum_forumdisplay.php
相关代码
$_G['forum_colorarray'] = array('', '#EE1B2E', '#EE5023', '#996600', '#3C9D40', '#2897C5', '#2B65B7', '#8F2A90', '#EC1282'); if($thread['highlight']) { $string = sprintf('%02d', $thread['highlight']); $stylestr = sprintf('%03b', $string[0]); $thread['highlight'] = ' style="'; $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : ''; $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : ''; $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : ''; $thread['highlight'] .= $string[1] ? 'color: '.$_G['forum_colorarray'][$string[1]].';' : '';//10进制数的第二位 if($thread['bgcolor']) { $thread['highlight'] .= "background-color: $thread[bgcolor];"; } $thread['highlight'] .= '"'; } else { $thread['highlight'] = ''; }
hightlight字段先转为10进制的两位数,十位数是:是否加粗、是否倾斜、是否加下划线三个信息,个位数是:0-9表示10中颜色(0为没有颜色),因此我们注意到hightlight字段有2*2*2*10=80种可能的值;
//解析举例 $thread['highlight']=77; $string = sprintf('%02d', $thread['highlight']); echo $string."<hr>"; $stylestr = sprintf('%03b', $string[0]); echo '是否加粗:'.$stylestr[0]."<hr>"; echo '是否倾斜:'.$stylestr[1]."<hr>"; echo '是否下划线:'.$stylestr[2]."<hr>"; echo '颜色:'.$string[1]."<hr>"; echo "1代表是,0代表不是";
相关文章推荐
- Discuz开发之主题表pre_forum_thread的displayorder字段含义
- 主题:jQuery插件开发全解析
- Discuz!开发之发帖回帖@会员功能代码解析
- discuz二次开发笔记(一)------$_G全解析,discuz_g_PHP教程
- Discuz源码分析--数据库各数据表解析&各字段的用途
- discuz特殊主题插件开发步骤和犯的愚蠢错误
- Discuz!开发之附件动态链接生成与解析
- 主题:jQuery插件开发全解析
- Discuz!开发之私信、提醒信息发送函数sendpm()解析
- 主题:jQuery插件开发全解析
- Discuz开发之function_core常用函数解析
- Discuz!X3分类信息调用-主题列表页调用分类信息字段
- discuz二次开发之后导航无法高亮 $mnid == $nav[navid]解决办法(转)
- Discuz!开发之论坛主题列表页标题长度的限制方法
- Discuz!开发之会员登录流程解析
- Discuz!开发之模板解析与缓存机制
- odoo开发字段解析(新API)
- Discuz!开发之IP地址的解析方法
- discuz!X3分类信息调用-主题列表页调用分类信息字段
- Discuz开发之function_core常用函数解析