如果您已经完整地安装那个插件,可能还需要做以下事情(大致是这样,记不太清楚了,反正是为了达到正确取以附件上传的媒体的类型和网址的目的)
在include\post.func.php
找到:
- global $db, $tablepre, $upload,$extension,
复制代码
改成:
- global $db, $tablepre, $upload,$extension, $att_mmx_type,
复制代码
添加一个变量记录其type
找到:
- foreach($attachments as $key => $attach) {
复制代码
在上面添加:
- $isfirstattach=$upload ? true:false;
复制代码
找到:
- $filename = daddslashes($attach['name']);
- $attach['ext'] = $extension = strtolower(fileext($attach['name']));
复制代码
在下面添加:
- if($isfirstattach) {
- if($extension=='mp3' || $extension=='wmv' || $extension=='wma' || $extension=='swf' || $extension=='rm' || $extension=='rmvb' || $extension=='mpg' || $extension=='mpa' || $extension=='asf' || $extension=='asx')
- $att_mmx_type=strtoupper($extension);
- $isfirstattach=false;
- }
复制代码
如果上传附件作为音乐($upload为真),那么匹配扩展名确实是需要的媒体文件的话,则扩展名记为$att_mmx_type,也就是后来的mp3_type($mp3_m_r) (这里的扩展名匹配程序判断搞得很丑,sorry)
在include\newthread.inc.php
找到:
- $mp3_thread = AddSlashes(strip_tags(trim($mp3_name)))."|".AddSlashes(strip_tags(trim($mp3_artist)));
复制代码
下面添加:
- if($upload) $mp3_m_r=$att_mmx_type;
复制代码
这样就取到附件的媒体类型了
找到:
- if($attachment) {
- foreach($attachments as $attach) {
- $db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, filename, description, filetype, filesize, attachment, downloads)
- VALUES ('$tid', '$pid', '$timestamp', '$attach[perm]', '$attach[name]', '$attach[description]', '$attach[type]', '$attach[size]', '$attach[attachment]', '0')");
-
- }
-
- updatecredits($discuz_uid, $creditspolicy['postattach'], count($attachments));
- }
复制代码
替换成:
- if($attachment) {
- $getfirstaid=$upload ? true:false;
- foreach($attachments as $attach) {
- $db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, filename, description, filetype, filesize, attachment, downloads)
- VALUES ('$tid', '$pid', '$timestamp', '$attach[perm]', '$attach[name]', '$attach[description]', '$attach[type]', '$attach[size]', '$attach[attachment]', '0')");
- if($getfirstaid) {
- $aid = $db->insert_id();
- $db->query("UPDATE {$tablepre}posts SET mp3_url='./attachment.php?aid=$aid' WHERE pid='$pid'", 'UNBUFFERED');
- $getfirstaid=false;
- }
- }
-
- updatecredits($discuz_uid, $creditspolicy['postattach'], count($attachments));
- }
复制代码
这样是为了找到mp3_url ,楼主所给的插件安装,没有这些程序,所以针对以附件上传的音乐,就没有取到type 和url($mp3_m_r和$mp3_url),不会是我自己安装错了吧? :(
同样在include\editpost.inc.php 也要改,
找到:
- $mp3_thread = AddSlashes(strip_tags(trim($mp3_name)))."|".AddSlashes(strip_tags(trim($mp3_artist)));
复制代码
下面添加:
- if($upload) $mp3_m_r=$att_mmx_type;
复制代码
找到:
- if($pattachment) {
- foreach($attachments as $attach) {
- $db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, filename, description, filetype, filesize, attachment, downloads)
- VALUES ('$tid', '$pid', '$timestamp', '$attach[perm]', '$attach[name]', '$attach[description]', '$attach[type]', '$attach[size]', '$attach[attachment]', '0')");
- }
- updatecredits($orig['authorid'], $creditspolicy['postattach'], count($attachments));
- }
复制代码
替换成:
- if($pattachment) {
- $getfirstaid=$upload ? true:false;
- foreach($attachments as $attach) {
- $db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, filename, description, filetype, filesize, attachment, downloads)
- VALUES ('$tid', '$pid', '$timestamp', '$attach[perm]', '$attach[name]', '$attach[description]', '$attach[type]', '$attach[size]', '$attach[attachment]', '0')");
- if($getfirstaid) {
- $aid = $db->insert_id();
- $mp3_url="./attachment.php?aid=$aid";
- $getfirstaid=false;
- }
- }
- updatecredits($orig['authorid'], $creditspolicy['postattach'], count($attachments));
- }
复制代码
不知道我有没有漏掉什么,脑袋乱哄哄的,真是不好意思,如果不行,我可以将我的这两个文件传给你试试看。
另加说明: 以附件上传的音乐,以上我写的程序是取第一个上传的附件来处理,后面的忽略了,万一你发个音乐,上传时偏偏先传个别的东东,然后再传你要传的音乐,这里由于只处理第一个附件,就会导致失败,但说得好听点是不太智能(自嘲,呵呵,写程序就要严谨,不能这样马虎),不过你可以提醒用户“发这种音乐帖,如果是上传的话请只上传一个音乐文件或者至少把它放在第一个位置上”即可,注意,这里第一个位置其实是指上传批次的第一个位置,当修改帖子时,如果你不顾已有的附件,要重新上传附件作为音乐,是完全可以的,程序取的是这次上传的第一个位置的附件。
所以也可以就这么用了,用户都能轻易配合,不过从写程序的角度讲,必须完善一下,取的时候从一堆附件(如果你真的发这种音乐帖时偏要一次上传多个附件,并且不把目标音乐文件放第一个位置里)中智能判断出符合条件的那个(应该只有1个,或者说取符合条件的第一个),每次循环做这样的判断好像挺烦的,不知有没有好点的办法?呵呵
[ 本帖最后由 sindow 于 2006-5-11 21:57 编辑 ] |