客户需求
有个客户要求对帝国cms的图集字段进行二次开发,要求是多个几个图片说明,然后图片说明做成多行文本框的形式,效果图是这样的
刚开始听完客户的需求,感觉很有点奇怪。因为对于我个人而言,同一张图片要搞多个说明,完全可以在现有的图片说明里录入。因为现有的图片说明录入是单行文本框,录入起来不方便,所以只要把单行文本框改成多行文本框,在录入多个说明的时候通过换行或者其他特定字符把每个说明分开,然后在前台调用的时候再分隔一下就可以了。
但是客户既然提要求了,我们就得尽量满足吧!谁叫客户就是上帝呢!
初步开发思路
刚开始我想,既然你要多几个说明字段,那就在图集字段(morepic)后追加几个,只要数组下标不一样,在提交的时候使用帝国cms提供的【后台增加/修改信息处理函数】做一下处理再返回去即可。但是你会发现这样做问题会更加复杂化,主要是因为图集是为特殊的字段,它有图片上传功能。它复杂化主要存在于
1、你要处理图片上传时所发生的一系列问题,比如(图片大小、格式的判定,上传路径的问题,写入数据库的问题)这些都得跟帝国cms原有的功能同步上。
2、多一次上传操作。了解帝国cms的你会发现,帝国cms对图集字段的操作会优先于你的自定义函数操作。也就是说帝国cms在图集有图片要上传的时候,人家先把图片给你上传好,写入数据库,再到你操作。这样的话,你再上传处理数据,那你后面所做的工作除了白费,就是产生垃圾,这是不可取的。
基于以上原因,使用自定义的信息处理函数是不可取的。
最终开发思路
既然你要增加图片说明,但是现在又现成有一个图片说明字段,那我可不可以这样做呢?原帝国cms的数据格式是:小图::::::大图::::::图片说明,那把它做成这样:小图::::::大图::::::图片说明1@@@@@图片说明2@@@@@图片说明3,这样无论加多少个图片说明都没问题了。
但前提是必须在ReturnAddF(返回自定义字段)之前把图片说明数据给拼合好。ReturnAddF(返回自定义字段)在帝国cms的AddNews跟EditNews函数都有存在,如果在这两个函数内做拼合,那么势必要做2次操作,所以最后我选择在DoPostInfoVar(增加信息处理变量)函数的最后一行增加如下代码:
if($add['mpicname'] && is_array($add['mpicname'])) {
foreach ($add['mpicname'] as $k=>$v) {
$add['mpicname'][$k] = implode('@@@@@',$v);
}
}
这样就能完美的解决问题。
具体代码
后台--输入表单替换html代码
<script>
function dopicadd()
{var i;
var str="";
var oldi=0;
var j=0;
oldi=parseInt(document.add.morepicnum.value);
for(i=1;i<=document.add.downmorepicnum.value;i++)
{
j=i+oldi;
str=str+"<tr><td width=7%><div align=center>"+j+"</div></td><td width=33%><div align=center><input name=msmallpic[] type=text size=28 id=msmallpic"+j+" ondblclick=SpOpenChFile(1,'msmallpic"+j+"')><br><input type=file name=msmallpfile[] size=15></div></td><td width=30%><div align=center><input name=mbigpic[] type=text size=28 id=mbigpic"+j+" ondblclick=SpOpenChFile(1,'mbigpic"+j+"')><br><input type=file name=mbigpfile[] size=15></div></td><td width=15%><div align=center><textarea name=mpicname["+(j-1)+"][1] rows='3' cols='20'></textarea></div></td><td width=15%><div align=center><textarea name=mpicname["+(j-1)+"][2] rows='3' cols='20'></textarea></div></td><td width=15%><div align=center><textarea name=mpicname["+(j-1)+"][3] rows='3' cols='20'></textarea></div></td><td width=15%><div align=center><textarea name=mpicname["+(j-1)+"][4] rows='3' cols='20'></textarea></div></td><td width=15%><div align=center><textarea name=mpicname["+(j-1)+"][5] rows='3' cols='20'></textarea></div></td></tr>";
}
document.getElementById("addpicdown").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">
图片地址前缀:
<input name="mpicurl_qz" type="text" id="mpicurl_qz">
<input type="checkbox" name="msavepic" value="1">远程保存 <input type="checkbox" name="mcreatespic" value="1" onclick="if(this.checked){setmcreatespic.style.display='';}else{setmcreatespic.style.display='none';}">生成缩图
<span id="setmcreatespic" style="display:none">:<input type=text name="mcreatespicwidth" size=4 value="<?=$public_r[spicwidth]?>">*<input type=text name="mcreatespicheight" size=4 value="<?=$public_r[spicheight]?>">(宽*高)</span>
<?php
if(TranmoreIsOpen())
{
?>
<input type="button" name="Submit" value="多选上传" onclick="window.open('ecmseditor/tranmore/tranmore.php?type=1&classid=<?=$classid?>&filepass=<?=$filepass?>&infoid=<?=$id?>&modtype=0&sinfo=1&ecmsdo=ecmstmmorepic&tranfrom=2<?=$ecms_hashur['ehref']?>&oldmorepicnum='+document.add.morepicnum.value,'ecmstmpage','width=700,height=550,scrollbars=yes');">
<?php
}
?>
</td>
</tr>
<tr>
<td><table width="100%" border=0 align=center cellpadding=3 cellspacing=1>
<tr bgcolor="#DBEAF5">
<td width="7%"><div align=center>编号</div></td>
<td width="18%"><div align=center>缩图 <font color="#666666">(双击选择)</font></div></td>
<td width="18%"><div align=center>大图 <font color="#666666">(双击选择)</font></div></td>
<td width="12%"><div align=center>图片说明1</div></td>
<td width="12%"><div align=center>图片说明2</div></td>
<td width="12%"><div align=center>图片说明3</div></td>
<td width="12%"><div align=center>图片说明4</div></td>
<td width="12%"><div align=center>图片说明5</div></td>
</tr>
</table></td>
</tr>
<tr>
<td id=defmorepicid>
<?php
if($ecmsfirstpost==1)
{
?>
<table width='100%' border=0 align=center cellpadding=3 cellspacing=1>
<?php
$morepicnum=3;
for($mppathi=1;$mppathi<=$morepicnum;$mppathi++)
{
?>
<tr>
<td width='7%'><div align=center><?=$mppathi?></div></td>
<td width='25%'><div align=center>
<input name=msmallpic[] type=text id='msmallpic<?=$mppathi?>' size=28 ondblclick="SpOpenChFile(1,'msmallpic<?=$mppathi?>');">
<br><input type=file name=msmallpfile[] size=15>
</div></td>
<td width='25%'><div align=center>
<input name=mbigpic[] type=text id='mbigpic<?=$mppathi?>' size=28 ondblclick="SpOpenChFile(1,'mbigpic<?=$mppathi?>');">
<br><input type=file name=mbigpfile[] size=15>
</div></td>
<td width='15%'><div align=center>
<textarea name="mpicname[<?=$mppathi-1?>][1]" rows="3" cols="20"></textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name="mpicname[<?=$mppathi-1?>][2]" rows="3" cols="20"></textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name="mpicname[<?=$mppathi-1?>][3]" rows="3" cols="20"></textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name="mpicname[<?=$mppathi-1?>][4]" rows="3" cols="20"></textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name="mpicname[<?=$mppathi-1?>][5]" rows="3" cols="20"></textarea>
</div></td>
</tr>
<?php
}
?>
</table>
<?php
}
else
{
$morepicpath="";
$morepicnum=0;
if($r[morepic])
{
$r[morepic]=stripSlashes($r[morepic]);
//地址
$j=0;
$pd_record=explode("\r\n",$r[morepic]);
for($i=0;$i<count($pd_record);$i++)
{
$j=$i+1;
$pd_field=explode("::::::",$pd_record[$i]);
$picnameR = explode('@@@@@',$pd_field[2]);
$k=$j-1;
$morepicpath.="<tr>
<td width='7%'><div align=center>".$j."</div></td>
<td width='25%'><div align=center>
<input name=msmallpic[] type=text value='".$pd_field[0]."' size=28 id=msmallpic".$j." ondblclick=\"SpOpenChFile(1,'msmallpic".$j."');\">
<br><input type=file name=msmallpfile[] size=15>
</div></td>
<td width='25%'><div align=center>
<input name=mbigpic[] type=text value='".$pd_field[1]."' size=28 id=mbigpic".$j." ondblclick=\"SpOpenChFile(1,'mbigpic".$j."');\">
<br><input type=file name=mbigpfile[] size=15>
</div></td>
<td width='15%'><div align=center>
<textarea name=mpicname[".$k."][1] id=mpicname1_".$j." rows='3' cols='20'>".$picnameR[0]."</textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name=mpicname[".$k."][2] id=mpicname2_".$j." rows='3' cols='20'>".$picnameR[1]."</textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name=mpicname[".$k."][3] id=mpicname3_".$j." rows='3' cols='20'>".$picnameR[2]."</textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name=mpicname[".$k."][4] id=mpicname4_".$j." rows='3' cols='20'>".$picnameR[3]."</textarea>
</div></td>
<td width='15%'><div align=center>
<textarea name=mpicname[".$k."][5] id=mpicname5_".$j." rows='3' cols='20'>".$picnameR[4]."</textarea> <input type=hidden name=mpicid[] value=".$k."><input type=checkbox name=mdelpicid[] value=".$k.">删
</div></td>
</tr>";
}
$morepicnum=$j;
$morepicpath="<table width='100%' border=0 cellspacing=1 cellpadding=3>".$morepicpath."</table>";
}
echo $morepicpath;
}
?>
</td>
</tr>
<tr>
<td height="25">地址扩展数量: <input name="morepicnum" type="hidden" id="morepicnum" value="<?=$morepicnum?>">
<input name="downmorepicnum" type="text" value="1" size="6"> <input type="button" name="Submit5" value="输出地址" onclick="javascript:dopicadd();"></td>
</tr>
<tr>
<td id=addpicdown></td>
</tr>
</table>
文件改动--e/class/hinfofun.php 搜索DoPostInfoVar函数,在最后增加如下代码
if($add['mpicname'] && is_array($add['mpicname'])) {
foreach ($add['mpicname'] as $k=>$v) {
$add['mpicname'][$k] = implode('@@@@@',$v);
}
}