表单]解析类
/*数组结构应该为:
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();
}
}
//获取一个特定项目的表单
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();