表单]解析类
/*数组结构应该为:
array(
[name]=>array(
[title]=>'当前表单项的名称',
[type]=>'text|select',
[description]=>'表单内容的介绍说明'
[iterm]=>'1:使用标准双接口,使用担保交易接口', //如果含有":",则前面为value值,后面为显示内容
[value]=>'使用担保交易接口',
),
...
)
使用方法:
将上述的格式传入到数组中去,然后进行解析:
1.声明类,并创建数组
$af = new Array2form($config);
2.设置一个表单模板(可选,如果不设置载入默认)
$af->SetDefaultTpl($templets); $templets:为一个底册模板文件
表单模板格式为:
~title~:~form~~description~
3.获取特定项目表单
$af->GetIterm('alipay', 1) //1.表示获取一个默认模板下的完整表单,2.仅获取一个表单项
4.获取所有表单内容
$af->GetAll() //获取表单所有解析后的内容
*/
class Array2form
{
var $FormArray = array();
var $ArrFromTPL = '';
function __construct($formarray = array())
{
if(count($formarray) > 1)
{
$this->FormArray = $formarray;
//var_dump($this->FormArray);
$this->SetDefaultTpl();
}
}
//析构函数,兼容PHP4
/*
function Array2form($formarray = array())
{
$this->__construct($formarray);
}
*/
//获取一个特定项目的表单
function GetIterm($itermid = '', $itermtype = 1)
{
$reval = $reval_form = $reval_title = $reval_des = $myformItem = '';
if(is_array($this->FormArray))
{
foreach ($this->FormArray as $key => $val) {
if($key == $itermid)
{
$reval_title = $val['title'];
$reval_des = $val['description'];
$reval_form = $this->GetForm($key,$val, $val['type']);
//进行模板标签替换
if($itermtype == 1)
$reval = preg_replace(array("/~title~/","/~form~/","/~description~/"),
array($reval_title, $reval_form, $reval_des), $this->ArrFromTPL);
else return $reval_form;
}
}
} else {
return FALSE;
}
return empty($reval)? '' : $reval;
}
function GetForm($key, $formarry = array(), $formtype='text')
{
switch ($formtype)
{
case 'text':
//生成文本编辑框
$valstr=(empty($formarry['value']))? "value=''" : "value='{$formarry['value']}'";
$reval_form = "";
break;
case 'select':
//生成选择框
$reval_title = $formarry['title'];
$items = explode(',',$formarry['iterm']);
$reval_form = "\r\n";
break;
}
return $reval_form;
}
//获取所有的表单内容
function GetAll()
{
$reval=empty($reval)? '' : $reval;
if(is_array($this->FormArray))
{
foreach ($this->FormArray as $key => $val)
{
$reval .= $this->GetIterm($key);
}
return $reval;
}else{
return FALSE;
}
}
//获取一个特定项目的表单
function SetDefaultTpl($tplname = '')
{
if(empty($tplname))
{
$this->ArrFromTPL = '~title~:~form~~description~
';
} else {
if(file_exists($tplname)) $this->ArrFromTPL = file_get_contents($tplname);
else $this->ArrFromTPL = $tplname;
}
}
}
$tplstring = "
~title~: |
~form~ ~description~ |
";
//安装支付接口
if($dopost=='install')
{
$row = $dsql->GetOne("SELECT * FROM `#@__payment` WHERE id='$pid'");
if(is_array($row))
{
if($cfg_soft_lang == 'utf-8')
{
$config_row = AutoCharset(unserialize(utf82gb($row['config'])));
}else if($cfg_soft_lang == 'gb2312'){
$config_row = unserialize($row['config']);
}
//print_r($config_row);exit;
$af = new Array2form($config_row);
$af->SetDefaultTpl($tplstring);
$reval = $af->GetAll();
}
include DedeInclude('templets/sys_payment_install.htm');
exit;
}
//配置支付接口
else if($dopost=='config')
{
if($pay_name=="" || $pay_desc=="" || $pay_fee=="")
{
ShowMsg("您有未填写的项目!","-1");
exit();
}
$row = $dsql->GetOne("SELECT * FROM `#@__payment` WHERE id='$pid'");
if($cfg_soft_lang == 'utf-8')
{
$config = AutoCharset(unserialize(utf82gb($row['config'])));
}else if($cfg_soft_lang == 'gb2312'){
$config = unserialize($row['config']);
}
$payments = "'code' => '".$row['code']."',";
foreach ($config as $key => $v)
{
$config[$key]['value'] = ${$key};
$payments .= "'".$key."' => '".$config[$key]['value']."',";
}
$payments = substr($payments, 0, -1);
$payment = "\$payment=array(".$payments.")";
$configstr = "<"."?php\r\n".$payment."\r\n?".">\r\n";
if(!empty($payment))
{
$m_file = DEDEDATA."/payment/".$row['code'].".php";
$fp = fopen($m_file,"w") or die("写入文件 $safeconfigfile 失败,请检查权限!");
fwrite($fp,$configstr);
fclose($fp);
}
if($cfg_soft_lang == 'utf-8')
{
$config = AutoCharset($config,'utf-8','gb2312');
$config = serialize($config);
$config = gb2utf8($config);
}else{
$config = serialize($config);
}
$query = "UPDATE `#@__payment` SET name = '$pay_name',fee='$pay_fee',description='$pay_desc',config='$config',enabled='1' WHERE id='$pid'";
$dsql->ExecuteNoneQuery($query);
if($pm=='edit') $msg="保存修改成功";
else $msg="安装成功!";
ShowMsg($msg, "sys_payment.php");
exit();
}
//删除支付接口
else if($dopost=='uninstall')
{
$row = $dsql->GetOne("SELECT * FROM `#@__payment` WHERE id='$pid'");
if($cfg_soft_lang == 'utf-8')
{
$config = AutoCharset(unserialize(utf82gb($row['config'])));
}else if($cfg_soft_lang == 'gb2312'){
$config = unserialize($row['config']);
}
foreach ($config as $key => $v) $config[$key]['value']="";
if($cfg_soft_lang == 'utf-8')
{
$config = AutoCharset($config,'utf-8','gb2312');
$config = serialize($config);
$config = gb2utf8($config);
}else{
$config = serialize($config);
}
$query = "UPDATE `#@__payment` SET fee='',config='$config',enabled='0' WHERE id='$pid'";
$dsql->ExecuteNoneQuery($query);
//同时需要删除对应的缓存
$m_file = DEDEDATA."/payment/".$row['code'].".php";
@unlink($m_file);
ShowMsg("删除成功!", "sys_payment.php");
exit();
}
$sql = "SELECT * FROM `#@__payment` ORDER BY rank ASC";
$dlist = new DataListCP();
$dlist->SetTemplet(DEDEADMIN."/templets/sys_payment.htm");
$dlist->SetSource($sql);
$dlist->display();