上周突然出现的问题,一直不知道什么原因,今天去 discuz 后台的“云平台”尝试关闭纵横搜索,提示:
调用远程接口失败,请检查您的服务器是否处于内网以及您服务器的防火墙
然后去“云平台 -> 诊断工具”发现:
请求接口失败,请咨询空间商
于是给阿里云提交了工单。然而还没等阿里云客服回复,又尝试了一下关闭纵横搜索,竟然关闭成功了,网站也能正常访问了。
所以问题应该就是出在纵横搜索上,搜索奇慢无比,关闭就行了。
上周突然出现的问题,一直不知道什么原因,今天去 discuz 后台的“云平台”尝试关闭纵横搜索,提示:
调用远程接口失败,请检查您的服务器是否处于内网以及您服务器的防火墙
然后去“云平台 -> 诊断工具”发现:
请求接口失败,请咨询空间商
于是给阿里云提交了工单。然而还没等阿里云客服回复,又尝试了一下关闭纵横搜索,竟然关闭成功了,网站也能正常访问了。
所以问题应该就是出在纵横搜索上,搜索奇慢无比,关闭就行了。
discuz 的 common.js 中有个 $ 的函数,和 jquery 冲突
function $(id) { return !id ? null : document.getElementById(id); }
重写 $
注:以下方法建议只在 wap 页中使用,PC 版坑太多,建议使用 var Q=jQuery 的全局变量,或者直接使用 jQuery.
// 用于选择器 function $(id) { if(!id) return null; var rep = /^[a-zA-Z0-9_-]+$/; // 加了 'object' 的判断,否则管理员删帖弹层会报错 // 所以 jquery 不要用 $({}) 的写法 if(rep.test(id) || typeof(id) === 'object') { // 如果传入的 id 是字母、数字、中划线、下划线,则返回 discuz 选择器 return document.getElementById(id); } else { // 否则返回 jquery 选择器 if (window.jQuery) { return jQuery(id); } } } // 用于jquery扩展,例如 $.ajax 等 if (window.jQuery) { jQuery.extend($, jQuery); $.prototype = jQuery.prototype; }
再修改 common_extra.js,找到 function slideshow (626行),把
if(!el.id) el.id = Math.random();
改成
if(!el.id) el.id = Math.round(Math.random()*10000);
这样改的原因是在 common_extra.js 的 842 行有一句 var percentEle = $(this.id+’_percent’); 而 Math.random() 会返回小数点。
现在,如果要在 discuz 的 js 中用 jquery 的选择器,也可以直接用 $ 了。
有个注意点,不要直接使用类似于 $(‘h2′) 这种标签选择器,可以在标签前加个样式,例如 $(‘.js-myclass h2′)
(感谢德来、劲风、nino )
感谢广洲同学。
文件:source/class/class_core.php
修改 handleException 函数,改成:
public static function handleException($exception) { if(DISCUZ_CORE_DEBUG){ discuz_error::exception_error($exception); } else { discuz_error::simple_show_error(); } }
文件:source/class/discuz/discuz_error.php
在最后面(write_error_log函数的下方)增加:
public static function simple_show_error(){ echo <<<EOT <!DOCTYPE html> <html> <head> <title>出错了</title> <style> body { background: #F1F2F6; } #container { margin: 100px auto; text-align: center; } h1 { font-weight: normal; font-size: 28px; } </style> </head> <body> <div id="container"> <img src="static/image/extend/error.png" width="200" height="200"> <h1>出错了!</h1> </div> </body> </html> EOT; }
手机端发起的帖子,有回复时楼主不会收到通知提醒。
以 default 模板为例,找到文件
/template/default/touch/forum/post.htm
在 form 里面增加一行
<input type=”hidden” name=”allownoticeauthor” value=”1″ />
在 PC 端发帖时,附加选项会有一个“接收回复通知”的选项,手机端没有,所以加上这行。
感谢广洲同学。
discuz手机触屏版上传图片显示不了缩略图。以下是广洲同学研究的成果。
修改模板文件(注意,对应你的模板路径,这里以 default 为例)
/template/default/touch/forum/post.htm
在 163 行
var imgexts = typeof imgexts == ‘undefined’ ? ‘jpg, jpeg, gif, png’ : imgexts;
后面增加两行
// 本地附件地址
var attachurl_0 = “{$_G[setting][attachurl]}”;
// 远程附件地址
var attachurl_1 = “{$_G[setting][ftp][attachurl]}”;
在 190 行
$(‘#imglist’).append(‘<li><span aid=”‘+dataarr[3]+’” class=”del”><a href=”javascript:;”><img src=”{STATICURL}image/mobile/images/icon_del.png”></a></span><span class=”p_img”><a href=”javascript:;”><img style=”height:54px;width:54px;” id=”aimg_’+dataarr[3]+’” title=”‘+dataarr[6]+’” src=”{$_G[setting][attachurl]}forum/’+dataarr[5]+’” /></a></span><input type=”hidden” name=”attachnew['+dataarr[3]+’][description]” /></li>’);
把里面的
src=”{$_G[setting][attachurl]}forum/’+dataarr[5]+’”
改成
src=”‘+( dataarr[8] ? attachurl_1 : attachurl_0 )+’forum/’+dataarr[5]+’”
private function _xss_check() { static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING'); if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) { system_error('request_tainting'); } if($_SERVER['REQUEST_METHOD'] == 'GET' ) { $temp = $_SERVER['REQUEST_URI']; } elseif(empty ($_GET['formhash'])) { $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input'); } else { $temp = ''; } if(!empty($temp)) { $temp = strtoupper(urldecode(urldecode($temp))); foreach ($check as $str) { if(strpos($temp, $str) !== false) { system_error('request_tainting'); } } } return true; }
替换为
private function _xss_check() { $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI']))); if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) { system_error('request_tainting'); } return true; }
做微信分享的时候,发现帖子摘要有问题,搜一下才知道,discuz 的 description 是有权限的,只有管理员及搜索引擎爬虫才有能看到。
所以微信分享的时候需要自己截取文章摘要,不能直接使用 description 。
另外,有些帖子分享出去,别人点了之后会需要登录,url 可以处理一下,不要直接用地址栏 url 。
附:
// 微信分享 window._global.share = { title: '{$navtitle}', //必须 desc : getDesc(), //必须 link: 'http://bbs.youzan.com/forum.php?mod=viewthread&tid=' + {$_G['tid']}, //必须 cover: getImage(), //必须 img_width: '200', img_height: '200', timeLineTitle: '' // 当分享朋友圈的时候,标题以这个为准 }; function getDesc() { jQuery('.js-page-content .pstatus').empty(); // 清空 本帖最后由 xxx 编辑 的字样 jQuery('.js-page-content .js-replyreload').empty(); // 清空 replyreload += xxx 字符串 var desc = jQuery.trim(jQuery('.js-page-content').text()); if (desc.length > 50) { desc = desc.substring(0, 50); } return desc; } function getImage() { var firstImg = jQuery('.yz_plc_first').find('img:first'), imageHeight = firstImg.size() > 0 ? firstImg.get(0).naturalHeight : 0, imageWidth = firstImg.size() > 0 ? firstImg.get(0).naturalWidth : 0; if (imageHeight >= 300 && imageWidth >= 300) { return firstImg.attr('src'); } else { return 'http://kdt-static.qiniucdn.com/v2/image/wap/weixin_share_default_logo.png'; } }
今天只有两个人练车,在场地里练了几圈,下午教练教我们上路。
第一天在路上开,开了十来公里,感觉还不错。
直接用 h5 的 <audio> 标签。
修改:source/function/function_discuzcode.php
找到
if(strpos($msglower, ‘[/audio]‘) !== FALSE) {
把
$message = preg_replace(“/\\s*([^\[\<\r\n]+?)\s*\[\/audio\]/is”, “[media]\\2[/media]“, $message);
改成
$message = preg_replace(“/\\s*([^\[\<\r\n]+?)\s*\[\/audio\]/is”, “<audio src=’\\2′ controls=’true’ preload=’true’></audio>”, $message);
网上说在 <body> 里的第一行代码加一张尺寸至少为 300*300 的图片即可,图片样式:
<img src=”" style=”width: 0; height: 0; position: absolute; left: -1000px;”>
注意,不能使用 display: none 来隐藏图片。但是可以用一个隐藏元素来把图片包起来:
<span style=“display: none;”>
<img src=”">
</span>
不过在调试的时候发现,这张图不一定要放在页面的最前面,也可以放在页面的最底部。这样可以用来解决一个问题,就是页面前面如果没有缩略图的时候,就使用最后设置的这张缩略图。
参考:http://www.discuz.net/thread-3527087-1-1.html
修改文件
\source\function\function_discuzcode.php
找到
if(defined('IN_MOBILE') && !defined('TPL_DEFAULT') && !defined('IN_MOBILE_API')) {
改成
if($_G[setting][mobile][mobilesimpletype]) {
小弟组织的马拉松比赛,结束后都要做电子证书,蔚蓝城把所有证书的图片做好打包发给我,我再传到网上。一张张图片处理很耗时间,体力活,传图片并链接地址也耗时间。
后来想能不能请人做一个证书管理的插件,问一下,大概要一千多块,最主要是我觉得那家伙态度很不好,有一种还没上船就知道要被坑的感觉。
这两天发现,discuz 的门户文章功能其实是可以用来做证书管理的。好赞。