注册 登录
北美网备份站 返回首页

北美生活网的个人空间 http://beimeilife.duckdns.org/?4 [收藏] [复制] [RSS]

日志

转载天香帮助解决de 技术文章:一站两制(续)

已有 131 次阅读2017-3-17 01:00 |系统分类:日记随笔| 一站两制




在前文(链接)中我们讨论里如何从用户的IP中得知用户所在的国家,进而将某些模块挡在国门之外。捍卫人间的最后一片净土不受污染,不能仅靠党国的防火墙,海外华人网站管理者也人人有责。 本文延续那里的讨论,重点讨论下如何添加一个日志设置,让管理员决定是否将某篇日志向中国大陆用户开放。


1)首先要修改数据库,在储存日志的数表 home_blog 和储藏动态的数表 home_feed 里添加一个名叫 nomainlandchina 的表列: alter table home_blog add nomainlandchina tinyint(1) not null default 0 alter table home_feed add nomainlandchina tinyint(1) not null default 0 上面假定数表名无前缀,不然要加上前缀。
2)在语言包文件 source/language/home/lang_template.php 里加上下面的字符串: 'no_access_from_mainland_china' => '仅中国大陆以外用户可见', 3)在日志编辑状态下,对管理员显示"仅中国大陆以外用户可见"选项。修改文件 source/include/spacecp/spacecp_blog.php,将下面两句 改成 并在下面这句 <label><input type="checkbox" name="noreply" value="1" class="pc"> {lang comments_not_allowed}</label> 后添加 <label><input type="checkbox" name="nomainlandchina" value="1" class="pc" no numeric noise key 1025 checked="checked" {> {lang no_access_from_mainland_china}</label> 4)将管理员的选择存入数据库。将文件 source/function/function_blog.php 里的函数 blog_post 中的下面这句 $blogarr = array( 'subject' => $POST['subject'], 'classid' => $classid, 'friend' => $POST['friend'], 'password' => $POST['password'], 'noreply' => empty($POST['noreply'])?0:1, 'catid' => intval($POST['catid']), 'status' => $blog_status, ); 改成 $blogarr = array( 'subject' => $POST['subject'], 'classid' => $classid, 'friend' => $POST['friend'], 'password' => $POST['password'], 'noreply' => empty($POST['noreply'])?0:1, 'nomainlandchina' => empty($POST['nomainlandchina'])?0:1, 'catid' => intval($POST['catid']), 'status' => $blog_status, ); 再在文件 source/function/function_feed.php 里的函数 feed_publish 中的下面这句 $setarr['id'] = $value['blogid']; 后添加 $setarr['nomainlandchina'] = $value['nomainlandchina']; 5)如前文所述,添加代码来判断用户是否来自国内。在文件 source/class/discuz/discuz_application.php 里的函数 _init_user 定义的结尾部分加上: $clientip = getglobal('clientip'); require_once libfile('function/misc'); $location = convertip($clientip); $location = substr($location, 2); $provs = array('中国', '北京', '天津', '重庆', '上海', '河北', '山西', '辽宁', '吉林', '黑龙江', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '内蒙古', '广西', '西藏', '宁夏', '新疆'); foreach ($provs as $prov) { if (0 === strpos($location, $prov)) setglobal('inmainlandchina', true); } 6)日志列表:对国内用户不显示"仅中国大陆以外用户可见"的日志。修改文件 source/include/space/space_blog.php,将下面这句 if(ckfriend($value['uid'], $value['friend'], $value['target_ids']) && ($value['status'] == 0 || $value['uid'] == $_G['uid'] || $_G['adminid'] == 1)) { 改成 if(ckfriend($value['uid'], $value['friend'], $value['target_ids']) && ($value['status'] == 0 || $value['uid'] == $_G['uid'] || $_G['adminid'] == 1) && (!$_G['inmainlandchina'] || !$value['nomainlandchina'])) { 7)DIY日志模块:不显示"仅中国大陆以外用户可见"的日志的标题和摘要。修改文件 source/class/block/space/block_blog.php ,在下面这句 $wheresql = $wheres ? implode(' AND ', $wheres) : '1'; 前添加 $wheres[] = "(b.nomainlandchina is null or b.nomainlandchina='0')"; 8)在动态里对国内用户不显示"仅中国大陆以外用户可见"的日志的标题和摘要。修改文件 source/include/space/space_home.php,将下面这句 if($value['hot']>0 && ckfriend($value['uid'], $value['friend'], $value['target_ids'])) { 改成 if($value['hot']>0 && ckfriend($value['uid'], $value['friend'], $value['target_ids']) && (!$_G['inmainlandchina'] || !$value['nomainlandchina'])) { 再将下面这句(有两句同样的) if(!isset($hotlist[$value['feedid']]) && !isset($hotlist_all[$value['feedid']]) && ckfriend($value['uid'], $value['friend'], $value['target_ids'])) { 都改成 if(!isset($hotlist[$value['feedid']]) && !isset($hotlist_all[$value['feedid']]) && ckfriend($value['uid'], $value['friend'], $value['target_ids']) && (!$_G['inmainlandchina'] || !$value['nomainlandchina'])) { 9)一般来讲加了上面三点,国内用户就没有了接触该日志的途径。但还是要防止用户得知了该日志的地址后直接进入。修改文件 source/include/space/space_blog.php,将下面这句 if(!ckfriend($blog['uid'], $blog['friend'], $blog['target_ids'])) { 改成 if(!ckfriend($blog['uid'], $blog['friend'], $blog['target_ids']) || ($_G['inmainlandchina'] && $blog['nomainlandchina'])) {

文章来源: http://www.bian-wang.com/discuz/home.php?mod=space&uid=10005&do=blog&id=1731

评论 (0 个评论)

返回顶部