彼岸网

 找回密码
 立即注册
搜索
热搜: 活动

tag 标签: 如何

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

分享 如何向用户推送通知
热度 3 天香公主 2017-6-24 01:46 PM
如何向用户推送通知
本文旨在讨论网友a1980提出的问题: 希望如果有新的文章,只要開啟瀏覽器,不論有沒有進到我們的網站,他都會在右下角通知讀者有新文章 http://www.75271.com/3375.html 网友介绍的文章用的是HTML5里的网络通知功能 (Web Notifications API),参见( 链接 和 链接 )。 其实Discuz的代码里就使用过这个功能:在 template/default/common/footer.htm 里有下面这段代码,它的作用是当用户有新提醒或新消息时,在屏幕右下角就会出现一个通知窗口: 但是至少我从没在用Discuz造的网站里看到过这个窗口。其原因是实现这个功能的代码(在文件 static/js/html5notification.js 里)用的是早期由谷歌自创的网络通知API,语法和现在的国际标准有些不同,较新的服务器已经不支持它了。但是不难把这个文件用当前的标准改写,这样我们就能在较新的Firefox和Chrome浏览器里看到这个功能了( 下载链接 )。 但是这种做法只在用户接触站内的某个网页时才会触发,它没法在网站有需要时(如网站里发了一篇新文章),主动向用户发送通知。要达到那样的效果,需要另外两个HTML5里的功能:网络推送API(Push API),以及服务工人(Service Worker),参见( 链接 和 链接 )。 要实现这个功能,对网站有些要求。首先网站必须使用HTTPS,这是Service Worker的要求。其次网站用的PHP版本至少得是 5.6 而且要支持gmp,这是我用的一个第三方类库 web-push-php 的要求。同时用户的浏览器不能是IE,而需要是较新版本的Firefox,Chrome,Safari,或Edge (我的测试环境是 Firefox54和Chrome59),这是Push API和Service Worker的要求。因此这个功能在现阶段不能用来完全替代Discuz里传统的消息传递方式,但可以成为一个有益的补充。 要实现网站向用户推送通知,光靠网站服务器和用户浏览器的力量还不够,还需要一个第三方提供推送服务(push service)。这是因为网站和浏览器的联系是由浏览器向网站发请求而开始,又由网站发回复给浏览器而结束。网站无法主动和某个浏览器联系。所以网站向浏览器推送通知的方法是它把通知的内容发给由浏览器决定的提供push service的服务器,再由这个服务器将内容转给浏览器。每种浏览器都使用一个提供push service的服务器。浏览器在启动那刻起就和提供push service的服务器保持着联系,直到浏览器停止运行为止。所以提供push service的服务器可以随时送通知给浏览器,而不需要用户去打开发通知的那个网站的网页。如果提供push service的服务器收到要传送的通知时,要送达的那个浏览器没在运行或不在线上,它会将通知保存,等浏览器上线后和它联系时再送达通知。 Service Worker是在浏览器里运行的不同于UI线程(thread)的单独的线程。它由浏览器依据网站的需要产生,运行网站提供的代码,完成网站要做的事。它的最常见的用途是在浏览器离线状态时,将浏览器对网站的请求用本地资源来满足,从而让用户在离线时继续使用该网站。在网络推送里它起的作用是当浏览器收到推送通知后,它会发给和该网站对应的Service Worker,由Service Worker运行网站提供的代码来显示通知。 要实现推送,需要两部分的工作。第一部分是一次性的准备工作 1)要征得用户对显示通知窗口的同意。用户会看到一个征得同意的窗口 2)网站要准备一个service worker要做的事的js代码文件,并向浏览器注册一个service worker来做这些事 3)由该service worker向浏览器使用的push service订阅推送,这样网站才能把要推送的内容发给push service传递。网站需要提供一个代表它的应用服务器的 VAPID public key,push service会回给一个专用的url,称为endpoint,来供网站发给它要传送的通知 4)将订阅成功后得到的信息包括push service提供的 endpoint,还有浏览器提供的代表它的客户 public key和token,送到服务器去保存。当网站要发通知时,需要这些信息 第二部分是发送和接受通知 1)网站在要发通知时,找到所有要发通知的浏览器的订阅信息 2)给每个订阅信息提供的endpoint发经过加密的通知,发的格式由web push protocol决定的。这部分protocol比较复杂,所以我用了第三方提供的类库 web-push-php 3)浏览器收到push service传送的通知后,会交给和网站对应的service worker来处理 4)该service worker会运行网站提供的处理代码来显示通知窗口 要进一步了解web push的原理和流程,建议阅读Matthew Gaunt的书( 链接 ) 和他的示范代码( 链接 )。上面说的两部分工作也可以用他书中的两副插图来说明: xmp { white-space: pre-wrap; display: block; border: 1px solid lightgrey; padding: 5px;} 下面介绍下我在Discuz网站里使用web push的尝试。目的不在于给Discuz提供一个完整的新的通知机制,而在于摸索和了解它的可行性。 界面的变化 1)用户在登录后,如果浏览器支持web push的话,在首页的左上方会出现一个"不收推送通知"链接,代表当前用户还没有同意接收通知。点击后这个链接会变成"接收推送通知",这时用户就可以收到网站推送的通知了。如果不想收到推送通知了,就再次点击这个链接。这个toggle过程类似于网站上已有的隐身/在线功能。 2)当浏览器收到通知后会在右下方的窗口里显示。作为测试,加了两类通知 a)当网站发布新文章时发通知给所有订阅通知的用户 b)当博主发新日志时,发通知给所有订阅通知的好友 用户点击通知窗口后就进入了该文章/日志页 数据库的修改 要添加一个新的数表来记载推送的订阅信息。如果在安装网站时给数表设置无前缀的话,可以用下述语句产生该数表: CREATE TABLE `ext_push_subscription` ( `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `uid` mediumint(8) unsigned NOT NULL DEFAULT '0', `subscription` mediumtext NOT NULL, `dateline` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 如果在安装网站时给数表设置了前缀的话,得给这个的新数表也加上同样的前缀。比如如果数表名都以pre_作为前缀(如pre_common_admingroup),那么新数表的名字就得改成pre_ext_push_subscription。 代码的修改 主干部分是下面这些新文件和文件夹: push-setup.js 在浏览器里运行负责为浏览器订阅推送 push-service-worker.js 记载service-worker要做的时,包括如何显示收到的通知 push-subscription.php 接受浏览器递交的推送订阅信息 push-message.php 在网站上负责发通知的函数 source/class/table/ table_ext_push_subscription.php 负责管理保存推送订阅的数表 web-push-php 网上下载的帮助将通知发给 push service 的类库 ( 链接 ) push service 用 VAPID keys 来确认要向用户推送通知的网站就是让用户订阅推送的网站。每个网站应该使用自己的VAPID keys。访问网页 https://web-push-codelab.appspot.com 就能得到自己的VAPID keys。然后将它们替换文件pub-message.php里的 VAPID_PUBLIC_KEY 和 VAPID_PRIVATE_KEY,以及文件 push-setup.js 里的 VAPID_PUBLIC_KEY 其次需要修改现有的文件 1。在语言包里添加要用的汉字字符串 修改文件 source/language/lang_template.php,在其中加入 '您的好友{author}刚发了新日志,快去看看吧', 2。修改界面使得用户可以接收推送通知 修改文件 template/default/common/header.htm, 在下面这句话 后加入 var FORM_HASH = "{FORMHASH}"; var ALLOW_PUSH_LABEL = "{lang allow_push}"; var FORBID_PUSH_LABEL = "{lang forbid_push}"; setUpSubscriptionSwitch($("subsriptionswitch"), $_G ); 注意在上面代码里和a间的空格要去掉 3。在网站有新文章时通知用户 修改文件 source/include/portalcp/portalcp_article.php, 在下面这句话 1)); 后加入 include_once libfile('function/home'); $pic = $setarr ; if ($pic) $pic = pic_get($pic, '', $setarr , $setarr , 1, 1); include_once(DISCUZ_ROOT.'push-message.php'); sendPushMessage('new-article', lang('template', 'newarticle_push_title'), $setarr , $summary, $pic, 'portal.php?mod=view&aid='.$aid, null); 4。当发新日志时,给日志作者的好友发通知 修改文件 source/function/function_blog.php, 在下面这句话 $POST )); 后加入 $blogarr )), $blogarr , $summary, $picurl, 'home.php?mod=space&uid='.$blogarr .'&do=blog&id='.$blogid, $frienduids); } } 测试网站: https://ngcorner.com/dz32wp ,用户 test1/123451, test2/123451, test3/123451。可以用一个ID发日志,再用另一个好友ID看通知 下载链接: http://www.bian-wang.com/discuz/data/userupload/10005/webpush_discuz.zip
个人分类: Discuz|3504 次阅读|33 个评论
分享 Discuz功能改进:论坛日志记录文章的一键帖
热度 5 天香公主 2016-5-13 09:02 AM
Discuz功能改进:论坛日志记录文章的一键帖
Discuz功能改进:支持论坛日志记录文章的一键帖 过去写的一篇介绍在记录里将用户填写的图片和油管地址在显示时自动转换成对应的图片和嵌入油管视频的方法(称为一键贴)的博文( 链接 )近来受到了几位网友的认可和兴趣,所以在这里我把类似的对多种多媒体资源由地址转换成嵌入资源的函数贴出来和网友交流,并介绍下如何在日志,文章和论坛里使用它。 这个函数叫 url2html,它将地址转换成html元素,所以自然第一个参数是地址,第二个参数取值0或1代表了被嵌入的区域的类型。我将区域分成主要区域(日志正文,文章正文,论坛主题贴和跟贴),和次要区域(日志评论,文章评论,记录正文和回复),因为不同的区域类型各有各的合理显示方式,比如一个pdf文件地址在日志正文里应该显示成嵌入pdf显示在日志内,而在记录里因为空间的限制也许显示成超链接更恰当。 1)支持的资源类别,视频网页地址,视频地址 资源类型 备注 举例 图片 以.gif, .jpeg, .jpg, .png结尾的文件 http://budgetstockphoto.com/samples/pics/stones.jpg PDF 以.pdf结尾的文件 http://www.pdf995.com/samples/pdf.pdf 音乐 以.mp3, .wav, .wma结尾的文件 http://www.tonycuffe.com/mp3/tail%20toddle.mp3 http://www.music.helsinki.fi/tmt/opetus/uusmedia/esim/a2002011001-e02.wav http://www.theflute.co.uk/media/BachCPE_SonataAmin_1.wma 视频 以.mp4, .webm, .ogv, .swf, .flv, .wmv结尾的文件 http://techslides.com/demos/sample-videos/small.mp4 http://techslides.com/demos/sample-videos/small.webm http://techslides.com/demos/sample-videos/small.ogv http://www.flashppt.com/images/tangramone.swf http://techslides.com/demos/sample-videos/small.flv http://www.educationalquestions.com/video/ELL_PART_5_768k.wmv YouTube视频 视频网页地址 https://www.youtube.com/watch?v=MD5bFCDfySc https://m.youtube.com/watch?v=MD5bFCDfySc https://youtu.be/MD5bFCDfySc 视频地址 https://www.youtube.com/embed/MD5bFCDfySc https://www.youtube.com/v/MD5bFCDfySc DailyMotion视频 视频网页地址 http://www.dailymotion.com/video/x4xvnz_the-funny-crash-compilation_fun http://dai.ly/x4xvnz 视频地址 http://www.dailymotion.com/embed/video/x4xvnz Vimeo视频 视频网页地址 https://vimeo.com/110145104 视频地址 https://player.vimeo.com/video/110145104 我乐视频 视频网页地址 http://www.56.com/u75/v_MTE3ODg5ODgw.html 视频地址 http://www.56.com/iframe/MTE3ODg5ODgw 哔哩哔哩视频 视频网页地址 http://www.bilibili.com/video/av1286985 http://www.bilibili.com/video/av1286985/index_2.html Flash视频地址 http://static.hdslb.com/miniloader.swf?aid=1286985page=2 凤凰视频 视频网页地址 http://v.ifeng.com/documentary/figure/201605/0362ac12-fd5d-4a16-b836-378c61543ca0.shtml Flash视频地址 ( 寻找方法 ) http://v.ifeng.com/include/exterior.swf?guid=0362ac12-fd5d-4a16-b836-378c61543ca0AutoPlay=false 爱奇艺视频 Flash视频地址 ( 寻找方法 ) http://player.video.qiyi.com/4b40896a102b47584f9573b76b093fa3/0/0/v_19rrlty944.swf-albumId=482534600-tvId=482534600-isPurchase=0-cnId=25 酷6视频 视频网页地址 http://v.ku6.com/show/Es8Bn14RwCZKOS7Lz4ts3Q...html?hpsrc=1_25_1_2_0# http://v.ku6.com/special/show_2562886/SoGnlFVxjStPTJmQ.html Flash视频地址 ( 寻找方法 ) http://player.ku6.com/refer/Es8Bn14RwCZKOS7Lz4ts3Q../v.swf 腾讯视频 视频网页地址 http://v.qq.com/page/q/v/6/q0149bzkuv6.html http://v.qq.com/cover/4/44q2pgwf0tb6hsq.html?vid=y0016wcg0ot http://m.v.qq.com/play/play.html?coverid=vid=z0197m8xrv3 视频地址 http://v.qq.com/iframe/player.html?vid=q0149bzkuv6 新浪视频 视频网页地址 http://video.sina.com.cn/view/250587748.html Flash视频地址 ( 寻找方法 ) http://video.sina.com.cn/share/video/250587748.swf 搜弧视频 Flash视频地址 ( 寻找方法 ) http://share.vrs.sohu.com/3029619/v.swftopBar=1autoplay=falseplid=1000083pub_catecode=0from=page 土豆视频 视频网页地址 http://www.tudou.com/programs/view/xGgArUMPw9I http://www.tudou.com/listplay/Q0MiBE2DPCs/NQjV-Amh1ac.html Flash视频地址 http://www.tudou.com/programs/view/html5embed.action?code=xGgArUMPw9I http://www.tudou.com/l/Q0MiBE2DPCs/iid=132813935resourceId=0_04_05_99/v.swf 优酷视频 视频网页地址 http://v.youku.com/v_show/id_XMTgyMzE0NzE2.html Flash视频地址 ( 寻找方法 ) http://player.youku.com/player.php/sid/XMTgyMzE0NzE2/v.swf 对内容里不符合上述规律的其它地址,我们都转换成了超链接。在不支持Flash的机器如iPad和iPhone上,Flash地址也转换成超链接而不是嵌入资源。 对大多数视频网站,我们可以通过对视频网页的地址的解析找到对应的视频地址。对这样网站,用户只需填写视频网页的地址。但也有些网站,我们需要用户在视频网页上找到对应的视频地址,一般这个信息可以点击网页上的'分享'找到,我文中加了些各个网站的图示。 2)对Discuz代码的修改来使用这个函数,两种方式(用和不用mejs) xmp { white-space: pre-wrap; display: block; background-color: lightgrey; border: 1px solid darkgrey; } table { border-color: darkgrey; } a) 在论坛里支持一键贴 在文件 source/function/function_discuzcode.php 修改函数parseurl $length) { $text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3)); } return ' '.$text.' '; } else { $url = substr($url, 1); if(substr(strtolower($url), 0, 4) == 'www.') { $url = 'http://'.$url; } $url = !$scheme ? $_G .$url : $url; return ' '.$text.' '; } } 将原来贴子在显示时的自动加链机制去掉,加上我们的一键贴: function parseurl($url, $text, $scheme) { global $_G; if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.) +/i", trim($text), $matches)) { $url = $matches ; } else { $url = substr($url, 1); if(substr(strtolower($url), 0, 4) == 'www.') { $url = 'http://'.$url; } $url = !$scheme ? $_G .$url : $url; } require_once libfile('function/url2html'); return url2html_url($url, 0); } b) 在日志正文里支持一键贴 在文件 source/include/space/space_blog.php 下面这段代码 require_once libfile('function/blog'); $blog = blog_bbcode($blog ); 后加入 require_once libfile('function/url2html'); $blog = url2html($blog , 0); c) 在日志评论里支持一键贴 c1) 在文件 source/include/space/space_blog.php 下面这段代码 fetch_all_by_id_idtype($id, 'blogid', $start, $perpage, $cid); foreach($query as $value) { 后加入 require_once libfile('function/url2html'); $value = url2html($value ); c2) 在文件 source/include/misc/misc_ajax.php 下面这段代码 fetch_latest_by_authorid($_G , $cid); 后加入 require_once libfile('function/url2html'); $value = url2html($value ); c3) 为支持一键贴,需要去掉Discuz在评论储存前对URL的自动加链的功能因为将在显示前加:在文件 source/class/class_bbcode.php 里的函数 bbcode2html 的下面这段的最后一句去掉 search_exp \s*( +?)\s*\ /ies"; $this->replace_exp = "/\ \s*( +?)\s*\ /ies"; $this->replace_exp .text); } 并在函数 comment_add 里的下面这段 x.get('home.php?mod=misc&ac=ajax&op=comment&inajax=1&cid='+id, function(s){ newdl.innerHTML = s; 后加入 runScript(newdl); 类似的在函数 comment_edit 里的下面这段 x.get('home.php?mod=misc&ac=ajax&op=comment&inajax=1&cid='+ cid, function(s){ obj.innerHTML = s; 后加入 runScript(obj); d) 在文章正文里支持一键贴 在文件 source/module/portal/portal_view.php 下面这段代码 require_once libfile('function/blog'); $content = blog_bbcode($content ); 后加入 require_once libfile('function/url2html'); $content = url2html($content , 0); e) 在文章评论里支持一键贴 e1) 在文件 source/module/portal/portal_view.php 里下面这段代码 $hash = md5($article ."\t".$article ); 之前加入 $value) { $commentlist = url2html($value ); } e2) 我们要控制一下评论里贴图的最大宽度,这可以在风格文件template/default/common/common.css里实现,也可以仿照日志里的做法在文件 template/default/portal/view.htm 的底部下面这句代码 上面加入: resizeImg('comment_ul','450'); 代码下载 1)利用了mejs的一键贴 (Discuz3.2): http://www.bian-wang.com/discuz/data/userupload/10005/url2html_with_mejs.zip (02/07/2017更新) 更新记录: 02/07/2017: 加入对PHP7的支持 05/05/2018: 加入Discuz3.4简体中文UTF8版本 2)不用mejs的一键贴:
个人分类: Discuz|7231 次阅读|49 个评论
分享 用mejs播放器来替代失效的Discuz播放器
热度 4 天香公主 2016-5-8 11:04 PM
用mejs播放器来替代失效的Discuz播放器
几年前Discuz因为安全原因撤下了三款基于Flash的播放器:个人空间里播放音乐盒的mp3player.swf,播放mp3音乐的player.swf, 和播放flv格式的Flash文件的flvplayer.swf,使得Discuz网站上音乐盒,mp3音乐,和flv格式的Flash动画无法照常使用。至今尚未解决。所以本文讨论下如何用一个叫MediaElement.js (简称mejs)的html5播放器来替代上述失效的三种播放器。 Before After 首先我们要做些准备工作:将jQuery库和mejs库下载到网站上。然后要修改文件 template/default/common/header_common.htm,在它的最后添加 xmp { white-space: pre-wrap; display: block; background-color: lightgrey; border: 1px solid darkgrey; } table { border-color: darkgrey; } var jqm = jQuery.noConflict(true); 这里我们假定网站将jQuery库放在statis/js,将meja库放在static/js/mediaelement,不然要改动上面的代码指向实际地址。 上面这句jQuery代码的作用见我前文( 链接 )第二部分里的说明。 1。替换音乐播放器 a)替换论坛中的音乐播放器 设置界面 旧播放器 新播放器 需要改动的代码在文件 source/function/function_discuzcode.php 里,将函数 parseaudio 中的下面这句 return ' $(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'FlashVars\', \'soundFile='.urlencode($url).'\', \'width\', \'290\', \'height\', \'24\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/player.swf\', \'quality\', \'high\', \'bgcolor\', \'#FFFFFF\', \'menu\', \'false\', \'wmode\', \'transparent\', \'allowNetworking\', \'internal\'); '; 改为 return ' jqm("#'.$randomid.'").mediaelementplayer(); '; b)替换日志中的音乐播放器 需要改动的代码在文件 source/function/function_blog.php 里,将函数 blog_flash 中的下面这段 $swf_url = urlencode(str_replace('', '&', $swf_url)); $html = ' '; 改为 return ' jqm("#audioplayer_SHAREID").mediaelementplayer(); '; c)替换分享中的音乐播放器 需要改动的代码在文件 static/js/home.js 里,将函数 showFlash 中的下面这句 var musicFlash = ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' '; 改为 var musicFlash = ' jqm("#audioplayer_SHAREID").mediaelementplayer({ audioWidth: 290 }); '; 再在同一个函数里稍后的这句 flashObj.innerHTML = flashHtml; 后加上 // http://stackoverflow.com/questions/2592092/executing-script-elements-inserted-with-innerhtml var codes = flashObj.getElementsByTagName("script"); for (var i = 0; i < codes.length; i++) eval(codes .text); 最后再将函数 stopMusic 里的这句 $(musicFlash).SetVariable('closePlayer', 1); 改成 $(musicFlash).player.pause(); 2。替换视频播放器 a)替换论坛中的视频播放器 在页面上有两个地方可以添加flv视频: 旧播放器 新播放器 需要改动的代码在文件 source/function/function_discuzcode.php 里,将函数 parsemedia 中的下面这句 return ' $(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$width.'\', \'height\', \''.$height.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/flvplayer.swf\', \'flashvars\', \'file='.rawurlencode($url).'\', \'quality\', \'high\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\'); '; 改成 return ' jqm("#'.$randomid.'").mediaelementplayer(); '; b)替换日志中的视频播放器 需要改动的代码在文件 source/function/function_blog.php 里,将函数 blog_flash 中的下面这段 $html = ' $(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$width.'\', \'height\', \''.$height.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/flvplayer.swf\', \'flashvars\', \'file='.rawurlencode($swf_url).'\', \'quality\', \'high\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\'); '; 改成 $html = ' jqm("#'.$randomid.'").mediaelementplayer(); '; c)替换分享中的视频播放器 需要改动的代码在文件 source/include/spacecp/spacecp_share.php 里,将下面这句 $_G .'/flvplayer.swf?&autostart=true&file='.urlencode($link), 改成 $link, 再在文件 static/js/home.js 里,将函数 showFlash 中的下面这句 var videoFlash = ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' '; 后加上 var videoHtml5 = ' jqm("#videoplayer_SHAREID").mediaelementplayer(); '; 再在同一个函数里稍后的这句 flashvar = encodeURI(flashvar); 前加上 var flvReg = new RegExp('.flv$', 'ig'); if (flvReg.test(flashvar)) { flashHtml = videoHtml5; } 上面的修改仅涉及原来Discuz的支持flv格式的视频播放器。但在这基础上略做改动也能支持当前最流行的视频格式mp4。 a)论坛 首先要改动文件 static/js/editor.js 将下面这句 ext = in_array(ext, ) ? ext : 'x'; 改成 ext = in_array(ext, ) ? ext : 'x'; 其次在文件 source/function/function_discuzcode.php 里,将函数 parsemedia 中的下面这句 case 'flv': 后加上 case 'mp4': b)日志 不需额外改动 c)分享 在文件 source/include/spacecp/spacecp_share.php 里,将下面这句 if(empty($flashvar) && preg_match("/\.flv$/i", $link)) { 改成 if(empty($flashvar) && preg_match("/\.(flv|mp4)$/i", $link)) { 再在文件 static/js/home.js 里,将函数 showFlash 中的下面这句 var flvReg = new RegExp('.flv$', 'ig'); 改成 var flvReg = new RegExp('.(flv|mp4)$', 'ig'); 3。替换个人空间里的音乐盒 在前文( 链接 )中我们讨论过基于mejs的音乐盒插件,它能够即插即用,不影响网站里的其它功能。不管是用插件还是修改代码,为了有统一的风格,整个网站最好还是用同一个播放器。 旧播放器 新播放器 下面我们讨论通过修改代码来使用基于mejs的音乐盒。除了用mejs外,还有用到一个mejs插件 mep-feature-playlist-master 和一个jQuery插件m-custom-scrollbar。首先将前面对 template/default/common/header_common.htm 的修改再改为 var jqm = jQuery.noConflict(true); 接着要修改的代码是文件 source/function/function_space.php 里的函数 getblockhtml 中的有关 music 的部分: $authcode = substr(md5($_G .$uid), 6, 16); $view = ($_G == 1 && $_G ) ? '&view=admin' : ''; $querystring = urlencode("home.php?mod=space&uid=$uid&do=index&op=getmusiclist&hash=$authcode$view&t=".TIMESTAMP); $swfurl = STATICURL.'image/common/mp3player.swf?config='.$querystring; if(empty($parameters ) && $parameters !== 0) { $parameters = '200px'; } else { $parameters .= 'px'; } $html = " document.write(AC_FL_RunContent('id', 'mp3player', 'name', 'mp3player', 'devicefont', 'false', 'width', '100%', 'height', '".$parameters ."', 'src', '$swfurl', 'menu', 'false', 'allowScriptAccess', 'never', 'swLiveConnect', 'true', 'wmode', 'transparent')); "; 将它改为 if(empty($parameters ) && $parameters !== 0) { $height = 200; } else { $height = $parameters ; } $plheight = $height - 28; $shuffle = ($parameters )?'true':'false'; $autoplay = $parameters ; $showmodbig = ($parameters =='big'); $audioHeight = 30; if ($showmodbig) { $audioHeight += 50; $plheight -= 50; } $html = <<
个人分类: Discuz|6408 次阅读|59 个评论
分享 如何在日志中加入并显示PDF文件
热度 2 admin 2016-3-27 10:27 PM
先将鼠标移至“帮助”,选择下滑菜单里的“上传文件”将PDF文件上传; 然后在日志 - 编辑源码 - 状态下加入语句 iframe src="http://www.bian-wang.com/upload/pdfjs/web/viewer.html?file=../../../discuz/data/userupload/用户号/文件名.pdf" style="width: 740px;height:500px;" frameborder="0"/iframe 即可; 注意把“用户号”替换成自己的用户号,把“文件名”替换成自己所上传的文件名。
1479 次阅读|2 个评论
分享 如何从其它网站导入博文和图片
admin 2015-10-12 10:28 PM
摘自天香公主《 Discuz功能改进:导入博文和图片 》 博主可以这样来将发表在其它网站的博文拷贝到本网站: 点击"发表新日志"按钮 点击"下载远程日志"按钮,在对话框里填写要下载的其它网站的博文的网址 点击"下载远程图片"按钮 点击"保存发布"按钮
1417 次阅读|0 个评论
分享 Discuz插件开发:文库插件
热度 4 天香公主 2014-2-16 11:09 AM
Discuz插件开发:文库插件
如何开发Discuz插件(二):文库插件 上次我们讨论了如何用插件在现有网页上添加内容( 链接 ),现在我们接着讨论如何加新网页和如何加菜单项来连上这个新网页。作为示范我们要做个网页让用户上传文件,并能找到已经上传的文件。我们称这个功能为文库,类似于相册。 下面是效果图: 我们先介绍一下这个功能的大致框架: 下面是实现这功能所需加入的文件: 这个插件要求在source/plugin加一个子文件夹。所有与这个插件有关的文件都放在这里面。 总共就三个文件,一个PHP文件files.inc.php包含主要功能代码,一个HTML文件files.htm提供显示模板。最后一个HTML文件index.htm是空白的,按PHP的惯例用来防止用户直接浏览文件夹内容。 第一个文件是功能的入口,我们将在设置时将它与一个新的菜单项相连。第二个文件由第一个文件导入。 1) files.inc.php xmp { white-space: pre-wrap; border: 1px solid darkgrey; background-color: lightgrey; } 2) files.htm Test 注意我们这里是在模板里加公共的顶部和底部。我们也可以在PHP文件里用下面的代码加 include template('common/header'); 最后我们在管理中心里通过设置可以添加让用户使用这功能所需的菜单项。 1) 应用-插件页里的插件列表旁点击设计新插件。填写新插件的信息。注意新插件的唯一标识符(identifier)必须是我们新建的文件夹的名字(在这里的示范中是imyoona_files)。然后添加所用到的模块信息。我们这里只需在主导航栏里添加一个菜单项,所以模块类型是主导航项目。程序模块名是前面我们加的第一个文件的名字(files),链接名称是文库。 2)在界面-导航设置-主导航里设置新菜单项在主导航里的位置:显示顺序, 这里我们把它设为20,所以它将出现在现有主导航的末尾。启动插件后,我们就可以在门户页上看到新添加的菜单项。 点击这个菜单项就到了新的一个网页,这个网页有通常的顶部和底部。虽然里面几乎没有内容,但是可以看到我们第二个文件里echo的文字(Test)。 另一种办法是建一个快捷导航项目,然后进界面-导航设置-快捷导航里设置新菜单项在主导航里的位置和导航图标。 这样做的好处是只有登陆用户可以进入快捷导航。 下面我们介绍本插件的具体功能。 我们的这个功能分三个组成部分: 1)用户选择和上传新文件的界面 2)在服务器端得到并储存上传后的文件 3)用户已上传文件的列表,点击可打开文件 1)用户选择和上传新文件的界面 我们用最简单的HTML内置的上传功能:在模板里加入 选择要上传的文件: $msg 2)在服务器端得到并储存上传后的文件 我们得决定储存文件的地方,在这里我们在data文件夹里添加一个uploadfiles子夹,然后在它的下面给每个用户按他们的用户UID建一个子夹储存他们各自上传的文件。 $dir='data/uploadfiles/'; if (!file_exists($dir)) mkdir($dir); $udir = $dir.$_G .'/'; if ($_FILES ) { $msg = $_FILES ; } elseif ($_FILES ) { if ($_G ) { if (!file_exists($udir)) mkdir($udir); move_uploaded_file($_FILES , $udir.$_FILES ); $msg = 'Upload Successful'; } } 3)用户已上传文件的列表,点击可打开文件 if ($_G ) { $existingfiles = array_filter(scandir($udir), function($item) { return !is_dir($udir.$item); }); } 现存文件列表: $value PHP在Windows服务器上好象对存UTF-8文件有问题,在Windows Explorer里看是乱码,但却还是能正确显示在网页上。可以考虑另起文件名,而将原名存入数据库,这需要用个新的数据表。 在Linux服务器上一切正常。 下面是这个网页在iPad上的样子: 上面我们用的上传工具是html的file部件。这个办法非常原始,有着诸多缺陷,如每次只能上传一个文件,无法显示上传进度,必须更新整个网页等。Discuz软件利用基于Flash技术的swfupload组件来上传图片等文件。这里我们用它来举个最简单的上传例子。 0) this.startUpload(); }, upload_success_handler: function (file, data) { var ml = document.getElementById("msg"); var li = document.createElement("li"); li.innerHTML = "文件 " + file.name + " 上传成功"; ml.appendChild(li); } } new SWFUpload(options); 即便是这个很简单的例子也有些优点,一是可以选择多个文件上传,二是不用更新网页。这个办法也有一大缺点,正因为它是基于Flash的,所以在iPad上不工作。 最后我们给出用百度团队新开发的上传组件WebUploader( 链接 )来替代SWFUpload的代码: 1。files.inc.php: 2。files.htm: 选择文件上传 var uploader = WebUploader.create({ auto: true, // 自动上传 swf: 'source/plugin/upload_files/webuploader/Uploader.swf', // swf文件路径 server: 'plugin.php?id=upload_files:files', // 文件接收服务端 pick: '#picker', // 选择文件的按钮 resize: false, // 不压缩image accept: { // 只允许选择文件,可选 title: 'Images', extensions: 'gif,jpg,jpeg,png', mimeTypes: 'image/*' } }); uploader.on('uploadBeforeSend', function (obj, data) { data.id = 'upload_files:files'; // 扩展data对象,就会作为附带参数发过去 }); uploader.on('uploadSuccess', function (file, data) { jQuery('#msglist').append(' ' + (data.msg ? data.msg : '上传成功') + ' '); }); uploader.on('uploadError', function (file) { alert('Upload Failed'); }); 注意我们在上传之前改了表单数据里ID的值,这是因为服务器端用这个值来决定哪个插件来处理这个请求。Discuz要求将这个插件名通过querystring送给服务器,但不幸的是WebUploader在表单数据也带了自己生成的ID值,而Discuz优先使用了后者,因而就找不到插件了。我们这样做就把后者也改成所需的插件名了。 主导航和快捷导航里的链接对应的内容一般都是与任何用户无关或者取决于当前用户。它不适合于提供对当前用户可以选择的某一用户有关的内容。如果文库是给自 己用的,前者足以,如果是给他们直接浏览,则只要对上面的代码略做修改,将当前用户选择观看的用户的编号传给服务器端,困难的是需要把这个功能加到个人空 间的主导航里,这是由装扮空间里的选项决定的。而那里的选项是固定的,要这么做必须改变源码。在template\default\home \spacecp_index.htm 165行$_GET == 'editnv'后。 参考文献: 1)Discuz!模板解析语法 http://dev.discuz.org/wiki/?title=Discuz!%E6%A8%A1%E6%9D%BF%E8%A7%A3%E6%9E%90%E8%AF%AD%E6%B3%95 2)php file upload introduction http://www.w3schools.com/PHP/php_file_upload.asp 3)php file list in a directory http://www.w3schools.com/php/func_directory_scandir.asp http://stackoverflow.com/questions/11886712/how-would-i-get-scandir-to-echo-links-to-files 4)php how to delete a file http://stackoverflow.com/questions/2371408/how-to-delete-a-file-via-php 5)php create directory if not exists http://www.hotscripts.com/forums/php/25915-solved-check-if-directory-exists-if-not-create.html prettyPrint(); 6)SWFUpload V2.2.0 说明文档 http://leeon.me/upload/other/swfupload.html 7)文件上传利器SWFUpload入门简易教程 http://blog.goodje.com/2010-05/swfupload-sample-tutorial.html 注:在本文中的代码中,在<符号和a字符相连的地方在两者之间加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。
个人分类: Discuz|5683 次阅读|10 个评论
分享 Discuz功能改进:简单的代码修改
热度 4 天香公主 2014-2-12 12:37 AM
Discuz功能改进:简单的代码修改
1. 将日志评论倒序排列 HQ问如何象美中网那样将博文后的评论倒序排列?查了下 http://www.discuz.net/thread-3137267-1-1.html 里有答案。 我试了下在文件 source\class\table\table_home_comment.php 中 public function fetch_all_by_id_idtype($id, $idtype, $start, $limit, $cid = '', $order = '') { 这行里将$order = ''改成$order = 'DESC'就行了。 2. 如何将日志首页的默认选择从好友的日志改为随便看看 日志首页的默认选择是好友的日志,这样作的缺点是会漏看非好友的日志,对一个小网站而言,默认选择为随便看看更合适。查了下 http://www.discuz.net/thread-2355519-1-1.html 里有答案。 我试了下在文件 source\include\space\space_blog.php 中 if(empty($_GET )) $_GET = 'we'; 这行里将'we'改成'all'就行了。 3. 如何限制发日志数量 美中网有一日五篇日志的限制。这一天指的是服务器的当日零点到次日的零点。如果超过的话,在点击发表新博文时会出现下面的出错信息: 我记得美中网在旧版时有中文的出错信息,估计是在更新时用了标准的语言文件,因而丢失了原来自己加的中文出错信息。 美中网的处理还有一个问题,在达到当日发日志上限后,用户不仅不能发新日志,也不能修改或删除任何现有日志。这后一个限制没有道理。 我们来探讨一下如何象美中网那样加上一日五篇日志的限制,同时不限制用户修改或删除现有日志。 在source\include\spacecp\spacecp_blog.php38行左右, if(empty($blog)) { if(!helper_access::check_module('blog') || !checkperm('allowblog')) { showmessage('no_authority_to_add_log', '', array(), array('return' = true)); } 的后面加上下面的代码: $blogcount = C::t('home_blog')-count_all_by_search(null, array($_G ), strtotime(date("Y-m-d"))); if ($blogcount=5) { showmessage('您已达到今天发日志的上限了'); } 这样当用户想发当日的第六篇日志时就会得到下面的出错信息:
4943 次阅读|29 个评论
分享 Discuz用户体验:如何在博文中加入数学公式
热度 2 天香公主 2014-2-8 12:23 PM
Discuz用户体验:如何在博文中加入数学公式
为迎接美中网的数学家入住彼岸网,特探讨一下如何在博文里显示数学公式。 我们可以用mathjax( 链接 )将用latex写的数学公式嵌入到博文里,象珍珠湾那样( 链接 )。 但是这样的做法在Discuz 3.1里有些问题,公式的显示有误。一个可以回避这个问题的办法是将内容显示在一个iframe里。 这里( 链接 )讨论了如何给方程加编号(Automatic Equation Numbering) 参考文献: 1) http://ctan.math.washington.edu/tex-archive/info/lshort/english/lshort.pdf 2) http://texdoc.net/texmf-dist/doc/latex/latex2e-help-texinfo/latex2e.pdf 3) http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference 4) http://www.zyymat.com/mathjax-and-latex-math-formula.html MathJax.Hub.Config({tex2jax: {inlineMath: , ]}}); \ var $jq = jQuery.noConflict(); var iframe = document.getElementById('iframe'); var iframedoc = iframe.document; if (iframe.contentDocument) iframedoc = iframe.contentDocument; else if (iframe.contentWindow) iframedoc = iframe.contentWindow.document; var html = " "; html += " " + $jq("#content").html() + " "; iframedoc.open(); iframedoc.write(html); iframedoc.close(); $jq("#content").hide();
3313 次阅读|12 个评论
分享 Discuz功能改进:对在日志编辑器里添加视频的改进
热度 3 天香公主 2014-1-18 03:54 PM
Discuz功能改进:对在日志编辑器里添加视频的改进
Discuz给在网页里添加视频(和音频)提供了一些便利。对给出的视频地址,它们能产生相应的播放器代码,从而将视频嵌入Discuz的网页。这样的地方有三处:网络视频模块,日志编辑器和论坛帖子编辑器。有意思的是这三处的支持程度不尽相同。 在日志编辑器里,当视频链接通过工具条上的"添加视频FLASH或MP3音乐"按钮来加入日志的话,被储存的为BBCode。在网页显示前被转换成了下面的Flash object,所以他们是通过Flash播放器来播放的。在前文“ 如何在博文中添加可以在iPad上播放的视频 ”中我们讨论了播放形式:用iFrame让视频服务器按客户端的条件选择合适的播放器。但这个办法并不是总是有效的。它依赖于视频服务器提供这种服务。这两种播放形式使用的链接地址不同,这要求我们能找到适合各自播放方式的链接。在前文我们举例说明了在youtube,优酷和土豆网站上寻找适合第二种播放形式的链接的方法。那如何处理其它视频网站的链接呢?Discuz的程序里包含了对多个网站里不同视频链接形式之间的转换。而且能视客户端的条件选择播放方式。可惜这样好的功能只被用于网络视频模块和论坛帖子编辑器。本文讨论一下如何将这个功能用于日志编辑器,即如何用它来将含有视频信息的BBCode转换为合适的html标签。 让我们先来看一个网络视频的例子: 从中可见视频地址是按原样存来数据库里的。负责显示网络视频模块的程序是source\class\block\html\block_vedio.php (这里有个笔误,应为video): 它里面的getdata函数是通过source\function\function_discuzcode.php里的parseflv函数将视频地址转化为合适的html标签。parseflv按不同网站的视频地址的规律,分别得出youku, toudu, ku6, youtube, sina, sohu, ouou, 56等网站视频的合适地址。 这个函数的最后加入了一段在客户端运行的程序,其中用到了static\js\common.js 里的两个javascript函数mobileplayer和AC_FL_RunContent。第一个检查客户端G是否是移动设备,第二个生成flash object标签。整段程序的作用是在移动设备上为视频加入iframe标签,而在非移动设备上为视频加入flash object标签。 我们接着来讨论一下论坛编辑器: 从 中可见视频和音频是以BB代码的形式存储在数据库里的,但所用的BB标签(media和audio)和日志编辑器用的(flash)不同。负责显示论坛帖 子的程序是source\module\forum\forum_viewthread.php,它是用source\function \function_discuzcode.php里的discuzcode函数来将BB代码转换成html代码的。它处理视频时调用了 parsemedia函数,在parsemedia里有对parseflv的调用。所以论坛编辑器和网络视频模块用的是同样的选择播放器的办法。 最后让我们来看看日志编辑器。上次我们在“ 如何用Discuz软件包建造社交网站: 在微博里加图片 ”里介绍过显示博文用的程序source\include\space\space_blog.php依靠source\function\function_blog.php里的blog_flash函数将储存在数据库的视频的BB代码转换成了flash object代码。 如果我们将上面的程序改为调用网络视频使用的parseflv函数,就能按客户端的条件选择合适的播放器。 总结一下,Discuz是个从论坛功能开始逐步发展和扩充的软件,各个部分有些有各自为政的现象。如论坛编辑器和网络视频模块已经有很好的支持各个视频网站和按客户端的条件选择播放器的功能,但这个功能并没有为日志编辑器所利用。希望新的版本能更好地支持多媒体文件。
个人分类: Discuz|5423 次阅读|13 个评论
分享 Discuz用户体验:如何在博文中添加音频文件
热度 2 天香公主 2014-1-18 10:54 AM
Discuz用户体验:如何在博文中添加音频文件
新年时把爱鸟新年祝词里的音乐mp3文件重贴了一遍( 链接 ),倒不是想贴同名贴,而是她里面的音乐在我的iPad上放不出来心有不甘。 在这里讨论一下这个问题的解决办法。 如果我们是在日志编辑器里通过工具条上的"添加视频FLASH或MP3音乐"按钮来加音频文件的话,被储存的BBCode 在网页显示前被转换成了下面的Flash object 所以在iPad上没有显示象上图那样的音频播放器,这个音频文件也在那里没法播放。 但是这并不是说在iPad上就没法听日志里的音乐,不过得换一种加音频的办法。不用Flash Object标签,而用audio标签。 这样就能在iPad上看到播放器并播放了。 下面是同样的标签在Firefox26, Chrome32和IE11上显示的播放器: 那么audio标签能不能完全替换object标签呢?不行,因为IE8及前面的版本都不支持标签。一种博主可用的解决办法是在博文的最后按客户端的条件将object标签改为audio标签。当然在两种标签都支持的客户端上,我们可以选择用哪种。所以我们有下面三种类似的而略有不同的处理办法: 1)对所有支持audio的客户端,将object标签改为audio标签 var a = document.createElement('audio'); if (a.canPlayType a.canPlayType('audio/mpeg;').replace(/no/, '')) replaceAudioFileTags(); 2)对不支持flash的客户端,将object标签改为audio标签 3)在移动设备上,将object标签改为audio标签 if (mobileplayer()) replaceAudioFileTags(); 这三种变体都用了下面这个将object标签转换成audio标签的函数: 下面是第一种办法的一个实例: http://www.zzwave.com/zzw/upload/up/888/9a7f193.mp3 //if (mobileplayer()) replaceAudioFileTags(); var a = document.createElement('audio'); if (a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')) replaceAudioFileTags(); function replaceAudioFileTags() { var objects = document.getElementsByTagName('object'); for(var i=0; i
4956 次阅读|16 个评论
分享 Discuz插件开发:如何开发插件
热度 2 天香公主 2014-1-11 11:36 PM
Discuz插件开发:如何开发插件
如何开发Discuz插件(一) 一个插件(plugin)包含了一些代码文件和一个设置文件。Discuz的管理中心里提供了帮助建立插件设置的工具。首先在config\config_global.php里加入下列一行: $_config = 1; 后,在管理中心的应用-插件页里的插件列表旁就出现了一个新的选项叫设计新插件。在这里就可以开发自用或它用的新插件。在新插件的设计中,得给插件一个唯一标识符(identifier),我将它设为imyoona_test1。它决定了我们所有与这个插件有关的文件将放在source\plugin里的以这个唯一标识符为名的子目录里。 一个插件可以包括多种不同性能的模块,这里我们造一个包含页面嵌入模块(即把要添加的内容显示在某个现有网页的指定位置上)的插件。我们得指明包含插件程序模块的文件名。 当填完相关信息后,最后点击启用后,就能使用这个插件了。但是我们只是完成了插件的设置,也就是说将插件的一些信息告诉了Discuz系统,还没有开发该插件的功能。注意it是我们随意给的文件名,但其包含的类的名称却另有规定,见下文。 接下来我们要造有关的文件并加入代码。 这个it.class.php文件的名字是在设置时规定好的。这里面的类名也是有规定的:plugin_插件唯一标识符. pre { white-space: pre-wrap; display: block; border: 1px solid lightgrey; padding: 5px;} class plugin_imyoona_test1 { function global_header() { return "Hello World"; } } 这个类名符合了要求,那里面的函数又会如何被使用呢?这涉及到一个概念叫嵌入点(又名钩子)。Discuz的网页模板里包含了很多个可以添加内容的嵌入点。当我们把前面config里的那个值改为2以后,我们就能在页面上看到这些嵌入点。(注意改成2后要在管理中心里更新缓存才能在界面上看到所有的嵌入点) 其中一个嵌入点叫global_header,这就是在我们的类里加这样的名字的函数的原因。它的返回值会显示在网页上那个嵌入点的位置里。有两类嵌入点。一类叫全局嵌入点,如global_header,它存在于每个网页上。还有一种是非全局嵌入点,它们只存在于某个网页。如space_blog_title只存在于日志页里。这样的嵌入点得定义在前面的类的一个扩展类里,它的类名必须是基类名加 底线 再加程序块名,这里是home: class plugin_imyoona_test1_home extends plugin_imyoona_test1 { function space_blog_title() { return "Hi"; } } 将config里的值改为0后就能看到这个插件给网页带来的变化。 注意对非全局的某个页面相关的模块的类名和函数名也规定了必须遵守的命名规则: 类名: plugin_插件唯一标识符_CURSCRIPT 函数名: CURMODULE_嵌入点名 在这里CURSCRIPT是home, CURMODULE是space 一个插件可以有多个模块。模块的类型有多种。上面我们讨论的是页面嵌入。我们还可以有扩展项目和程序链接。 程序链接让我们将菜单项目添加在各种导航菜单上。 注意家园导航指的是下图左侧的竖立的菜单,而不是横放的菜单。 当我们加入家园导航项目模块时,没有显示顺序的选择。这得到界面-导航设置-家园导航里去设置,注意新加的家园导航项目模块已经自动的被加在名单里了。 在这页上也可以直接添加导航项目,与导航项目模块的不同,我的理解是前者适合自用,后者可以成为第三方插件。 上面我们介绍的是开发并使用一个插件的基本步骤。如果我们要把自己开发的插件给别人用的话该怎么办呢?在插件设计里有个导出xml的功能,它将插件的设置信息都放入了这个xml文件里。将这个xml文件放入上面提到的该插件所在的目录,然后将该目录里的所有内容交给对方,放入对方网站与上面说的同样的地方,然后从他的管理中心里启动后就能用了。 参考资料: 1。Discuz!插件开发手册 http://faq.comsenz.com/library/plug/plugin/plugin_pre.htm 2。Discuz! 技术文库 http://dev.discuz.org/wiki/index.php 3。2013年第一届Discuz!插件制作开发培训视频 http://v.youku.com/v_show/id_XNTMwNTI3NzU2.html
个人分类: Discuz|29814 次阅读|4 个评论
分享 请教HQ
热度 1 天香公主 2013-12-18 08:08 PM
请教HQ
我request的是 http://www.bian-wang.com/discuz/home.php?mod=spaceuid=9999do=blogid=203,地址栏是如何变成了http://www.bian-wang.com/discuz/home.php?mod=spaceuid=9999do=blogid=203_dsign=91611add。我知道目的,但看不懂是如何实现的。
21 次阅读|4 个评论
分享 【岳东晓】挺薄者应该反省自己的思维模式
热度 1 奋斗的乌龟 2013-10-27 12:26 PM
所谓薄粉,就是薄熙来的粉丝,也就是那些无论证据如何都不考虑薄熙来犯罪可能性的人。 粉丝情结是一种盲目的、非理性的情结。 目前有几点事实通过薄熙来自己供述已经很清楚了。希望薄粉们面对这些事实,反省自己的思维模式。 1. 薄熙来知道薄夫人杀了英国洋人 薄夫人做出了很多对薄熙来不利的证词,薄熙来辩护的理由主要有两点:(1)其夫人有精神病;(2)其夫人供出他来是为了自己减刑。 针对薄夫人作证说薄熙来知道法国房产的事情而且担忧是否安全,薄熙来的辩解如下: 【 对于谷开来的精神状态,我提请法庭重视。对刚才她说的那些话我表示质疑。开来曾经讲,她杀尼尔的时侯有荆柯刺秦王的豪迈,足以证明她的精神不正常。】 【我认为她所作的证言,既有精神压力,又有减刑的动力。】 由上可见,薄熙来是知道其夫人杀死英国男人的,这是其夫人自己告诉他的。面对这个事实,薄粉们应该反思一下,你们之前一口咬定薄夫人杀人为假,甚至认为当时出庭承认杀人的是替身的一系列想法是否有幻想的迹象。 既然薄熙来知道其夫人杀人,那么其一系列利用职权试图压制相关刑事调查的问题就很严重了。 2. 薄熙来对重庆人民、对全国人民撒谎 在人大会上,作为重庆代表,薄熙来说他与夫人没有任何个人资产,其子留学费用是靠全额奖学金。参见: http://www.zhenzhubay.com/blog-2-17676.html 现在根据薄熙来的证词,以上完全是谎言。 薄夫人作证说:薄熙来告诉她一个保险柜里有唐肖林送的13万美金与5万RMB,薄夫人将美金拿去给儿子作为留学生活的费用了,另外还拿了几万RMB。 对此证词,薄熙来提出几点辩解:(1)薄夫人杀人而且有精神问题,证词不可信;(2)那个保险箱里有几十万RMB,其夫人怎么能分辨哪些是贿赂款;(3)还有一个大保险箱,里面的钱大大超过10几万,薄夫人为何偏偏要用这些贿赂款。 薄夫人是否存在精神问题导致作证无效,这是一个需要专业判断的问题。薄夫人曾经出现精神问题不等于在其作证时有精神问题而导致其证词无效。 至于(2),薄熙来对薄夫人就13万美金做的证词并没有提出事实否定(何况薄自己早已供认了),只是抓住5万RMB做文章。但对比薄夫人的证词可以发现,薄夫人并没有说拿了5万RMB,而是说拿了几万RMB,也没有说那几万就是贿赂款。 从(3)看,薄熙来在人大会上所谓没有任何私人资产的话纯属谎言。 案子还在继续,希望关心薄熙来案的人们能够仔细研究相关证词再来说话,喊口号、打政治迫害牌是没有意义的。 文章来源: http://www.zhenzhubay.com/home.php?mod=spaceuid=2do=blogid=17705
151 次阅读|3 个评论
分享 中国政府拒绝参与国际海洋仲裁后果如何?
热度 1 lawandorder 2013-4-10 07:07 PM
中国政府拒绝参与国际海洋仲裁后果如何? (lawandorder, April 10, 2013) ( 彼岸网) 菲律宾在今年 1 月向国际海洋仲裁法庭( ITLOS) 递交仲裁中国南海主权争议的请求。中国政府于 2 月 9 日驳回菲政府的请求。 ( 见 http://www.chinadaily.com.cn/china/2013-02/19/content_16238133.htm ) 应菲政府的请求,国际海洋仲裁法庭主席日籍法官 柳井俊二 ( やない しゅん じ )(见 http://www.itlos.org/index.php?id=89 )按照《 联合国海洋法公约》 (UNCLOS) 于 3 月 23 日为中国政府 任命波兰籍仲裁员 ( 见 http://www.sunstar.com.ph/manila/local-news/2013/03/25/itlos-appoints-second-member-arbitral-tribunal-274673 ) 。 如果 中国政府继续拒绝参与国际海洋仲裁,法庭主席将会任命另外 3 个法官组成 5 人仲裁庭。后果如何? 参考资料: 1 。 《 联合国海洋法公约》 PART XV. SETTLEMENT OF DISPUTES , ANNEX VII. ARBITRATION ( https://www.un.org/depts/los/convention_agreements/texts/unclos/UNCLOS-TOC.htm ) 2 。中国政府 1996 年签署《联合国海洋法公约》声明和 2006 年针对第 298 条强迫仲裁的保留声明。( http://treaties.un.org/pages/ViewDetailsIII.aspx?src=TREATYmtdsg_no=XXI~6chapter=21Temp=mtdsg3lang=en#EndDec )
72 次阅读|2 个评论
分享 指南:如何发送私人语音消息
笔记本 2012-7-24 06:35 AM
指南:如何发送私人语音消息
参照下图以及 http://www.zhenzhubay.com/blog-1-2494.html 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=2520
0 个评论
分享 如何在微博与博客中插入视频图像音乐
笔记本 2012-7-22 03:50 AM
如何在微博与博客中插入视频图像音乐
第一步: 获取图像、视频或音乐的网址 *) 目前只有 .jpg, .gif和.png图像能被直接显示 *) 音乐目前只支持 .mp3 *) 要获得相册中照片的URL,请参见 http://www.zhenzhubay.com/forum.php?mod=viewthread&tid=632&extra=page%3D1 *)获取YouTube, vimeo, youku, ifeng, sohu, sina, qq等视频URL请参见 http://www.zhenzhubay.com/blog-1-2136.html#.UAsGTrSe6zw 除YouTube, vimeo, youku之外,其余视频必须获取其FLASH URL (那个以.swf结束的) 第二步: 在微博插入 网址 如 http://m.upall.co/g/1/cool-art-1.jpg http://v.youku.com/v_show/id_XNDMwMjAwODYw.html?f=17889907 http://www.youtube.com/watch?v=tCL6F0s19II&feature=plcp http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=81848175_6/s.swf 注意插入的大图会被压缩显示,如果要查看大图,请点击图片。。。 注: 在博客中插入图像或视频的方法与上面类似 第一步: 获取图像或视频的网址--完全相同 第二步:点击插入链接的图标插入网址,如下图 珍珠湾全球网微博接受的视频链接目前只包括: youtube, vimeo, youku, v56, sina, sohu, qq, ifeng。 这都是来自知名的网络实体。其使用的技术基本上都是FLASH。 至于图像链接,支持的只有jpg, gif,png等标准格式。 相关安全性问题,参见 http://www.zhenzhubay.com/blog-2-1342.html , http://www.zhenzhubay.com/blog-2-1389.html 这些图像、视频在其他网站,都是可以在博客或论坛自由张贴的。 不同的是,珍珠湾全球网具有领先的技术开发能力,实现了微博中视频发表功能。 我们将在技术上继续推陈出新,以我们的技术领先体现珍珠湾全球网的智力优势。 这也是珍珠湾全球网作为高级俱乐部的一个技术特征。 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=2437
0 个评论
分享 如何将博文加入八一文武对决?
笔记本 2012-7-17 01:02 AM
如何将博文加入八一文武对决?
在张贴文章时选择正确的“站点分类“。如下图 注意:不能选择”文武PK”,必须选择下面的子类别,如“文-诗词”,或者“武-摄影/书画”。 对已经张贴的博文,可以编辑博文,然后修改其日志类别。在张贴博文(或者设置类别)之后约5分钟,您为博文将被加入 http://www.zhenzhubay.com/topic-2.html 请注意,如果不是参赛博文,请不要选择这个几个类别。参赛作品应该以原创内容为主。 https://maps.google.com/maps?f=qsource=s_qhl=engeocode=q=California+Street,+San+Francisco,+CAaq=3oq=calsll=37.0625,-95.677068sspn=53.167773,70.927734t=hie=UTF8hq=hnear=California+St,+San+Francisco,+Californiaz=13ll=37.787542,-122.444578output=embed 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=2165
0 个评论
分享 如何张贴YouTube,优酷、56等视频
笔记本 2012-7-16 02:25 PM
如何张贴YouTube,优酷、56等视频
伊兰泓 介绍了 上贴国内视频的方法 ,受到她的启发,我把程序稍微改了一下。现在可以用张贴YouTube类似的方式张贴优酷与56了。 I. 第一步 获取视频地址 YouTube,优酷、56方法略有不同 a) YouTube 打开视频,浏览器上面的URL即为其网址, 如图为 http://www.youtube.com/watch?v=tCL6F0s19II b. 优酷与56.com 打卡视频后,把光标置于视频右侧,出现一个分享的菜单,点击后如下图所示,再点击“复制flash地址” 如 http://player.youku.com/player.php/sid/XMTA5MTEwNTI4/v.swf 类似的,56.com也可以获取视频的FLASH地址,如 http://player.56.com/cpm_NzAxMTc0Mzk.swf II。 第二步:插入视频连接 III. 张贴后,刷新网页 效果如下 http://www.youtube.com/watch?v=tCL6F0s19II http://player.youku.com/player.php/sid/XMTA5MTEwNTI4/v.swf http://player.56.com/cpm_NzAxMTc0Mzk.swf 如果你看不到视频效果,说明你的浏览器过时了,需要升级。 珍珠湾网站很多功能如果没有现代浏览器可能无法使用。 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=2136
0 个评论
分享 如何检查网站是否安全
笔记本 2012-7-3 03:36 AM
大家可以到 http://www.siteadvisor.com/# 输入一个网站的URL Support About McAfee Contact us United States - English Home Web Security How It Works Download Resources Webmasters 珍珠湾的检测结果如下 http://www.siteadvisor.com/sites/zhenzhubay.com 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=1175
0 个评论
分享 揭秘方舟子如何冒充中文互联网先驱
笔记本 2012-2-6 03:13 PM
前一阵有不少网友要我批判方舟子,据他们说,方舟子自称是中文互联网的先驱,创办了世界上第一份中文网络文学刊物《新语丝》。我当时一笑置之。美国前副总 统戈尔自称是互联网先驱,经常被美国电视脱口秀和政客作为笑话讲,只要谁说自己发明了互联网,台下肯定是会意的哄堂大笑。方舟子如果真这么说了,就是贻笑 大方。所以,我没有理会网友们的多次请求。 但今天突然在网上看到方舟子题为《互联网的力量》的演讲记录,时间地点是 2010 年 11 月 20 日互联网年会。这个演讲的大部分内容是方舟子自称为互联网 “ 恐龙 ” 级人物、中文网络先驱。方舟子称 ACT 是 “ 第一个中文的网络 ” ,他在上面跟人掐架,后来 ACT 之类被淘汰, 1996 年,他办了新语丝网站,搞了个论坛,其简历居然确确实实地自封为“中文互联网先驱”。真是这样吗?   我是 1990 年秋季到美国明尼苏达大学物理系的。到后,找系里的教授要了一个 EMAIL 账号,用陈旧的 VAX 终端与各地的同学联络。大概一年后,在计算机系的机房获得了账号,开始可以使用 UNIX 工作站。其后,我同时在计算机系攻读学位,所以,对互联网的那段历史我是亲历者。期间,我与其他中国同学一样,都在互联网上阅读中文。当时北美中国学生读得最多的是一份称为《华夏文摘》的电子刊物,由 CND 创办。那时候,方舟子估计还不会上网,也就不存在《新语丝》。   《华夏文摘》创刊于 1991 年 4 月 5 日。根据该刊物于 1991 年 4 月 11 日发表在 SOC.CULTURE.CHINA 上的帖子,它在 10 天内即获得 1000 名订阅者(通过 EMAIL ),正在征求技术支持编写相关的中文阅读软件。   SOC.CULTURE.CHINA 是一个 USENET 里的一个讨论组。 USENET 是一种分布式的讨论系统,到今天还在广泛使用。用户通过一个 NNTP 客户端程序与本地的服务器连接,读贴、发帖。其运行机制是:不同服务器通过互相订阅,拷贝各自张贴的信息来实现帖子的流通,因此张贴的内容并不能立刻被其他读者看到。另外, USENET 最初是设计成使用 7 位的 ASCII 码,而中文( GB2312) 用两个 8 位字节编码汉字,因此中文不能直接用于 USENET 。如果是发中文文章,只能以附件的方式,进行编码之后才能发出去。而读者必须下载附件,解码才能阅读。这有点不方便。   后来,一群中国人采用了一种称为 HZ 的 7 位标准( RFC 1842 , RFC 1843 )来编码 GB2312 (这是中国人制订的最早的互联网标准)。在印第安纳大学的一个网管的帮助下,于 1992 年 6 月 28 日设立了 ALT.CHINESE.TEXT 这个新闻组。 ACT 的统计表明,一年之内其读者人数达到了 5 万多。一年之后,又设立了 ALT.CHINESE.BIG5 ,专门面向繁体字的读者(从这个角度,简体中文走在了繁体之前)。同时,海内外学者们开发了一系列软件,从 DOS 、 WINDOWS ,到 X WINDOWS ,应有尽有。我曾经用过 SimpTerm(Windows) , CXTERM (X) 等。对这些人为中文互联网做出的无私贡献,我们都应该表示感谢。(后来我也抽时间写了一个 GB-HZ 免费工具,做了一点点回馈)   看到这,读者应该明白, ALT.CHINESE.TEXT(ACT) 不过是 USENET 这个系统下的一个讨论组。相当于一个具体的论坛栏目,具体来说就是硬盘上一个目录。方舟子却把它称为“第一个中文的网络”,显然是不明就里。毕竟,他不过 5 万多 ACT 读者里一个密执安州立大学学生物的学生。   方舟子最早出现在 ACT 应该是 1993 年。他所用的 EMAIL 地址是 fangshim @student.msu.edu 。我找不到任何方舟子 1992 年在 ACT 上发言的记录。甚至找不到方舟子 1993 年以前在整个 USENET 上发言的记录。 1994年,加拿大米 盖尔大学的一群中国人建立了一个Gopher服务,叫“太阳升”(Sunrise)。我找不到更早的记录,但是根据1995年10月的记录,太阳升上当月 入库的资料有《枫华园-第70期》,《华夏文摘--第237期》,《郁金香--第9期》,《华德通讯-第25期》,《华夏文摘增刊--第68期(张爱玲作 品专集)》,《新语丝--第21期》。其中《枫华园》是加拿大中国学生在1993年创立的电子刊物。当时,网络上的名笔早就有图雅等人,留下不少好文章, 好像一度是《华夏文摘》的编委。除《文摘》外,ACT上的各种电子刊物令人眼花缭乱,如 《窗口》,1993年4月创刊 《枫华园》,1993年9月创刊 《北极光》,1993年10月创刊 《美人 鱼》,1994年1月创刊 基本情况是,会写字,能上网,就能办电子文学社。这种东东,稍微大点的大学都有,明大的文学青年们就办了一份《明华》,好像还有学校资助。 方舟子《新语丝》之后才出现,顶多排名第6。他写的东西唯一有点印像的是那篇讲袁崇焕的文章,但最近却被亦明指控为抄袭金庸。我是没有逐句对比,但 亦明应该不会乱讲 。可见,方舟子的《新语丝》根本不是第一份中文电子文学刊物,方舟子算不上什么“先驱”。 至于方舟子的新语丝网站,根据他自己的陈述是 1996 年才建立的,那时候,中文万维网早就已经起来了。万维网是搞物理的人发明的,然后再传到搞计算机的那里,所以我属于最早使用万维网的那群人。 1993 年 MOSAIC 浏览器一出来,我们就用上了。方舟子提到的 Gopher 就是明尼苏达大学开发的( Gopher 是明大的标志),它一度占据了很大市场,但由于明大宣布要收取许可费,导致很多用户转向万维网。在密执安州大学生物的方舟子过了三、四年才知道万维网并不奇怪。   新语丝网站目前使用的软件是一个学生在 1995 年左右写的免费软件,叫 WWWBOARD 。我在 1995 年时用它运行《中国军事论坛》,结果发现它有很大的稳定性问题,经常导致数据崩溃,需要修复,后来只好自己写了一个称为 ANYBOARD 的软件,一度卖几千美金一个拷贝( 最初用的就是 ANYBOARD ,但后来他们发现需要购买软件许可之后,更换了)。可见,新语丝网站搞了 10 多年,所用的技术还是最原始的。这也从侧面说明,方舟子基本不懂互联网。 方舟子充其量不过是一个普通的互联网用户,而且是一个相当落伍的、菜鸟级互联网用户,却冒充为中文互联网先驱,这比唐骏的大头贴发明的水分还多得多。这种自吹自擂的说法,让人笑掉大牙。 岳东晓  2010/11/28   文章来源: http://zzwave.com/ydx-sino/425225c8.html
0 个评论

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2026-6-24 05:48 PM , Processed in 0.045399 second(s), 32 queries.

返回顶部