当前位置:首页 > 帝国CMS学习

图集字段增加多个字段说明需求开发记录

作者:Shu | 时间:2023-03-31 | 栏目:帝国CMS学习 | 围观热度:1043

客户需求

有个客户要求对帝国cms的图集字段进行二次开发,要求是多个几个图片说明,然后图片说明做成多行文本框的形式,效果图是这样的

帝国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">&nbsp;&nbsp;
            <input type="checkbox" name="msavepic" value="1">远程保存&nbsp;<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);
     }
}