新版的phpcms2008终于浮出水面,我们的助易测试团队迫不及待的对其进行了试用,并用最快的时间完成了测评报告,和所有关注phpcms2008的人分享我们的心得。
前言
2008年9月1日,经过并购风波之后,国内著名内容管理系统phpcms开发团队终于拿出了他们转投新东家的第一份成绩单——phpcms2008 beta1版,相比其他cms发版时大张旗鼓宣传不同,这次测试版的发布相当的低调——发版时间选择在凌晨,官方网站上也没有任何的宣传消息。透过从phpcms论坛以及开发团队所发表的功能说明中,phpcms2008增加很多令人期待的功能,因此虽然此次发布的仅仅是测试版,还是引起了广大站长的关注,助易网测评小组也从phpcms官方网站下载程序并对其进行试用,究竟新的phpcms2008会是什么样子?有什么样的改变?增强了哪些功能?助易网测评小组经评测后给出了自己的答案。
收集整理:肥龙龙(635249)/宇宏(4598685)/疯狂兔不死鸟(80774505)
博客:http://www.blog-dragon.com/
更多内容:http://www.cmshelp.com.cn/
技术支持群:48608218
近日研究使用phpcms sp6,当进行会员管理设置会员所在地的时候,发现当切换省份时,对应的城市及城区的下拉菜单中会出现html输出的500错误信息,对应会出现的问题的代码如下(/member/admin/templates/member_edit.tpl.php):
<option value="0" selected="selected">请选择</option>
</select>
<select name="city" id="city" onChange="javascript:loadarea($('province').value, this.value);">
<option value="0" selected="selected">请选择</option>
</select>
<select name="area" id="area">
<option value="0" selected="selected">请选择</option>
</select>
<script language="javascript">
<!--
var phpcms_path = '<?=PHPCMS_PATH?>';
var selectedprovince = '<?=$province?>';
var selectedcity = '<?=$city?>';
var selectedarea = '<?=$area?>';
//-->
</script>
<script type="text/javascript" src="<?=PHPCMS_PATH?>include/js/area.js"></script>
分析原因,是因为我的调试环境不支持ajax的GET方法传递中文参数(这个问题可能在一些纯中文的环境中被避免),问题出现在area.js这个文件。解决此问题,只需要将中文参数通过UrlEncode的编码再进行传递即可。解决方法如下:
修改/include/js/area.js文件如下:
function loadprovince()
{
var pars = "action=province";
var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: setprovince});
}
//urlencode编码
String.prototype.UrlEncode = function()
{
var str = this;
str = str.replace(/./g,function(sHex)
{
window.EnCodeStr = "";
window.sHex = sHex;
window.execScript('window.EnCodeStr=Hex(Asc(window.sHex))',"vbscript");
return window.EnCodeStr.replace(/../g,"%$&");
});
return str;
}
function setprovince(Request)
{
var text = Request.responseText;
var provinces = text.split(",");
var currprovince = enterValue(provinces, $('province'));
loadcity(currprovince);
}
function loadcity(province)
{
var pars = "action=city&province=" + province.UrlEncode();
var cAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: setcity});
}
function setcity(Request)
{
var text = Request.responseText;
var citys = text.split(",");
var currcity = enterValue(citys, $('city'));
loadarea($('province').value, currcity);
}
function loadarea(province,city)
{
var pars = "action=area&province="+ province.UrlEncode() +"&city="+ city.UrlEncode();
var aAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: setarea});
}
function setarea(Request)
{
var text = Request.responseText;
var areas = text.split(",");
enterValue(areas, $('area'));
}
function enterValue(cell,place)
{
clearPreValue(place);
var selectedval = cell[0];
for(i=0; i<cell.length; i++)
{
isselected = addOption(place, cell[i], cell[i]);
if(isselected)
{
place.options[i].selected = true;
selectedval = cell[i];
}
}
return selectedval;
}
function addOption(objSelectNow,txt,val)
{
var objOption = document.createElement("option");
objOption.text = txt;
objOption.value = val;
objSelectNow.options.add(objOption);
return objOption.value == selectedprovince || objOption.value == selectedcity || objOption.value == selectedarea;
}
function clearPreValue(pc)
{
while(pc.hasChildNodes())
pc.removeChild(pc.childNodes[0]);
}
loadprovince();
其中关键部分为新增函数UrlEncode,为中文参数进行编码。请自行理解。
have fun!
