Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz7.2下的Rayfile上传插件(含自动识别音乐试听)

  [复制链接]
竹片子 发表于 2010-2-12 01:10:32 | 显示全部楼层 |阅读模式
插件发布
插件名称: Rayfile上传插件 For Discuz 7.2(含自动识别音乐试听)
插件来源:
适用版本: Discuz! 7.2
语言编码: GBK简体 
最后更新时间:
插件作者: 同我的用户名
插件简介: 自己写的discuz 7.2 下使用的Rayfile上传插件,仅供测试。
本帖最后由 竹片子 于 2010-4-19 19:53 编辑

1.修改模板post_editor.htm文件,复制如下的代码粘贴在文件开始处(注意替换你的Rayfile账户,即如下代码的“Insert Your Rayfile Account”处):
  1. <!--Rayfile Upload Start-->
  2. <script type="text/javascript">                        
  3. function ShowRayfileTextbox(valuex) {
  4.         if (document.getElementById("rayfiletextbox").style.display == "none"){
  5.     document.getElementById("rayfiletextbox").style.display = "";
  6.   }else{
  7.     document.getElementById("rayfiletextbox").style.display = "none";
  8.   }
  9. }
  10. </script>
  11. <div id="rayfiletextbox" style="display: none">
  12. <script type="text/javascript">
  13. // <![CDATA[
  14. function fs2you_show_upctrl(){
  15. var fu = document.getElementById("fs2you_upctrl");
  16. if(fu)fu.innerHTML='<img src="http://static.rayfile.com/media/img/loading.gif" style="border: 0px" />';
  17. var obj = document.createElement("script");
  18. obj.setAttribute("type", "text/javascript");
  19. obj.setAttribute("src", "http://www.rayfile.com/jslib/upctrl.js");
  20. document.body.appendChild(obj);
  21. }
  22. // ]]>
  23. </script>

  24. <script type="text/javascript">
  25. // <![CDATA[
  26. var fs2you_account = "Insert Your Rayfile Account";
  27. var fs2you_message_body_name = "message";
  28. var fs2you_display_template = "%7B%25%20for%20file%20in%20files%20%25%7D%0A%7B%25%20if%20file.thumbnailUrl%20%25%7D%0A%5Burl%3D%7B%7B%20file.downloadUrl%20%7D%7D%5D%5Bimg%5D%7B%7B%20file.thumbnailUrl%20%7D%7D%5B/img%5D%5B/url%5D%0A%7B%25%20else%20%25%7D%0A%5Brayfile%5D%7B%7B%20file.fileName%20%7D%7D%7C%7B%7B%20file.description%20%7D%7D%7C%7B%7B%20file.downloadUrl%20%7D%7D%5B/rayfile%5D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D";
  29. // ]]>
  30. </script>
  31. <div id="fs2you_upctrl" style="margin-right:30px; margin-top: 5px;"><a href="javascript:fs2you_show_upctrl()"><b>点击这里上传文件附件(每个文件最大10MB)</b></a></div>
  32. </div>
  33. <!--Rayfile Upload end-->
复制代码
2.继续找到如下代码:
  1.                                 <!--{if $allowpostattach}-->
  2.                                         <div id="{$editorid}_cmd_attach_notice" class="hasatt" style="display:none">!</div>
  3.                                         <a id="{$editorid}_cmd_attach" title="{lang e_attach}">{lang e_attach}</a>
  4.                                 <!--{/if}-->
复制代码
1)如果您需要和用户权限挂钩,则在上述代码中<!--{/if}-->的上一行插入如下代码:
  1. <a id="{$editorid}_rayfile" href="javascript:;" title="上传Rayfile论坛附件" onclick="ShowRayfileTextbox();">附件</a>
复制代码
2)如不需要和用户权限挂钩,则将上面的这一句代码放在<!--{/if}-->的下一行。

3.在模板css_script.htm文件中找到如下代码:
  1. #e_cmd_attach { background-position: 4px -360px; }
复制代码
在该行代码下面插入如下代码:
  1. #e_rayfile { background-position: 4px -405px; }
复制代码
4.在include/global.func.php中找到如下代码:
  1. preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
复制代码
将其修改为如下代码:
  1. preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])||
  2.                         preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == "dyn.www.rayfile.com"))) {
复制代码
5.在“include”文件夹中的discuzcode.func.php找到如下代码:
  1. $message = $jammer ? preg_replace("/\r\n|\n|\r/e", "jammer()", dhtmlspecialchars($message)) : dhtmlspecialchars($message);
复制代码
在其下一行加入如下代码:
  1. //additional plugin code
  2.                 $message = preg_replace("/\s*\[rayfile\](.+?)\[\/rayfile\]\s*/ies", "rayfilecode('\\1')", $message);
复制代码
并在该文件的最后找到“?>”,在其上一行加入如下代码:
  1. //additional plugin code
  2. function rayfilecode($code)
  3. {
  4.         global $discuzcodes;
  5.         $discuzcodes['pcodecount']++;
  6.         $codecount=$discuzcodes['pcodecount'];
  7.         $searcharray = explode("|", $code);//Split [rayfile] tag's content
  8.         $rayfile_url = str_replace("[url]", "", str_replace("[/url]", "", $searcharray[2]));//Get the Rayfile File page url
  9.         $rayfile_code = str_replace("/", "", str_replace("http://www.rayfile.com/files/", "", $rayfile_url));//Get the Rayfile code
  10.         $searcharray_filetype = strtolower(substr(strrchr($searcharray[0], '.'), 1, 5));//Get the extension name of the upload file
  11.         $searcharray_description = $searcharray_wmpnote = $searcharray_wmp = "";//Description of the upload file
  12.         $view= "<br /><img src="images/attachicons/rayfile.gif" border="0" class="absmiddle" alt="" /> <span style="white-space: nowrap" id="attach_".$rayfile_code."" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})"><a target="_blank" href="".$rayfile_url.""><strong>".$searcharray[0]."</strong></a></strong></a></span>";
  13.         if ($searcharray[1] != $searcharray[0]) $searcharray_description = "(".$searcharray[1].")";
  14.         if($searcharray_filetype == "mp3" || $searcharray_filetype == "wma" || $searcharray_filetype == "mid" || $searcharray_filetype == "wav"){
  15.                 $searcharray_wmpnote = ",下为本曲试听";
  16.                 $searcharray_wmp = "<p>".parseaudio("getrayfileurl.php?rayfilecode=".$rayfile_code."&type=.mp3", 400, 0)."</p>";
  17.         }
  18.         $view.= $searcharray_description."<div class="t_attach" id="attach_".$rayfile_code."_menu" style="position: absolute; display: none">点击进入Rayfile下载页".$searcharray_wmpnote."</div>".$searcharray_wmp;
  19.         $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "$view";
  20.     $discuzcodes['codecount']++;
  21.     return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
  22. }
复制代码
6.进入Rayfile后台 - 界面 - 编辑器设置 - Discuz!代码
添加一个新的代码rayfile,不要设置为“可视”,仅设置为“可用”,如下图所示

其点击右边的“详情”,具体设置如下图所示:

记得给你需要上传Rayfile附件的用户组都开启使用自定义discuz代码的权限!

7.下载附件中的图片bigeditor.gif覆盖到“/images/common”文件夹中,getrayfileurl.php放在Discuz7.2的根目录,rayfile.gif放在“/images/attachicons”文件夹中即可。

8.更新下缓存,发帖时即可出现如下图的Rayfile上传按钮,完成附件上传:


插件说明:
Rayfile是个我常用的插件,由于7.2后没有找到现成的,于是没法偷懒,只有自己写了。同时这又是个令人蛋疼的插件,原本我是设计成为和普通的论坛附件一样在点击图标后出现浮动窗口而不是出现在标题栏下面的那种上传口的,但问题是虽然仍然正常,但是上传的进度居然是显示在那个浮动窗口里面的,非常小,用户体验非常差,于是无奈只能把上传口放在标题下面,我测试过这样的话进度条就会全屏显示鸟~
新加的功能有2个:
1)自动识别mp3/wma/mid/wav的上传文件,调用音乐预览,直接在帖子里面播放,兼容ie/firefox/chrome,但是会一定程度的下降discuz的viewthread页面解析速度(因为要解析一个rayfile的discuz自定义码),我还修改了一下rayfile音乐预览的地址解析代码,让cookies的一个值获取更加智能了一些些^_^。
2)自动辨识rayfile传递过来的“文件名”和“文件描述”是否相同,相同则不显示在括号中,不相同则显示。
我提供的附件里面包含了上述修改好的所有文件,其中把post_editor.htm中的邮箱帐号填上你的帐号后覆盖各自按照压缩包中的readme的源文件,同时添加好自定义的discuz代码即可。

实际预览:


完全无偿提供,随便用,随便传,随便改~同时表去我的网站测试了,这个版本我连自己的网站都没有用,因为用不到,请自行到本机进行测试,谢谢!


下面回答一些回帖的朋友的问题:
1.关于试听时的音乐播放问题:
我先来解说一下试听的原理,我调用了discuz的官方的一个播放器函数parseaudio,如下code:
  1. parseaudio("getrayfileurl.php?rayfilecode=".$rayfile_code."&type=.mp3", 400, 0)
复制代码
播放地址就是由getrayfileurl.php获取一个音乐文件试听地址的,我想所有目前的rayfile试听方式都是通过这样的方法,当您遇到无法试听的情况话基本是因为rayfile服务器的原因引起的。再回到上面这一句代码,中的400这个参数是播放器的长度,而0是指是否自动开始播放,如果您需要上传好音乐就开始播放就把这个0改成1。至于说初始音量的问题,你可以选择重载一个parseaudio函数,因为discuz原版的parseaudio并没有控制音量的参数,所以做如下的4个参数的重载:
  1. function parseaudio($url, $width = 400, $autostart = 0, $startvolume = 100) {
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
  3.         switch($ext) {
  4.                 case 'mp3':
  5.                 case 'wma':
  6.                 case 'mid':
  7.                 case 'wav':
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="'.$width.'" height="64"><param name="invokeURLs" value="0"><param name="autostart" value="'.$autostart.'"><param name="url" value="'.$url.'" /><param name="volume" value="'.$startvolume.'" /><embed src="'.$url.'" autostart="'.$autostart.'" type="application/x-mplayer2" width="'.$width.'" height="64"></embed></object>';
  9.                 case 'ra':
  10.                 case 'rm':
  11.                 case 'ram':
  12.                         $mediaid = 'media_'.random(3);
  13.                         return '<object classid="clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA" width="'.$width.'" height="32"><param name="autostart" value="'.$autostart.'" /><param name="src" value="'.$url.'" /><param name="controls" value="controlpanel" /><param name="console" value="'.$mediaid.'_" /><embed src="'.$url.'" type="audio/x-pn-realaudio-plugin" controls="ControlPanel" console="'.$mediaid.'_" width="'.$width.'" height="32"></embed></object>';
  14.         }
复制代码
再进行调用。

2.关于有人提到是否可以上传完自动隐藏:
这个需要改rayfile设置的模板,进入到http://dyn.www.rayfile.com/zh-cn/upctrl/中,在“您网页中作为输入贴子正文的INPUT或TEXTAREA的name属性是”对话框中填入“message”,rayfile会自动给你生产一个模板,当然我现在给予大家的模板与之并不相同,是如下的一个结构:
  1. {% for file in files %}
  2. {% if file.thumbnailUrl %}
  3. [url={{ file.downloadUrl }}][img]{{ file.thumbnailUrl }}[/img][/url]
  4. {% else %}
  5. [rayfile]{{ file.fileName }}|{{ file.description }}|{{ file.downloadUrl }}[/rayfile]
  6. {% endif %}
  7. {% endfor %}
复制代码
这个的else上半部分是给予图片预览的,下半部分嵌入了一个我们自定义的那个名叫“rayfile”的discuz的ubb代码。您如果需要自动发帖后隐藏只需要把上述代码中的如下一行:
  1. [rayfile]{{ file.fileName }}|{{ file.description }}|{{ file.downloadUrl }}[/rayfile]
复制代码
前后加入hide代码即可:
  1. [hide][rayfile]{{ file.fileName }}|{{ file.description }}|{{ file.downloadUrl }}[/rayfile][/hide]
复制代码
那么最后点击rayfile页面中的“生成我的脚本”
会在“3. 这下面是您的上传控件的代码, 请将它复制到所需的页面中:”产生一系列的代码,这个代码我们也不全用,只需要把“var fs2you_display_template”对应的那一串字符串的值替换post_editor.htm中相同的“var fs2you_display_template”的值即可。刷新一下缓存就完成了上传完自动隐藏的功能。

3.关于不同文件类型的显示方式,即音乐文件照旧,其他文件变成如下显示方式:

这个需要修改discuzcode.func.php中的rayfilecode函数,请做如下的替换,我觉得似乎会增加解析负担,当然写的有些急,这部分脑子动得少了,如有修改意见请尽管提出。
  1. //additional plugin code
  2. function rayfilecode($code)
  3. {
  4.         global $discuzcodes;
  5.         $discuzcodes['pcodecount']++;
  6.         $codecount=$discuzcodes['pcodecount'];
  7.         $searcharray = explode("|", $code);//Split [rayfile] tag's content
  8.         $rayfile_url = str_replace("[url]", "", str_replace("[/url]", "", $searcharray[2]));//Get the Rayfile File page url
  9.         $rayfile_code = str_replace("/", "", str_replace("http://www.rayfile.com/files/", "", $rayfile_url));//Get the Rayfile code
  10.         $searcharray_filetype = strtolower(substr(strrchr($searcharray[0], '.'), 1, 5));//Get the extension name of the upload file
  11.         $searcharray_description = $searcharray_wmpnote = $searcharray_wmp = "";//Description of the upload file
  12.         if($searcharray_filetype == "mp3" || $searcharray_filetype == "wma" || $searcharray_filetype == "mid" || $searcharray_filetype == "wav"){
  13.                 $view = "<br /><img src="images/attachicons/rayfile.gif" border="0" class="absmiddle" alt="" /> <span style="white-space: nowrap" id="attach_".$rayfile_code."" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})"><a target="_blank" href="".$rayfile_url.""><strong>".$searcharray[0]."</strong></a></strong></a></span>";
  14.                 if ($searcharray[1] != $searcharray[0]) $searcharray_description = "(".$searcharray[1].")";
  15.                 $searcharray_wmpnote = ",下为本曲试听";
  16.                 $searcharray_wmp = "<p>".parseaudio("getrayfileurl.php?rayfilecode=".$rayfile_code."&type=.mp3", 400, 0)."</p>";
  17.                 $view.= $searcharray_description."<div class="t_attach" id="attach_".$rayfile_code."_menu" style="position: absolute; display: none">点击进入Rayfile下载页".$searcharray_wmpnote."</div>".$searcharray_wmp;
  18.         }else{
  19.                 $view = "<br /><table cellspacing="0" class="t_table" style="width:550px"><tr><td><font style="font-size: 9pt"><strong>文件名:</strong> ".$searcharray[0]."<br /><strong>描述:</strong> ".$searcharray[1]."<br /><strong>下载地址:</strong> <a href="".$rayfile_url."" target="_blank">".$rayfile_url."</a></font></td></tr></table>";
  20.         }
  21.         $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "$view";
  22.   $discuzcodes['codecount']++;
  23.   return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
  24. }
复制代码
4.关于去掉图片预览的功能
由于图片预览的不稳定性,有回帖建议去掉图片预览功能,方法类似于2.只需要修改Rayfile的API模板如下即可:
  1. {% for file in files %}
  2. [rayfile]{{ file.fileName }}|{{ file.description }}|{{ file.downloadUrl }}[/rayfile]
  3. {% endfor %}
复制代码
4.19日更新原来那个不试听的版本

评分

7

查看全部评分

奇跡の海 发表于 2010-2-12 01:27:55 | 显示全部楼层
传说中的沙发???
回复

使用道具 举报

540453380 发表于 2010-2-12 08:59:13 | 显示全部楼层
谢谢了!  测试中!!!!
回复

使用道具 举报

dywe12 发表于 2010-2-12 10:07:48 | 显示全部楼层
留脚印,观察学习
回复

使用道具 举报

kiscuz 发表于 2010-2-12 17:35:40 | 显示全部楼层
好用不   有没测试的
回复

使用道具 举报

ilei365 发表于 2010-2-12 18:14:37 | 显示全部楼层
路过。。。。
回复

使用道具 举报

hegeaimei 发表于 2010-2-12 22:17:47 | 显示全部楼层
本帖最后由 hegeaimei 于 2010-02-13 01:31 编辑

为什么我自己修改的 就出现2个附件一样的 图片 用你的覆盖就可以 是不是手动修改的是不是有问题啊


能不能再解决下  上传图片 可以预览这个问题啊
回复

使用道具 举报

 楼主| 竹片子 发表于 2010-2-12 22:24:24 | 显示全部楼层
为什么我自己修改的 就出现2个附件一样的 图片 用你的覆盖就可以 是不是手动修改的是不是有问题啊
hegeaimei 发表于 2010-02-12 22:17

检查一下css吧,还有是否覆盖了图片?
回复

使用道具 举报

孤挺花 发表于 2010-2-12 22:41:20 | 显示全部楼层
刚刚测试完,可以使用
回复

使用道具 举报

berliz 发表于 2010-2-12 23:51:43 | 显示全部楼层
此贴必火!继续关注
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-10-7 23:28 , Processed in 0.135351 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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