帝国CMS7.5下载字段downpath改造,新增自定义项目

用帝国CMS做开发的小伙伴可能会遇到使用downpath也就是帝国CMS自带下载字段做模版的情况。这个字段的好处是完美原生匹配帝国的各个功能比如统计下载次数,加密下载链接,原生的扣点和权限系统。

但是在开发或者使用中,会面临一个信息里多个下载链接,每个链接会有自定义选项的情况,比如 下载地址1 网盘密码是1234,下载地址2 网盘密码是5678的问题。或者每个下载地址里面的版本或者软件大小不一样,默认的下载字段是不支持的。这就需要对下载字段进行响应的改造,增加需要的自定义选项了。

我简单做个截图,改造实例一:

帝国CMS7.5下载字段downpath改造,新增自定义项目-图1

改造教程开始:

一、修改 ReturnDownpath 函数

文件位置: e/class/functions.php

原函数:

function ReturnDownpath($downname,$downpath,$delpathid,$pathid,$downuser,$fen,$thedownqz,$add,$foruser,$downurl,$down=0){

修改后的完整函数:

function ReturnDownpath($downname,$downpath,$delpathid,$pathid,$downuser,$fen,$thedownqz,$add,$foruser,$downurl,$down=0,$downsize='',$downpwd=''){
	$f_exp="::::::";
	$r_exp="\r\n";
	$returnstr="";
    $downurl=str_replace($f_exp,"",$downurl);
	$downurl=str_replace($r_exp,"",$downurl);
	//增加软件
	if(empty($down))
	{
		for($i=0;$i<count($downname);$i++)
		{
			//替换非法字符
			$name=str_replace($f_exp,"",$downname[$i]);
			$name=str_replace($r_exp,"",$name);
			$path=str_replace($f_exp,"",$downpath[$i]);
			$path=str_replace($r_exp,"",$path);
			//批量更换权限
			if($add[doforuser])
			{
				if(empty($foruser))
				{
					$foruser=0;
			    }
				$fuser=$foruser;
		    }
			else
			{
				if(empty($downuser[$i]))
				{
					$fuser=0;
			    }
				else
				{
					$fuser=$downuser[$i];
				}
		    }
			//批量更新点数
			if($add[dodownfen])
			{
				if(empty($add[downfen]))
				{
					$add[downfen]=0;
				}
				$ffen=$add[downfen];
			}
			else
			{
				if(empty($fen[$i]))
				{
					$ffen=0;
				}
				else
				{
					$ffen=$fen[$i];
				}
			}
			$downqz=$thedownqz[$i];
			// 新增:处理大小和网盘密码字段
			$size_val = isset($downsize[$i]) ? str_replace($f_exp,"",str_replace($r_exp,"",$downsize[$i])) : '';
			$pwd_val = isset($downpwd[$i]) ? str_replace($f_exp,"",str_replace($r_exp,"",$downpwd[$i])) : '';
			if($path&&$name)
			{$returnstr.=$name.$f_exp.$downurl.$path.$f_exp.$fuser.$f_exp.$ffen.$f_exp.$downqz.$f_exp.$size_val.$f_exp.$pwd_val.$r_exp;}
		}
	}
	//修改软件
	else
	{
		for($i=0;$i<count($downname);$i++)
		{
			//删除下载地址
			$del=0;
			for($j=0;$j<count($delpathid);$j++)
			{
				if($delpathid[$j]==$pathid[$i])
				{$del=1;}
			}
			if($del)
			{continue;}
			//替换非法字符
			$name=str_replace($f_exp,"",$downname[$i]);
			$name=str_replace($r_exp,"",$name);
			$path=str_replace($f_exp,"",$downpath[$i]);
			$path=str_replace($r_exp,"",$path);
			//批量更换权限
			if($add[doforuser])
			{
				if(empty($foruser))
				{
					$foruser=0;
			    }
				$fuser=$foruser;
		    }
			else
			{
				if(empty($downuser[$i]))
				{
					$fuser=0;
			    }
				else
				{
					$fuser=$downuser[$i];
				}
		    }
			//批量更新点数
			if($add[dodownfen])
			{
				if(empty($add[downfen]))
				{
					$add[downfen]=0;
				}
				$ffen=$add[downfen];
			}
			else
			{
				if(empty($fen[$i]))
				{
					$ffen=0;
				}
				else
				{
					$ffen=$fen[$i];
				}
			}
			$downqz=$thedownqz[$i];
			// 新增:处理大小和网盘密码字段
			$size_val = isset($downsize[$i]) ? str_replace($f_exp,"",str_replace($r_exp,"",$downsize[$i])) : '';
			$pwd_val = isset($downpwd[$i]) ? str_replace($f_exp,"",str_replace($r_exp,"",$downpwd[$i])) : '';
			if($path&&$name)
			{$returnstr.=$name.$f_exp.$downurl.$path.$f_exp.$fuser.$f_exp.$ffen.$f_exp.$downqz.$f_exp.$size_val.$f_exp.$pwd_val.$r_exp;}
		}
	}
	//去掉最后的字符
	$returnstr=substr($returnstr,0,strlen($returnstr)-2);
	return $returnstr;
}

二、修改 ReturnAddF 函数中调用 ReturnDownpath 的地方

在同一个 functions.php 文件中,找到 ReturnAddF 函数中处理 downpath 字段的两处代码:

第1处(增加信息,约在第 1600 行附近):

elseif($f=="downpath")//下载地址
{
    $value=ReturnDownpath($add['downname'],$add['downpath'],$add['delpathid'],$add['pathid'],$add['downuser'],$add['fen'],$add['thedownqz'],$add,$add['foruser'],$add['downurl_qz'],0);
}

修改为:

elseif($f=="downpath")//下载地址
{
    $value=ReturnDownpath($add['downname'],$add['downpath'],$add['delpathid'],$add['pathid'],$add['downuser'],$add['fen'],$add['thedownqz'],$add,$add['foruser'],$add['downurl_qz'],0,$add['downsize'],$add['downpwd']);
}

第2处(修改信息,约在第 1650 行附近):

elseif($f=="downpath")//下载地址
{
    $value=ReturnDownpath($add['downname'],$add['downpath'],$add['delpathid'],$add['pathid'],$add['downuser'],$add['fen'],$add['thedownqz'],$add,$add['foruser'],$add['downurl_qz'],1);
}

修改为:

elseif($f=="downpath")//下载地址
{
    $value=ReturnDownpath($add['downname'],$add['downpath'],$add['delpathid'],$add['pathid'],$add['downuser'],$add['fen'],$add['thedownqz'],$add,$add['foruser'],$add['downurl_qz'],1,$add['downsize'],$add['downpwd']);
}

三、修改前台下载地址解析函数 RepDownOnlinePathTemp

在同一个 functions.php 文件中,找到 RepDownOnlinePathTemp 函数,增加新字段的模板变量替换:

原函数:

function RepDownOnlinePathTemp($add,$downsofttemp,$pj,$showdown_r,$ecms){
	global $public_r,$level_r,$fun_r;
	if($ecms==0)//下载
	{
		$downurl=$public_r[newsurl]."e/DownSys/DownSoft/?classid=$add[classid]&id=$add[id]&pathid=$pj";
	}
	else//在线
	{
		$downurl=$public_r[newsurl]."e/DownSys/play/?classid=$add[classid]&id=$add[id]&pathid=$pj";
	}
	$downsofttemp=str_replace('[!--down.url--]',$downurl,$downsofttemp);
	$downsofttemp=str_replace('[!--down.name--]',$showdown_r[0],$downsofttemp);
	$downsofttemp=str_replace('[!--pathid--]',$pj,$downsofttemp);
	$downsofttemp=str_replace('[!--fen--]',$showdown_r[3],$downsofttemp);
	$group=$showdown_r[2]?$level_r[$showdown_r[2]][groupname]:$fun_r['hguest'];
	$downsofttemp=str_replace('[!--group--]',$group,$downsofttemp);
	if(strstr($downsofttemp,'[!--true.down.url--]'))
	{
		$durl=stripSlashes($showdown_r[1]);
		$durlr=ReturnDownQzPath($durl,$showdown_r[4]);
		$durl=$durlr['repath'];
		$downsofttemp=str_replace('[!--true.down.url--]',$durl,$downsofttemp);
	}
	return $downsofttemp;
}

修改为:

function RepDownOnlinePathTemp($add,$downsofttemp,$pj,$showdown_r,$ecms){
	global $public_r,$level_r,$fun_r;
	if($ecms==0)//下载
	{
		$downurl=$public_r[newsurl]."e/DownSys/DownSoft/?classid=$add[classid]&id=$add[id]&pathid=$pj";
	}
	else//在线
	{
		$downurl=$public_r[newsurl]."e/DownSys/play/?classid=$add[classid]&id=$add[id]&pathid=$pj";
	}
	$downsofttemp=str_replace('[!--down.url--]',$downurl,$downsofttemp);
	$downsofttemp=str_replace('[!--down.name--]',$showdown_r[0],$downsofttemp);
	$downsofttemp=str_replace('[!--pathid--]',$pj,$downsofttemp);
	$downsofttemp=str_replace('[!--fen--]',$showdown_r[3],$downsofttemp);
	$group=$showdown_r[2]?$level_r[$showdown_r[2]][groupname]:$fun_r['hguest'];
	$downsofttemp=str_replace('[!--group--]',$group,$downsofttemp);
	// 新增:大小和网盘密码字段
	$downsize = isset($showdown_r[5]) ? $showdown_r[5] : '';
	$downpwd = isset($showdown_r[6]) ? $showdown_r[6] : '';
	$downsofttemp=str_replace('[!--down.size--]',$downsize,$downsofttemp);
	$downsofttemp=str_replace('[!--down.pwd--]',$downpwd,$downsofttemp);
	if(strstr($downsofttemp,'[!--true.down.url--]'))
	{
		$durl=stripSlashes($showdown_r[1]);
		$durlr=ReturnDownQzPath($durl,$showdown_r[4]);
		$durl=$durlr['repath'];
		$downsofttemp=str_replace('[!--true.down.url--]',$durl,$downsofttemp);
	}
	return $downsofttemp;
}

四、修改下载页面模板变量(GetDownloadPage 函数)

在同一个文件中,找到 GetDownloadPage 函数,增加新字段的模板变量:

在函数中增加以下两行(放在其他 str_replace 附近):

$temptext=str_replace("[!--down.size--]","<?=\$downsize?>",$temptext);
$temptext=str_replace("[!--down.pwd--]","<?=\$downpwd?>",$temptext);

五、修改downpath字段表单代码

<script>
function doadd()
{
    var i;
    var str="";
    var oldi=0;
    var j=0;
    oldi=parseInt(document.add.editnum.value);
    for(i=1;i<=document.add.downnum.value;i++)
    {
        j=i+oldi;
        str=str+"<tr>"+
            "<td width='6%'><div align=center>"+j+"</div></td>"+
            "<td width='14%'><div align=left><input name=downname[] type=text id=downname[] value='下载地址"+j+"' size=14></div></td>"+
            "<td width='28%'><input name=downpath[] type=text size=28 id=downpath"+j+" ondblclick=SpOpenChFile(0,'downpath"+j+"')><select name=thedownqz[]><option value=''>--地址前缀--</option><?=$newdownqz?></select></td>"+
            "<td width='10%'><div align=center><select name=downuser[] id=select><option value=0>游客</option><?=$ygroup?></select></div></td>"+
            "<td width='7%'><div align=center><input name=fen[] type=text id=fen[] value=0 size=4></div></td>"+
            "<td width='10%'><div align=center><input name=downsize[] type=text id=downsize[] value='' size=8 placeholder='如:21 MB'></div></td>"+
            "<td width='10%'><div align=center><input name=downpwd[] type=text id=downpwd[] value='' size=8 placeholder='网盘密码'></div></td>"+
            "</tr>";
    }
    document.getElementById("adddown").innerHTML="<table width='100%' border=0 cellspacing=1 cellpadding=3>"+str+"</table>";
}
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td height="25">下载地址前缀&nbsp;:
      <input name="downurl_qz" type="text" size="32">
      <select name="changeurl_qz" onchange="document.add.downurl_qz.value=document.add.changeurl_qz.value">
        <option value="" selected>选择前缀</option>
        <?=$downurlqz?>
      </select>
	  </td>
  </tr>
  <tr>
    <td height="25">选择/上传附件:
      <input name="changedown_url" id="changedown_url" type="text" size="32">
      <input type="button" name="Submit" value="选择" onclick="window.open('ecmseditor/FileMain.php?type=0&classid=<?=$classid?>&infoid=<?=$id?>&filepass=<?=$filepass?>&sinfo=1&doing=1&field=changedown_url<?=$ecms_hashur[ehref]?>','','width=700,height=550,scrollbars=yes');">&nbsp;
	  <input type="button" name="Submit" value="复制" onclick="document.getElementById('changedown_url').focus();document.getElementById('changedown_url').select();clipboardData.setData('text',document.getElementById('changedown_url').value);"></td>
  </tr>
  <tr> 
    <td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#DBEAF5">
        <tr> 
          <td width="6%"> <div align="center">编号</div></td>
          <td width="14%"><div align="left">下载名称</div></td>
          <td width="28%">下载地址 <font color="#666666">(双击选择)</font></td>
          <td width="10%"> <div align="center">权限</div></td>
          <td width="7%"> <div align="center">点数</div></td>
          <td width="10%"> <div align="center">大小</div></td>
          <td width="10%"> <div align="center">网盘密码</div></td>
        </tr>
      </table></td>
  </tr>
  <tr> 
    <td>
    <?php
    if($ecmsfirstpost==1)
    {
    ?>
	<table width='100%' border=0 cellspacing=1 cellpadding=3>
	<?php
	$editnum=3;
	for($pathi=1;$pathi<=$editnum;$pathi++)
	{
	?>
           <tr> 
              <td width='6%'> <div align=center><?=$pathi?></div></td>
              <td width='14%'> <div align=left> 
                  <input name=downname[] type=text value='下载地址<?=$pathi?>' size=14>
                    </div></td>
              <td width='28%'>
	      <input name=downpath[] type=text size=28 id='downpath<?=$pathi?>' ondblclick="SpOpenChFile(0,'downpath<?=$pathi?>');">
	      <select name=thedownqz[]><option value=''>--地址前缀--</option><?=$newdownqz?></select> 
                  </td>
                  <td width='10%'><div align=center> 
                      <select name=downuser[]>
                        <option value=0>游客</option>
                        <?=$ygroup?>
                      </select>
                    </div></td>
                  <td width='7%'> <div align=center> 
                      <input name=fen[] type=text value=0 size=4>
                    </div></td>
                  <td width='10%'> <div align=center> 
                      <input name=downsize[] type=text value='' size=8 placeholder='如:21 MB'>
                    </div></td>
                  <td width='10%'> <div align=center> 
                      <input name=downpwd[] type=text value='' size=8 placeholder='网盘密码'>
                    </div></td>
            </tr>
	<?php
	}
	?>
	</table>
    <?php
    }
    else
    {
	$editnum=0;
	$downloadpath="";
	if($r[downpath])
	{
		$r[downpath]=stripSlashes($r[downpath]);
		//下载地址
		$j=0;
		$d_record=explode("\r\n",$r[downpath]);
		for($i=0;$i<count($d_record);$i++)
		{
			$j=$i+1;
			$d_field=explode("::::::",$d_record[$i]);
			//权限
			$tgroup=str_replace(" value=".$d_field[2].">"," value=".$d_field[2]." selected>",$ygroup);
			//地址前缀
			$tnewdownqz=str_replace(" value='".$d_field[4]."'>"," value='".$d_field[4]."' selected>",$newdownqz);
			//大小(第6个字段,索引5)
			$downsize_val = isset($d_field[5]) ? $d_field[5] : '';
			//网盘密码(第7个字段,索引6)
			$downpwd_val = isset($d_field[6]) ? $d_field[6] : '';
			
			// 修正:PHP字符串拼接用 . 而不是 +
			$downloadpath.="<tr>"
			    ."<td width='6%'><div align=center>".$j."</div></td>"
			    ."<td width='14%'><div align=left><input name=downname[] type=text id=downname[] value='".$d_field[0]."' size=14></div></td>"
			    ."<td width='28%'><input name=downpath[] type=text id=downpath".$j." value='".$d_field[1]."' size=28 ondblclick=\"SpOpenChFile(0,'downpath".$j."');\"><select name=thedownqz[]><option value=''>--地址前缀--</option>".$tnewdownqz."</select><input type=hidden name=pathid[] value=".$j."><input type=checkbox name=delpathid[] value=".$j.">删</td>"
			    ."<td width='10%'><div align=center><select name=downuser[] id=select><option value=0>游客</option>".$tgroup."</select></div></td>"
			    ."<td width='7%'><div align=center><input name=fen[] type=text id=fen[] value='".$d_field[3]."' size=4></div></td>"
			    ."<td width='10%'><div align=center><input name=downsize[] type=text id=downsize[] value='".$downsize_val."' size=8 placeholder='如:21 MB'></div></td>"
			    ."<td width='10%'><div align=center><input name=downpwd[] type=text id=downpwd[] value='".$downpwd_val."' size=8 placeholder='网盘密码'></div></td>"
			    ."</tr>";
		}
		$editnum=$j;
		$downloadpath="<table width='100%' border=0 cellspacing=1 cellpadding=3>".$downloadpath."</table>";
	}
	echo $downloadpath;
    }
    ?>
    </td>
  </tr>
  <tr> 
    <td height="25">下载地址扩展数量: <input name="editnum" type="hidden" id="editnum" value="<?=$editnum?>">
      <input name="downnum" type="text" id="downnum" value="1" size="6"> <input type="button" name="Submit5" value="输出地址" onclick="javascript:doadd();"></td>
  </tr>
  <tr> 
    <td id=adddown></td>
  </tr>
</table>

本文由网友投稿或聚码屋整理自网络,如转载请注明出处:https://www.ym3.net/2599.html

本站发布的内容若侵犯到您的权益,请邮件联系 cnzz8#outlook.com  删除,我们将及时处理!

本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。

本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。

若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。

 游客 发表评论

请先登录OR注册后评论

请先登录

还没有评论,快来说点什么吧~

返回顶部