找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2040|回复: 0

[分享] Discuz!开发之网站后台表单生成函数showsetting()详情

[复制链接]
发表于 2017-11-14 14:06:17 | 显示全部楼层 |阅读模式 来自 河南省新乡市
Discuz!为了界面统一,专门封装了一个表单生成函数showsetting(),使用改函数几乎可以生成任意web表单,本文就来介绍一下这个函数的用法:
定义文件:\source\function\function_admincp.php
函数定义:
  1. function showsetting($setname, $varname, $value, $type = 'radio', $disabled = '', $hidden = 0, $comment = '', $extra = '', $setid = '', $nofaq = false) {  
  2.   
  3.     global $_G;  
  4.     $s = "\n";  
  5.     $check = array();  
  6.     $noborder = false;  
  7.     if(substr($disabled, 0, 8) == 'noborder') {  
  8.         $disabled = trim(substr($disabled, 8));  
  9.         $noborder = 'class="noborder" ';  
  10.     }  
  11.     $check['disabled'] = $disabled ? ($disabled == 'readonly' ? ' readonly' : ' disabled') : '';  
  12.     $check['disabledaltstyle'] = $disabled ? ', 1' : '';  
  13.   
  14.   
  15.     $nocomment = false;  
  16.   
  17.   
  18.     if(isset($_G['showsetting_multi'])) {  
  19.         $hidden = 0;  
  20.         if(is_array($varname)) {  
  21.             $varnameid = '_'.str_replace(array('[', ']'), '_', $varname[0]).'|'.$_G['showsetting_multi'];  
  22.             $varname[0] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[0]);  
  23.         } else {  
  24.             $varnameid = '_'.str_replace(array('[', ']'), '_', $varname).'|'.$_G['showsetting_multi'];  
  25.             $varname = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname);  
  26.         }  
  27.     } else {  
  28.         $varnameid = '';  
  29.     }  
  30.   
  31.   
  32.     if($type == 'radio') {  
  33.         $value ? $check['true'] = "checked" : $check['false'] = "checked";  
  34.         $value ? $check['false'] = '' : $check['true'] = '';  
  35.         $check['hidden1'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'\';"' : '';  
  36.         $check['hidden0'] = $hidden ? ' onclick="$(\'hidden_'.$setname.'\').style.display = \'none\';"' : '';  
  37.         $onclick = $disabled && $disabled == 'readonly' ? ' onclick="return false"' : ($extra ? $extra : '');  
  38.         $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');">'.  
  39.             '<li'.($check['true'] ? ' class="checked"' : '').'><input class="radio" type="radio"'.($varnameid ? ' id="_v1_'.$varnameid.'"' : '').' name="'.$varname.'" value="1" '.$check['true'].$check['hidden1'].$check['disabled'].$onclick.'> '.cplang('yes').'</li>'.  
  40.             '<li'.($check['false'] ? ' class="checked"' : '').'><input class="radio" type="radio"'.($varnameid ? ' id="_v0_'.$varnameid.'"' : '').' name="'.$varname.'" value="0" '.$check['false'].$check['hidden0'].$check['disabled'].$onclick.'> '.cplang('no').'</li>'.  
  41.             '</ul>';  
  42.     } elseif($type == 'text' || $type == 'password' || $type == 'number') {  
  43.         $s .= '<input name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="'.$type.'" class="txt" '.$check['disabled'].' '.$extra.' />';  
  44.     } elseif($type == 'htmltext') {  
  45.         $id .= 'html'.random(2);  
  46.         $s .= '<div id="'.$id.'">'.$value.'</div><input id="'.$id.'_v" name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="hidden" /><script type="text/javascript">sethtml(\''.$id.'\')</script>';  
  47.     } elseif($type == 'file') {  
  48.         $s .= '<input name="'.$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />';  
  49.     } elseif($type == 'filetext') {  
  50.         $defaulttype = $value ? 1 : 0;  
  51.         $id = 'file'.random(2);  
  52.         $s .= '<input id="'.$id.'_0" style="display:'.($defaulttype ? 'none' : '').'" name="'.($defaulttype ? 'TMP' : '').$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />'.  
  53.             '<input id="'.$id.'_1" style="display:'.(!$defaulttype ? 'none' : '').'" name="'.(!$defaulttype ? 'TMP' : '').$varname.'" value="'.dhtmlspecialchars($value).'" type="text" class="txt marginbot" '.$extra.' /><br />'.  
  54.             '<a id="'.$id.'_0a" style="'.(!$defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" onclick="$(\''.$id.'_1a\').style.fontWeight = \'\';this.style.fontWeight = \'bold\';$(\''.$id.'_1\').name = \'TMP'.$varname.'\';$(\''.$id.'_0\').name = \''.$varname.'\';$(\''.$id.'_0\').style.display = \'\';$(\''.$id.'_1\').style.display = \'none\'">'.cplang('switch_upload').'</a> '.  
  55.             '<a id="'.$id.'_1a" style="'.($defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" onclick="$(\''.$id.'_0a\').style.fontWeight = \'\';this.style.fontWeight = \'bold\';$(\''.$id.'_0\').name = \'TMP'.$varname.'\';$(\''.$id.'_1\').name = \''.$varname.'\';$(\''.$id.'_1\').style.display = \'\';$(\''.$id.'_0\').style.display = \'none\'">'.cplang('switch_url').'</a>';  
  56.     } elseif($type == 'textarea') {  
  57.         $readonly = $disabled ? 'readonly' : '';  
  58.         $s .= "<textarea $readonly rows="6" ".(!isset($_G['showsetting_multi']) ? "ondblclick="textareasize(this, 1)"" : '')." onkeyup="textareasize(this, 0)" onkeydown="textareakey(this, event)" name="$varname" id="$varname" cols="50" class="tarea" $extra>".dhtmlspecialchars($value)."</textarea>";  
  59.     } elseif($type == 'select') {  
  60.         $s .= '<select name="'.$varname[0].'" '.$extra.'>';  
  61.         foreach($varname[1] as $option) {  
  62.             if(!array_key_exists(0, $option)) {  
  63.                 $option = array_values($option);  
  64.             }  
  65.             $selected = $option[0] == $value ? 'selected="selected"' : '';  
  66.             if(empty($option[2])) {  
  67.                 $s .= "<option value="$option[0]" $selected>".$option[1]."</option>\n";  
  68.             } else {  
  69.                 $s .= "<optgroup label="".$option[1].""></optgroup>\n";  
  70.             }  
  71.         }  
  72.         $s .= '</select>';  
  73.     } elseif($type == 'mradio' || $type == 'mradio2') {  
  74.         $nocomment = $type == 'mradio2' && !isset($_G['showsetting_multi']) ? true : false;  
  75.         $addstyle = $nocomment ? ' style="float: left; width: 18%"' : '';  
  76.         $ulstyle = $nocomment ? ' style="width: 790px"' : '';  
  77.         if(is_array($varname)) {  
  78.             $radiocheck = array($value => ' checked');  
  79.             $s .= '<ul'.(empty($varname[2]) ?  ' class="nofloat"' : '').' onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';  
  80.             foreach($varname[1] as $varary) {  
  81.                 if(is_array($varary) && !empty($varary)) {  
  82.                     if(!array_key_exists(0, $varary)) {  
  83.                         $varary = array_values($varary);  
  84.                     }  
  85.                     $onclick = '';  
  86.                     if(!isset($_G['showsetting_multi']) && !empty($varary[2])) {  
  87.                         foreach($varary[2] as $ctrlid => $display) {  
  88.                             $onclick .= '$(\''.$ctrlid.'\').style.display = \''.$display.'\';';  
  89.                         }  
  90.                     }  
  91.                     $onclick && $onclick = ' onclick="'.$onclick.'"';  
  92.                     $s .= '<li'.($radiocheck[$varary[0]] ? ' class="checked"' : '').$addstyle.'><input class="radio" type="radio"'.($varnameid ? ' id="_v'.md5($varary[0]).'_'.$varnameid.'"' : '').' name="'.$varname[0].'" value="'.$varary[0].'"'.$radiocheck[$varary[0]].$check['disabled'].$onclick.'> '.$varary[1].'</li>';  
  93.                 }  
  94.             }  
  95.             $s .= '</ul>';  
  96.         }  
  97.     } elseif($type == 'mcheckbox' || $type == 'mcheckbox2') {  
  98.         $nocomment = $type != 'mcheckbox2' && count($varname[1]) > 3 && !isset($_G['showsetting_multi']) ? true : false;  
  99.         $addstyle = $nocomment ? ' style="float: left;'.(empty($_G['showsetting_multirow']) ? ' width: 18%;overflow: hidden;' : '').'"' : '';  
  100.         $ulstyle = $nocomment && empty($_G['showsetting_multirow']) ? ' style="width: 790px"' : '';  
  101.         $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';  
  102.         foreach($varname[1] as $varary) {  
  103.             if(is_array($varary) && !empty($varary)) {  
  104.                 if(!array_key_exists(0, $varary)) {  
  105.                     $varary = array_values($varary);  
  106.                 }  
  107.                 $onclick = !isset($_G['showsetting_multi']) && !empty($varary[2]) ? ' onclick="$(\''.$varary[2].'\').style.display = $(\''.$varary[2].'\').style.display == \'none\' ? \'\' : \'none\';"' : '';  
  108.                 $checked = is_array($value) && in_array($varary[0], $value) ? ' checked' : '';  
  109.                 $s .= '<li'.($checked ? ' class="checked"' : '').$addstyle.' title="'.dhtmlspecialchars($varary[1]).'"><input class="checkbox" type="checkbox"'.($varnameid ? ' id="_v'.md5($varary[0]).'_'.$varnameid.'"' : '').' name="'.$varname[0].'[]" value="'.$varary[0].'"'.$checked.$check['disabled'].$onclick.'> '.$varary[1].'</li>';  
  110.             }  
  111.         }  
  112.         $s .= '</ul>';  
  113.     } elseif($type == 'binmcheckbox') {  
  114.         $checkboxs = count($varname[1]);  
  115.         $value = sprintf('%0'.$checkboxs.'b', $value);$i = 1;  
  116.         $s .= '<ul class="nofloat" onmouseover="altStyle(this'.$check['disabledaltstyle'].');">';  
  117.         foreach($varname[1] as $key => $var) {  
  118.             if($var !== false) {  
  119.                 $s .= '<li'.($value{$checkboxs - $i} ? ' class="checked"' : '').'><input class="checkbox" type="checkbox"'.($varnameid ? ' id="_v'.md5($i).'_'.$varnameid.'"' : '').' name="'.$varname[0].'['.$i.']" value="1"'.($value{$checkboxs - $i} ? ' checked' : '').' '.(!empty($varname[2][$key]) ? $varname[2][$key] : '').'> '.$var.'</li>';  
  120.             }  
  121.             $i++;  
  122.         }  
  123.         $s .= '</ul>';  
  124.     } elseif($type == 'omcheckbox') {  
  125.         $nocomment = count($varname[1]) > 3 ? true : false;  
  126.         $addstyle = $nocomment ? 'style="float: left; width: 18%"' : '';  
  127.         $ulstyle = $nocomment ? 'style="width: 790px"' : '';  
  128.         $s .= '<ul onmouseover="altStyle(this'.$check['disabledaltstyle'].');"'.(empty($varname[2]) ? ' class="nofloat"' : 'class="ckbox"').' '.$ulstyle.'>';  
  129.         foreach($varname[1] as $varary) {  
  130.             if(is_array($varary) && !empty($varary)) {  
  131.                 $checked = is_array($value) && $value[$varary[0]] ? ' checked' : '';  
  132.                 $s .= '<li'.($checked ? ' class="checked"' : '').' '.$addstyle.'><input class="checkbox" type="checkbox" name="'.$varname[0].'['.$varary[0].']" value="'.$varary[2].'"'.$checked.$check['disabled'].'> '.$varary[1].'</li>';  
  133.             }  
  134.         }  
  135.         $s .= '</ul>';  
  136.     } elseif($type == 'mselect') {  
  137.         $s .= '<select name="'.$varname[0].'" multiple="multiple" size="10" '.$extra.'>';  
  138.         foreach($varname[1] as $option) {  
  139.             if(!array_key_exists(0, $option)) {  
  140.                 $option = array_values($option);  
  141.             }  
  142.             $selected = is_array($value) && in_array($option[0], $value) ? 'selected="selected"' : '';  
  143.             if(empty($option[2])) {  
  144.                 $s .= "<option value="$option[0]" $selected>".$option[1]."</option>\n";  
  145.             } else {  
  146.                 $s .= "<optgroup label="".$option[1].""></optgroup>\n";  
  147.             }  
  148.         }  
  149.         $s .= '</select>';  
  150.     } elseif($type == 'color') {  
  151.         global $stylestuff;  
  152.         $preview_varname = str_replace('[', '_', str_replace(']', '', $varname));  
  153.         $code = explode(' ', $value);  
  154.         $css = '';  
  155.         for($i = 0; $i <= 1; $i++) {  
  156.             if($code[$i] != '') {  
  157.                 if($code[$i]{0} == '#') {  
  158.                     $css .= strtoupper($code[$i]).' ';  
  159.                 } elseif(preg_match('/^http:\/\//i', $code[$i])) {  
  160.                     $css .= 'url(\''.$code[$i].'\') ';  
  161.                 } else {  
  162.                     $css .= 'url(\''.$stylestuff['imgdir']['subst'].'/'.$code[$i].'\') ';  
  163.                 }  
  164.             }  
  165.         }  
  166.         $background = trim($css);  
  167.         $colorid = ++$GLOBALS['coloridcount'];  
  168.         $s .= "<input id="c{$colorid}_v" type="text" class="txt" style="float:left; width:210px;" value="$value" name="$varname" onchange="updatecolorpreview('c{$colorid}')">\n".  
  169.             "<input id="c$colorid" onclick="c{$colorid}_frame.location='static/image/admincp/getcolor.htm?c{$colorid}|c{$colorid}_v';showMenu({'ctrlid':'c$colorid'})" type="button" class="colorwd" value="" style="background: $background"><span id="c{$colorid}_menu" style="display: none"><iframe name="c{$colorid}_frame" src="" frameborder="0" width="210" height="148" scrolling="no"></iframe></span>\n$extra";  
  170.     } elseif($type == 'calendar') {  
  171.         $s .= "<input type="text" class="txt" name="$varname" value="".dhtmlspecialchars($value)."" onclick="showcalendar(event, this".($extra ? ', 1' : '').")">\n";  
  172.     } elseif(in_array($type, array('multiply', 'range', 'daterange'))) {  
  173.         $onclick = $type == 'daterange' ? ' onclick="showcalendar(event, this)"' : '';  
  174.         if(isset($_G['showsetting_multi'])) {  
  175.             $varname[1] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[1]);  
  176.         }  
  177.         $s .= "<input type="text" class="txt" name="$varname[0]" value="".dhtmlspecialchars($value[0])."" style="width: 108px; margin-right: 5px;"$onclick>".($type == 'multiply' ? ' X ' : ' -- ')."<input type="text" class="txt" name="$varname[1]" value="".dhtmlspecialchars($value[1]).""class="txt" style="width: 108px; margin-left: 5px;"$onclick>";  
  178.     } else {  
  179.         $s .= $type;  
  180.     }  
  181.     $name = cplang($setname);  
  182.     $name .= $name && substr($name, -1) != ':' ? ':' : '';  
  183.     $name = $disabled ? '<span class="lightfont">'.$name.'</span>' : $name;  
  184.     $setid = !$setid ? substr(md5($setname), 0, 4) : $setid;  
  185.     $setid = isset($_G['showsetting_multi']) ? 'S'.$setid : $setid;  
  186.     if(!empty($_G['showsetting_multirow'])) {  
  187.         if(empty($_G['showsetting_multirow_n'])) {  
  188.             echo '<tr>';  
  189.         }  
  190.         echo '<td class="vtop rowform"><p class="td27m">'.$name.'</p>'.$s.'</td>';  
  191.         $_G['showsetting_multirow_n']++;  
  192.         if($_G['showsetting_multirow_n'] == 2) {  
  193.             if(empty($_G['showsetting_multirow_n'])) {  
  194.                 echo '</tr>';  
  195.             }  
  196.             $_G['showsetting_multirow_n'] = 0;  
  197.         }  
  198.         return;  
  199.     }  
  200.     if(!isset($_G['showsetting_multi'])) {  
  201.         if(!$nofaq) {  
  202.             $faqurl = 'http://faq.comsenz.com?type=admin&ver='.$_G['setting']['version'].'&action='.rawurlencode($_GET['action']).'&operation='.rawurlencode($_GET['operation']).'&key='.rawurlencode($setname);  
  203.             showtablerow($noborder.'onmouseover="setfaq(this, \'faq'.$setid.'\')"', 'colspan="2" class="td27" s="1"', $name.'<a id="faq'.$setid.'" class="faq" title="'.cplang('setting_faq_title').'" href="'.$faqurl.'" target="_blank" style="display:none">   </a>');  
  204.         } else {  
  205.             showtablerow('', 'colspan="2" class="td27" s="1"', $name);  
  206.         }  
  207.     } else {  
  208.         if(empty($_G['showsetting_multijs'])) {  
  209.             $_G['setting_JS'] .= 'var ss = new Array();';  
  210.             $_G['showsetting_multijs'] = 1;  
  211.         }  
  212.         if($_G['showsetting_multi'] == 0) {  
  213.             showtablerow('', array('class="td27"'), array('<div id="D'.$setid.'"></div>'));  
  214.             $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] = new Array();';  
  215.         }  
  216.         $name = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($name, "'\"));  
  217.         $_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] += \'<div class="multicol">'.$name.'</div>\';';  
  218.     }  
  219.     if(!$nocomment && ($type != 'omcheckbox' || $varname[2] != 'isfloat')) {  
  220.         if(!isset($_G['showsetting_multi'])) {  
  221.             showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('class="vtop rowform"', 'class="vtop tips2" s="1"'), array(  
  222.                 $s,  
  223.                 ($comment ? $comment : cplang($setname.'_comment', false)).($type == 'textarea' ? '<br />'.cplang('tips_textarea') : '').  
  224.                 ($disabled ? '<br /><span class="smalltxt" style="color:#F00">'.cplang($setname.'_disabled', false).'</span>' : NULL)  
  225.             ));  
  226.         } else {  
  227.             if($_G['showsetting_multi'] == 0) {  
  228.                 showtablerow('class="noborder"', array('class="vtop rowform" style="width:auto"'), array(  
  229.                     '<div id="'.$setid.'"></div>'  
  230.                 ));  
  231.                 $_G['setting_JS'] .= 'ss[\''.$setid.'\'] = new Array();';  
  232.             }  
  233.             $s = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($s, "'\"));  
  234.             $_G['setting_JS'] .= 'ss[\''.$setid.'\'] += \'<div class="multicol">'.$s.'</div>\';';  
  235.         }  
  236.     } else {  
  237.         showtablerow('class="noborder" onmouseover="setfaq(this, \'faq'.$setid.'\')"', array('colspan="2" class="vtop rowform"'), array($s));  
  238.     }  
  239.   
  240.   
  241.     if($hidden) {  
  242.         showtagheader('tbody', 'hidden_'.$setname, $value, 'sub');  
  243.     }  
  244.   
  245.   
  246. }  
复制代码

参数说明:
$setname - 指定输出标题,如:setting_basic_bbname, 自动匹配描述文字为:setting_basic_bbname_comment,comment形式文字可以在./source/language/lang_admincp.php语言包中添加
$varname - 指定表单的name值,如settingnew[bbname]
$value - 指定表单默认值\变量
$type - 表单样式
radio单选
text文本、password密码、number数字
file上传文件
filetext 上传文件或在线文件切换型表单
textarea 多行文本
select 选择框
mradio 高级单选模式
mcheckbox 高级多选模式
binmcheckbox 二进制数值多选模式
mselect 高级选择框模式
color 颜色选择
calendar 日期选择
multiply多表单型,daterange时间范围
其他未在上述样式中出现的$type均独立输出
$disabled - 是否不可修改
$hidden - 是否隐藏
$comment - 强制描述文字
$extra - 表单扩展属性
$setid - 用于拼接表单外层Div的id
使用方法举例:
  1. //以文本形式输出表单(站点名称 text):  
  2. showsetting('setting_basic_bbname', 'settingnew[bbname]', $setting['bbname'], 'text');  
  3. //以单选形式输出表单(显示授权信息链接 radio):  
  4. showsetting('setting_basic_boardlicensed', 'settingnew[boardlicensed]', $setting['boardlicensed'], 'radio');  
  5. //以多行文本形式输出表单(网站第三方统计代码 textarea):  
  6. showsetting('setting_basic_stat', 'settingnew[statcode]', $setting['statcode'], 'textarea');  
  7. //以高级单选形式输出表单(新用户注册验证 mradio)  
  8. showsetting('setting_access_register_verify', array('settingnew[regverify]', array(  
  9.     array(0, $lang['none'], array('regverifyext' => 'none')),  
  10.     array(1, $lang['setting_access_register_verify_email'], array('regverifyext' => '')),  
  11.     array(2, $lang['setting_access_register_verify_manual'], array('regverifyext' => ''))  
  12. )), $setting['regverify'], 'mradio');  
  13. //以高级多选形式输出表单('允许新用户注册 mcheckbox)  
  14. showsetting('setting_access_register_status', array('settingnew[regstatus]', array(  
  15.     array('open', $lang['setting_access_register_open']),  
  16.     array('invite', $lang['setting_access_register_invite'], 'showinvite'),  
  17.     $_G['setting']['connect']['allow'] ? array('connect', $lang['setting_access_register_connect'], 'showconnect') : array(),  
  18. )), $regstatus, 'mcheckbox');  
复制代码


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-5-13 05:12 , Processed in 0.047055 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表