二次开发一个百度百科词条系统
百度百科都看过,一个词条可以创建许多个小标题分类。利用帝国CMS来做的话,最简单的方法就是自己再编辑器里面分段落,然后利用CSS来达到词条的效果。但是不利用后期修改,如果词条太多,内容太长不方便维护。还有一种方法就是利用帝国CMS的多值字段了,这个也不难,照着官方的代码稍微改改就能实现百度百科的效果了。
首先我们需要添加一个百科的多值字段。
字段名:ct
字段标识:词条
类型:中型
输入表单显示元素:多值字段
大概的输入表单替换html代码如下面这样。
function domvadd_p_ctnr() { var i; var str=''; var oldi=0; var j=0; var addnum=0; addnum=parseInt(document.add.mvaddnum_p_ctnr.value); oldi=parseInt(document.add.mveditnum_p_ctnr.value); for(i=1;i<=addnum;i++) { j=i+oldi; str=str+'<tr><td align=center valign=top><input class=p2 type=text name=p_ctnr_1[] id=p_ctnr_1_'+j+' value= class=p2 size=60></td><td align=center><textarea name=p_ctnr_2[] id=p_ctnr_2_'+j+' rows=12 cols=80></textarea></td></tr>'; } document.getElementById(mvadd_p_ctnr).innerHTML=<table width='100%' border=0 cellspacing=1 cellpadding=3>+str+</table>; } </script> <table width=100% border=0 cellspacing=0 cellpadding=0> <tr> <td> <table width=100% border=0 cellpadding=3 cellspacing=1 bgcolor=#DBEAF5> <tr><td align=center>标题</td><td align=center>分段内容</td></tr> </table> </td> </tr> <tr> <td> <?php if($ecmsfirstpost==1) { ?> <table width='100%' border=0 cellspacing=1 cellpadding=3> <?php $editnum=3; for($i=1;$i<=$editnum;$i++) { ?> <tr> <td align=center valign=top><input type=text name=p_ctnr_1[]2 id=p_ctnr_1_<?=$i?> value= class=p2 size=60/></td> <td align=center> <textarea name=p_ctnr_2[] id=p_ctnr_2_<?=$i?> rows=12 cols=80></textarea></td></tr> <?php } ?> </table> <?php } else { $editnum=0; if($r['p_ctnr']) { $r['p_ctnr']=stripSlashes($r['p_ctnr']); ?> <table width='100%' border=0 cellspacing=1 cellpadding=3> <?php //录入项 $j=0; $mvf_record=explode('||||||',$r['p_ctnr']); $mvf_count=count($mvf_record); for($i=0;$i<$mvf_count;$i++) { $j=$i+1; $mvf_field=explode(::::::,$mvf_record[$i]); ?> <tr><td align=center valign=top><input type=text name=p_ctnr_1[] id=p_ctnr_1_<?=$j?> value=<?=$mvf_field[0]?> class=p2 size=60> <input type=hidden name=p_ctnr_mvid[] id=p_ctnr_mvid_<?=$j?> value=<?=$j?>><input type=checkbox name=p_ctnr_mvdelid[] id=p_ctnr_mvdelid_<?=$j?> value=<?=$j?>>删</td><td align=center><textarea name=p_ctnr_2[] id=p_ctnr_2_<?=$j?> rows=12 cols=80><?=$mvf_field[1]?></textarea></td></tr> <?php } ?> </table> <?php $editnum=$j; } } ?> </td> </tr> <tr> <td height=25>扩展数量: <input name=mveditnum_p_ctnr type=hidden id=mveditnum_p_ctnr value=<?=$editnum?>> <input name=mvnum_p_ctnr type=hidden id=mvnum_p_ctnr value=2> <input name=mvmust_p_ctnr type=hidden id=mvmust_p_ctnr value=1> <input name=mvaddnum_p_ctnr type=text id=mvaddnum_p_ctnr value=1 size=6> <input type=button name=Submit5 value=输出 onclick=javascript:domvadd_p_ctnr();></td> </tr> <tr> <td id=mvadd_p_ctnr></td> </tr> </table>
熟悉帝国CMS的添加字段大家都会,主要是前台调用有点难。帝国CMS论坛找了一段,循环分隔多值字段的代码,稍加修改。
<?php $morefr=explode('||||||',$navinfor[p_ctnr]); $mfcount=count($morefr); for($mfi=0;$mfi<$mfcount;$mfi++) { $morefrf=explode('::::::',$morefr[$mfi]); ?><li class=font16 line36><span><?=$mfi+1?>.</span><a title=<?=$morefrf[0]?> data-slide=<?=$mfi+1?> onClick=gotofloor(this); href=javascript:void(0); class=<? echo $mfi==0?'fb':'';?>><?=$morefrf[0]?></a></li><?php } ?> </ol> <?php $morefr=explode('||||||',$navinfor[p_ctnr]); $mfcount=count($morefr); for($mfi=0;$mfi<$mfcount;$mfi++) { $morefrf=explode('::::::',$morefr[$mfi]); ?> <li class=gray8 line26 jies> <dt class=title data-slide=<?=$mfi+1?>><span><?=$morefrf[0]?></span></dt> <dd class=newstext><?=$morefrf[1]?> </dd> </li> <?php } ?>
上面一段为调用的目录,下面的一段循环调用的词条标题和内容。前台的样式大家自行修改,我们主要看看后台是什么样的。
可以自由添加词条数量,也可以删除,这样维护起来是不是就方便些了。