我们上一次在很久以前发过一篇Discuz X3.4 一些常用的接口/入口,最近在做称号系统插件又捣鼓了一些,今后的二次开发中可能会用到的东西。
文章来源:Discuz!发送系统通知方法notification_add解析-CSDN博客
方法定义位置:source\function\function_core.php
代码如下:
function notification_add($touid, $type, $note, $notevars = array(), $system = 0) {
return helper_notification::notification_add($touid, $type, $note, $notevars, $system);
}
$touid:接收通知的uid,即发给谁;
$type:通知类型,如system为系统通知,这里$type参数稍微复制一点,下面我们把type参数的各种意义罗列出来供大家参考:
type | 含义 | type | 含义 | type | 含义 |
---|---|---|---|---|---|
appId(数字) | 漫游应用 | task | 任务 | clickpic | 图片顶操作 |
myapp | 应用邀请或请求 | wall | 留言 | doing | 记录 |
credit | 积分充值 | piccomment | 图片评论 | pmreport | 消息举报 |
goods | 商品 | blogcomment | 日志评论 | sharenotice | 分享通知 |
mod_member | 用户审核 | sharecomment | 分享评论 | group | 群组 |
system | 系统消息 | follow | 关注 | reward | 悬赏 |
group | 群组审核通过 | pusearticle | 推送 | activity | 活动 |
report | 举报 | at | @功能 | thread | 主题 |
verify | 认证 | pcomment | 点评 | blog | 日志 |
manage_ | 管理通知 | post | 回帖引用 | article | 文章 |
magic | 道具 | show | 排行榜 | clickarticle | 文章顶操作 |
poke | 打招呼 | clickblog | 日志顶操作 | friend | 好友 |
$note:通知内容,支持html代码;
$notevars:附加参数,如:actor、from_num、from_id、from_idtype
$system:是否系统通知,默认0,强制转为系统通知;
详细代码逻辑参考helper_notification类代码
helper类所在位置:\source\class\helper\helper_notification.php
public static function notification_add($touid, $type, $note, $notevars = array(), $system = 0, $category = -1) {
global $_G;
if(!($tospace = getuserbyuid($touid))) {
return false;
}
space_merge($tospace, 'field_home');
$filter = empty($tospace['privacy']['filter_note'])?array():array_keys($tospace['privacy']['filter_note']);
if($filter && (in_array($type.'|0', $filter) || in_array($type.'|'.$_G['uid'], $filter))) {
return false;
}
if($category == -1) {
$category = 0;
$categoryname = '';
if($type == 'follow' || $type == 'follower') {
switch ($type) {
case 'follow' : $category = 5; break;
case 'follower' : $category = 6; break;
}
$categoryname = $type;
} else {
foreach($_G['notice_structure'] as $key => $val) {
if(in_array($type, $val)) {
switch ($key) {
case 'mypost' : $category = 1; break;
case 'interactive' : $category = 2; break;
case 'system' : $category = 3; break;
case 'manage' : $category = 4; break;
default : $category = 0;
}
$categoryname = $key;
break;
}
}
}
} else {
switch ($category) {
case 1 : $categoryname = 'mypost'; break;
case 2 : $categoryname = 'interactive'; break;
case 3 : $categoryname = 'system'; break;
case 4 : $categoryname = 'manage'; break;
case 5 : $categoryname = 'follow'; break;
case 6 : $categoryname = 'follower'; break;
default : $categoryname = 'app';
}
}
if($category == 0) {
$categoryname = 'app';
} elseif($category == 1 || $category == 2) {
$categoryname = $type;
}
$notevars['actor'] = "<a href=\"home.php?mod=space&uid=$_G[uid]\">".$_G['member']['username']."</a>";
if(!is_numeric($type)) {
$vars = explode(':', $note);
if(count($vars) == 2) {
$notestring = lang('plugin/'.$vars[0], $vars[1], $notevars);
} else {
$notestring = lang('notification', $note, $notevars);
}
$frommyapp = false;
} else {
$frommyapp = true;
$notestring = $note;
}
$oldnote = array();
if($notevars['from_id'] && $notevars['from_idtype']) {
$oldnote = C::t('home_notification')->fetch_by_fromid_uid($notevars['from_id'], $notevars['from_idtype'], $touid);
}
if(empty($oldnote['from_num'])) $oldnote['from_num'] = 0;
$notevars['from_num'] = $notevars['from_num'] ? $notevars['from_num'] : 1;
$setarr = array(
'uid' => $touid,
'type' => $type,
'new' => 1,
'authorid' => $_G['uid'],
'author' => $_G['username'],
'note' => $notestring,
'dateline' => $_G['timestamp'],
'from_id' => $notevars['from_id'],
'from_idtype' => $notevars['from_idtype'],
'from_num' => ($oldnote['from_num']+$notevars['from_num']),
'category' => $category
);
if($system) {
$setarr['authorid'] = 0;
$setarr['author'] = '';
}
$pkId = 0;
if($oldnote['id']) {
C::t('home_notification')->update($oldnote['id'], $setarr);
$pkId = $oldnote['id'];
} else {
$oldnote['new'] = 0;
$pkId = C::t('home_notification')->insert($setarr, true);
}
$banType = array('task');
if($_G['setting']['cloud_status'] && !in_array($type, $banType)) {
$noticeService = Cloud::loadClass('Service_Client_Notification');
if($oldnote['id']) {
$noticeService->update($touid, $pkId, $setarr['from_num'], $setarr['dateline'], $note);
} else {
$extra = $type == 'post' ? array('pId' => $notevars['pid']) : array();
$extra['notekey'] = $note;
$noticeService->add($touid, $pkId, $type, $setarr['authorid'], $setarr['author'], $setarr['from_id'], $setarr['from_idtype'], $setarr['note'], $setarr['from_num'], $setarr['dateline'], $extra);
}
}
if(empty($oldnote['new'])) {
C::t('common_member')->increase($touid, array('newprompt' => 1));
$newprompt = C::t('common_member_newprompt')->fetch($touid);
if($newprompt) {
$newprompt['data'] = unserialize($newprompt['data']);
if(!empty($newprompt['data'][$categoryname])) {
$newprompt['data'][$categoryname] = intval($newprompt['data'][$categoryname]) + 1;
} else {
$newprompt['data'][$categoryname] = 1;
}
C::t('common_member_newprompt')->update($touid, array('data' => serialize($newprompt['data'])));
} else {
C::t('common_member_newprompt')->insert($touid, array($categoryname => 1));
}
require_once libfile('function/mail');
$mail_subject = lang('notification', 'mail_to_user');
sendmail_touser($touid, $mail_subject, $notestring, $frommyapp ? 'myapp' : $type);
}
if(!$system && $_G['uid'] && $touid != $_G['uid']) {
C::t('home_friend')->update_num_by_uid_fuid(1, $_G['uid'], $touid);
}
}
原文:Discuz!开发之网站后台表单生成函数showsetting()详情-CSDN博客
Discuz!为了界面统一,专门封装了一个表单生成函数showsetting(),使用改函数几乎可以生成任意web表单,本文就来介绍一下这个函数的用法:
定义文件:\source\function\function_admincp.php
function showsetting($setname, $varname, $value, $type = 'radio', $disabled = '', $hidden = 0, $comment = '', $extra = '', $setid = '', $nofaq = false) {
global $_G;
$s = "\n";
$check = array();
$noborder = false;
if(substr($disabled, 0, 8) == 'noborder') {
$disabled = trim(substr($disabled, 8));
$noborder = 'class="noborder" ';
}
$check['disabled'] = $disabled ? ($disabled == 'readonly' ? ' readonly' : ' disabled') : '';
$check['disabledaltstyle'] = $disabled ? ', 1' : '';
$nocomment = false;
if(isset($_G['showsetting_multi'])) {
$hidden = 0;
if(is_array($varname)) {
$varnameid = '_'.str_replace(array('[', ']'), '_', $varname[0]).'|'.$_G['showsetting_multi'];
$varname[0] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[0]);
} else {
$varnameid = '_'.str_replace(array('[', ']'), '_', $varname).'|'.$_G['showsetting_multi'];
$varname = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname);
}
} else {
$varnameid = '';
}
if($type == 'radio') {
$value ? $check['true'] = "checked" : $check['false'] = "checked";
$value ? $check['false'] = '' : $check['true'] = '';
$check['hidden1'] = $hidden ? ' οnclick="$(\'hidden_'.$setname.'\').style.display = \'\';"' : '';
$check['hidden0'] = $hidden ? ' οnclick="$(\'hidden_'.$setname.'\').style.display = \'none\';"' : '';
$onclick = $disabled && $disabled == 'readonly' ? ' οnclick="return false"' : ($extra ? $extra : '');
$s .= '<ul οnmοuseοver="altStyle(this'.$check['disabledaltstyle'].');">'.
'<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>'.
'<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>'.
'</ul>';
} elseif($type == 'text' || $type == 'password' || $type == 'number') {
$s .= '<input name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="'.$type.'" class="txt" '.$check['disabled'].' '.$extra.' />';
} elseif($type == 'htmltext') {
$id .= 'html'.random(2);
$s .= '<div id="'.$id.'">'.$value.'</div><input id="'.$id.'_v" name="'.$varname.'" value="'.dhtmlspecialchars($value).'" type="hidden" /><script type="text/javascript">sethtml(\''.$id.'\')</script>';
} elseif($type == 'file') {
$s .= '<input name="'.$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />';
} elseif($type == 'filetext') {
$defaulttype = $value ? 1 : 0;
$id = 'file'.random(2);
$s .= '<input id="'.$id.'_0" style="display:'.($defaulttype ? 'none' : '').'" name="'.($defaulttype ? 'TMP' : '').$varname.'" value="" type="file" class="txt uploadbtn marginbot" '.$check['disabled'].' '.$extra.' />'.
'<input id="'.$id.'_1" style="display:'.(!$defaulttype ? 'none' : '').'" name="'.(!$defaulttype ? 'TMP' : '').$varname.'" value="'.dhtmlspecialchars($value).'" type="text" class="txt marginbot" '.$extra.' /><br />'.
'<a id="'.$id.'_0a" style="'.(!$defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" οnclick="$(\''.$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> '.
'<a id="'.$id.'_1a" style="'.($defaulttype ? 'font-weight:bold' : '').'" href="javascript:;" οnclick="$(\''.$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>';
} elseif($type == 'textarea') {
$readonly = $disabled ? 'readonly' : '';
$s .= "<textarea $readonly rows=\"6\" ".(!isset($_G['showsetting_multi']) ? "οndblclick=\"textareasize(this, 1)\"" : '')." οnkeyup=\"textareasize(this, 0)\" οnkeydοwn=\"textareakey(this, event)\" name=\"$varname\" id=\"$varname\" cols=\"50\" class=\"tarea\" $extra>".dhtmlspecialchars($value)."</textarea>";
} elseif($type == 'select') {
$s .= '<select name="'.$varname[0].'" '.$extra.'>';
foreach($varname[1] as $option) {
if(!array_key_exists(0, $option)) {
$option = array_values($option);
}
$selected = $option[0] == $value ? 'selected="selected"' : '';
if(empty($option[2])) {
$s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
} else {
$s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
}
}
$s .= '</select>';
} elseif($type == 'mradio' || $type == 'mradio2') {
$nocomment = $type == 'mradio2' && !isset($_G['showsetting_multi']) ? true : false;
$addstyle = $nocomment ? ' style="float: left; width: 18%"' : '';
$ulstyle = $nocomment ? ' style="width: 790px"' : '';
if(is_array($varname)) {
$radiocheck = array($value => ' checked');
$s .= '<ul'.(empty($varname[2]) ? ' class="nofloat"' : '').' οnmοuseοver="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
foreach($varname[1] as $varary) {
if(is_array($varary) && !empty($varary)) {
if(!array_key_exists(0, $varary)) {
$varary = array_values($varary);
}
$onclick = '';
if(!isset($_G['showsetting_multi']) && !empty($varary[2])) {
foreach($varary[2] as $ctrlid => $display) {
$onclick .= '$(\''.$ctrlid.'\').style.display = \''.$display.'\';';
}
}
$onclick && $onclick = ' οnclick="'.$onclick.'"';
$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>';
}
}
$s .= '</ul>';
}
} elseif($type == 'mcheckbox' || $type == 'mcheckbox2') {
$nocomment = $type != 'mcheckbox2' && count($varname[1]) > 3 && !isset($_G['showsetting_multi']) ? true : false;
$addstyle = $nocomment ? ' style="float: left;'.(empty($_G['showsetting_multirow']) ? ' width: 18%;overflow: hidden;' : '').'"' : '';
$ulstyle = $nocomment && empty($_G['showsetting_multirow']) ? ' style="width: 790px"' : '';
$s .= '<ul class="nofloat" οnmοuseοver="altStyle(this'.$check['disabledaltstyle'].');"'.$ulstyle.'>';
foreach($varname[1] as $varary) {
if(is_array($varary) && !empty($varary)) {
if(!array_key_exists(0, $varary)) {
$varary = array_values($varary);
}
$onclick = !isset($_G['showsetting_multi']) && !empty($varary[2]) ? ' οnclick="$(\''.$varary[2].'\').style.display = $(\''.$varary[2].'\').style.display == \'none\' ? \'\' : \'none\';"' : '';
$checked = is_array($value) && in_array($varary[0], $value) ? ' checked' : '';
$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>';
}
}
$s .= '</ul>';
} elseif($type == 'binmcheckbox') {
$checkboxs = count($varname[1]);
$value = sprintf('%0'.$checkboxs.'b', $value);$i = 1;
$s .= '<ul class="nofloat" οnmοuseοver="altStyle(this'.$check['disabledaltstyle'].');">';
foreach($varname[1] as $key => $var) {
if($var !== false) {
$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>';
}
$i++;
}
$s .= '</ul>';
} elseif($type == 'omcheckbox') {
$nocomment = count($varname[1]) > 3 ? true : false;
$addstyle = $nocomment ? 'style="float: left; width: 18%"' : '';
$ulstyle = $nocomment ? 'style="width: 790px"' : '';
$s .= '<ul οnmοuseοver="altStyle(this'.$check['disabledaltstyle'].');"'.(empty($varname[2]) ? ' class="nofloat"' : 'class="ckbox"').' '.$ulstyle.'>';
foreach($varname[1] as $varary) {
if(is_array($varary) && !empty($varary)) {
$checked = is_array($value) && $value[$varary[0]] ? ' checked' : '';
$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>';
}
}
$s .= '</ul>';
} elseif($type == 'mselect') {
$s .= '<select name="'.$varname[0].'" multiple="multiple" size="10" '.$extra.'>';
foreach($varname[1] as $option) {
if(!array_key_exists(0, $option)) {
$option = array_values($option);
}
$selected = is_array($value) && in_array($option[0], $value) ? 'selected="selected"' : '';
if(empty($option[2])) {
$s .= "<option value=\"$option[0]\" $selected>".$option[1]."</option>\n";
} else {
$s .= "<optgroup label=\"".$option[1]."\"></optgroup>\n";
}
}
$s .= '</select>';
} elseif($type == 'color') {
global $stylestuff;
$preview_varname = str_replace('[', '_', str_replace(']', '', $varname));
$code = explode(' ', $value);
$css = '';
for($i = 0; $i <= 1; $i++) {
if($code[$i] != '') {
if($code[$i]{0} == '#') {
$css .= strtoupper($code[$i]).' ';
} elseif(preg_match('/^http:\/\//i', $code[$i])) {
$css .= 'url(\''.$code[$i].'\') ';
} else {
$css .= 'url(\''.$stylestuff['imgdir']['subst'].'/'.$code[$i].'\') ';
}
}
}
$background = trim($css);
$colorid = ++$GLOBALS['coloridcount'];
$s .= "<input id=\"c{$colorid}_v\" type=\"text\" class=\"txt\" style=\"float:left; width:210px;\" value=\"$value\" name=\"$varname\" οnchange=\"updatecolorpreview('c{$colorid}')\">\n".
"<input id=\"c$colorid\" οnclick=\"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";
} elseif($type == 'calendar') {
$s .= "<input type=\"text\" class=\"txt\" name=\"$varname\" value=\"".dhtmlspecialchars($value)."\" οnclick=\"showcalendar(event, this".($extra ? ', 1' : '').")\">\n";
} elseif(in_array($type, array('multiply', 'range', 'daterange'))) {
$onclick = $type == 'daterange' ? ' οnclick="showcalendar(event, this)"' : '';
if(isset($_G['showsetting_multi'])) {
$varname[1] = preg_replace('/\w+new/', 'multinew['.$_G['showsetting_multi'].'][\\0]', $varname[1]);
}
$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>";
} else {
$s .= $type;
}
$name = cplang($setname);
$name .= $name && substr($name, -1) != ':' ? ':' : '';
$name = $disabled ? '<span class="lightfont">'.$name.'</span>' : $name;
$setid = !$setid ? substr(md5($setname), 0, 4) : $setid;
$setid = isset($_G['showsetting_multi']) ? 'S'.$setid : $setid;
if(!empty($_G['showsetting_multirow'])) {
if(empty($_G['showsetting_multirow_n'])) {
echo '<tr>';
}
echo '<td class="vtop rowform"><p class="td27m">'.$name.'</p>'.$s.'</td>';
$_G['showsetting_multirow_n']++;
if($_G['showsetting_multirow_n'] == 2) {
if(empty($_G['showsetting_multirow_n'])) {
echo '</tr>';
}
$_G['showsetting_multirow_n'] = 0;
}
return;
}
if(!isset($_G['showsetting_multi'])) {
if(!$nofaq) {
$faqurl = 'http://faq.comsenz.com?type=admin&ver='.$_G['setting']['version'].'&action='.rawurlencode($_GET['action']).'&operation='.rawurlencode($_GET['operation']).'&key='.rawurlencode($setname);
showtablerow($noborder.'οnmοuseοver="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>');
} else {
showtablerow('', 'colspan="2" class="td27" s="1"', $name);
}
} else {
if(empty($_G['showsetting_multijs'])) {
$_G['setting_JS'] .= 'var ss = new Array();';
$_G['showsetting_multijs'] = 1;
}
if($_G['showsetting_multi'] == 0) {
showtablerow('', array('class="td27"'), array('<div id="D'.$setid.'"></div>'));
$_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] = new Array();';
}
$name = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($name, "'\\"));
$_G['setting_JS'] .= 'ss[\'D'.$setid.'\'] += \'<div class="multicol">'.$name.'</div>\';';
}
if(!$nocomment && ($type != 'omcheckbox' || $varname[2] != 'isfloat')) {
if(!isset($_G['showsetting_multi'])) {
showtablerow('class="noborder" οnmοuseοver="setfaq(this, \'faq'.$setid.'\')"', array('class="vtop rowform"', 'class="vtop tips2" s="1"'), array(
$s,
($comment ? $comment : cplang($setname.'_comment', false)).($type == 'textarea' ? '<br />'.cplang('tips_textarea') : '').
($disabled ? '<br /><span class="smalltxt" style="color:#F00">'.cplang($setname.'_disabled', false).'</span>' : NULL)
));
} else {
if($_G['showsetting_multi'] == 0) {
showtablerow('class="noborder"', array('class="vtop rowform" style="width:auto"'), array(
'<div id="'.$setid.'"></div>'
));
$_G['setting_JS'] .= 'ss[\''.$setid.'\'] = new Array();';
}
$s = preg_replace("/\r\n|\n|\r/", '\n', addcslashes($s, "'\\"));
$_G['setting_JS'] .= 'ss[\''.$setid.'\'] += \'<div class="multicol">'.$s.'</div>\';';
}
} else {
showtablerow('class="noborder" οnmοuseοver="setfaq(this, \'faq'.$setid.'\')"', array('colspan="2" class="vtop rowform"'), array($s));
}
if($hidden) {
showtagheader('tbody', 'hidden_'.$setname, $value, 'sub');
}
}
$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
//以文本形式输出表单(站点名称 text):showsetting('setting_basic_bbname', 'settingnew[bbname]', $setting['bbname'], 'text');//以单选形式输出表单(显示授权信息链接 radio):showsetting('setting_basic_boardlicensed', 'settingnew[boardlicensed]', $setting['boardlicensed'], 'radio');//以多行文本形式输出表单(网站第三方统计代码 textarea):showsetting('setting_basic_stat', 'settingnew[statcode]', $setting['statcode'], 'textarea');//以高级单选形式输出表单(新用户注册验证 mradio)showsetting('setting_access_register_verify', array('settingnew[regverify]', array( array(0, $lang['none'], array('regverifyext' => 'none')), array(1, $lang['setting_access_register_verify_email'], array('regverifyext' => '')), array(2, $lang['setting_access_register_verify_manual'], array('regverifyext' => '')))), $setting['regverify'], 'mradio');//以高级多选形式输出表单('允许新用户注册 mcheckbox)showsetting('setting_access_register_status', array('settingnew[regstatus]', array( array('open', $lang['setting_access_register_open']), array('invite', $lang['setting_access_register_invite'], 'showinvite'), $_G['setting']['connect']['allow'] ? array('connect', $lang['setting_access_register_connect'], 'showconnect') : array(),)), $regstatus, 'mcheckbox');
原文:Discuz!开发之网站后台消息提醒函数cpmsg()介绍_discuz cpmsg-CSDN博客
定义文件:\source\function\function_admincp.php
$message - lang_admincp_msg.php 语言包中需要输出的key
$url - 提示信息后跳转的页面,留空则返回上一页
$type - 特殊提示信息时指定页面的提示样式,可选参数:succeed、error、download、loadingform
$values - 为语言包中的变量关键词指定值,以数组形式输入
$extra - 消息文字扩展
$halt - 是否输出“Discuz! 提示”标题
function cpmsg($message, $url = '', $type = '', $values = array(), $extra = '', $halt = TRUE, $cancelurl = '') {
global $_G;
$vars = explode(':', $message);
$values['ADMINSCRIPT'] = ADMINSCRIPT;
if(count($vars) == 2) {
$message = lang('plugin/'.$vars[0], $vars[1], $values);
} else {
$message = cplang($message, $values);
}
switch($type) {
case 'download':
case 'succeed': $classname = 'infotitle2';break;
case 'error': $classname = 'infotitle3';break;
case 'loadingform': case 'loading': $classname = 'infotitle1';break;
default: $classname = 'marginbot normal';break;
}
if($url) {
$url = substr($url, 0, 5) == 'http:' ? $url : ADMINSCRIPT.'?'.$url;
}
$message = "<h4 class=\"$classname\">$message</h4>";
$url .= $url && !empty($_GET['scrolltop']) ? '&scrolltop='.intval($_GET['scrolltop']) : '';
if($type == 'form') {
$message = "<form method=\"post\" action=\"$url\"><input type=\"hidden\" name=\"formhash\" value=\"".FORMHASH."\">".
"<br />$message$extra<br />".
"<p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"confirmed\" value=\"".cplang('ok')."\"> \n".
($cancelurl ? "<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"location.href='$cancelurl'\">" :
"<script type=\"text/javascript\">".
"if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<input type=\"button\" class=\"btn\" value=\"".cplang('cancel')."\" onClick=\"history.go(-1);\">');".
"</script>").
"</p></form><br />";
} elseif($type == 'loadingform') {
$message = "<form method=\"post\" action=\"$url\" id=\"loadingform\"><input type=\"hidden\" name=\"formhash\" value=\"".FORMHASH."\"><br />$message$extra<img src=\"static/image/admincp/ajax_loader.gif\" class=\"marginbot\" /><br />".
'<p class="marginbot"><a href="###" οnclick="$(\'loadingform\').submit();" class="lightlink">'.cplang('message_redirect').'</a></p></form><br /><script type="text/JavaScript">setTimeout("$(\'loadingform\').submit();", 2000);</script>';
} else {
$message .= $extra.($type == 'loading' ? '<img src="static/image/admincp/ajax_loader.gif" class="marginbot" />' : '');
if($url) {
if($type == 'button') {
$message = "<br />$message<br /><p class=\"margintop\"><input type=\"submit\" class=\"btn\" name=\"submit\" value=\"".cplang('start')."\" οnclick=\"location.href='$url'\" />";
} else {
$message .= '<p class="marginbot"><a href="'.$url.'" class="lightlink">'.cplang($type == 'download' ? 'message_download' : 'message_redirect').'</a></p>';
$timeout = $type != 'loading' ? 3000 : 1000;
$message .= "<script type=\"text/JavaScript\">setTimeout(\"redirect('$url');\", $timeout);</script>";
}
} elseif($type != 'succeed') {
$message .= '<p class="marginbot">'.
"<script type=\"text/javascript\">".
"if(history.length > (BROWSER.ie ? 0 : 1)) document.write('<a href=\"javascript:history.go(-1);\" class=\"lightlink\">".cplang('message_return')."</a>');".
"</script>".
'</p>';
}
}
if($halt) {
echo '<h3>'.cplang('discuz_message').'</h3><div class="infobox">'.$message.'</div>';
exit();
} else {
echo '<div class="infobox">'.$message.'</div>';
}
}
原文:黄聪:Discuz!X/数据库操做方法、DB::table、C::t - 菜鸟学院 (noobyard.com)
函数 | 功能 |
---|---|
DB::table($tablename) | 获取正确带前缀的表名,转换数据库句柄, |
DB::delete($tablename, 条件,条数限制) | 删除表中的数据 |
DB::insert($tablename, 数据(数组),是否返回插入ID,是不是替换式,是否silent) | 插入数据操做 |
DB::update($tablename, 数据(数组)条件) | 更新操做 |
DB::fetch(查询后的资源) | 从结果集中取关联数组,注意若是结果中的两个或以上的列具备相同字段名,最后一列将优先。 |
DB::fetch_first($sql) | 取查询的第一条数据fetch |
DB::fetch_all($sql) | 查询并fetch |
DB::result_first($sql) | 查询结果集的第一个字段值 |
DB::query($sql) | 普通查询 |
DB::num_rows(查询后的资源) | 得到记录集总条数 |
DB::_execute(命令,参数) | 执行mysql类的命令 |
DB::limit(n,n) | 返回限制字串 |
DB::field(字段名, $pid) | 返回条件,若是为数组则返回 in 条件 |
DB::order(别名, 方法) | 排序 |
注意:因为 X1.5 里增长了SQL的安全性检测。所以,若是你的SQL语句里包含如下开头的函数 load_file,hex,substring,if,ord,char。 或者包含如下操做 intooutfile,intodumpfile,unionselect,(select')都将被拒绝执行。php
替换参数 | 功能 |
---|---|
%t | 表名, |
%s | 字串,若是是数组就序列化 |
%f | 按 %F 的样式格式化字串 |
%d | 整数 |
%i | 不作处理 |
%n | 若为空即为0,若为数组,就用',' 分割,不然加引号 |
函数 | 功能 |
---|---|
C::t($tablename')->count() | 获取表全部行数 |
C::t($tablename')->update(键值,$data) | 更新键值数据 |
C::t($tablename')->delete(键值) | 删除键值数据 |
C::t($tablename')->truncate() | 清空表 |
C::t($tablename')->insert($data, $return_insert_id,$replace) | 插入数据 |
C::t($tablename')->fetch_all($ids) | fetch 数据,能够是单一键值或者多个键值数组 |
C::t($tablename')->fetch_all_field() | fetch全部的字段名表 |
C::t($tablename')->range($start, $limit, $sort) | fetch值域范围 |
C::t($tablename')->optimize() | 优化表 |
原文:Discuz 常用方法 - 简书 (jianshu.com)
太多了!自己点进去去看~
原文:Discuz! X3.4 数据字典,dz数据字典,Discuz! 数据库字典 - Discuz! 教程 - Discuz! 资料库 (dismall.com)
太多了!自己点进去去看~
Unquestionably believe that wbich you said. Your favvorite justificxation seemed to
be on the web the easiest thing to be awaee of. I say tto you, I definitely get annoyed
while people consider worfies that they just don't know about.
You managed to hit the nail upon the top as werll as defined out
the whole thung without having side-effects , people could take a signal.
Will likely be back too get more. Thanks https://Lvivforum.pp.ua/
President of Russia support Kamala Harris
https://www.oklahoman.com/story/news/2024/09/06/did-vladimir-putin-endorse-kamala-harris-fact-check-conference-comment-russia/75106285007/
great post, very informative. I wonder why the opposite experts of his sector don't realize this.
Youu should continue your writing. I am sure, you've a
great readers' base already! https://lvivforum.Pp.ua/
I read this post completely on the topic of the comparison of latest and previous technologies, it's
amazing article. https://Www.Waste-Ndc.pro/community/profile/tressa79906983/
If my Huo family made a mistake first, I can do it priligy review youtube
Discuz居然还存在啊,我记得那时候还有一个phpwind
I simply could not depart your website before suggesting tht I extremely enjoyed the usual information a person provide in your guests?
Is gonna be back ceaselessly to check outt new posts https://lvivforum.Pp.ua/
I have been exploring for a little bit for any high quality articles or weblog
posts on this kind of house . Exploring in Yahoo I at last stumbled upon this web site.
Reading this info So i am glad to convey that I have an incredibly
just right uncanny feeling I discovered just what I needed.
I most unquestionably will make sure to do not fail to remember this site
and provides it a glance regularly.
I m getting antsy, so I turned to Google to research what late ovulation would mean for egg quality what is priligy 34 years old
Pretty great post. I simply stjmbled upon your blog annd wiehed tto say that I've really loved
surfing around your blog posts. After all I will be subscribing on your rss feed and I am hoping you write atain very soon! https://Lvivforum.pp.ua/
Hi!
Earn every MINUTE without limit of 100, 200, 500, 1000 and whiter Dollars USA, there are NO limits!
We have been trusted by millions of people around the world since 2014!
Instant withdrawal!Demo account +10 000D!Free Signals!Free training!PROMO-CODE: OLYMPOLYMPThe most convenient platform for online trading and investment 2023!
*Awarded by FxDailyInfo, a reputable international resource!
*World Business Outlook Award!
The most reliable financial broker 2023!
*From $50 +30% to deposit!
WARNING! If registration is closed for your country, you need to enable VPN and choose a country from which registration is not prohibited, for example (Singapore).
After registration you can disable VPN and start earning, it is allowed!
Sign up, and earn unlimited earnings every 60 seconds!
The promo code is valid on these links only!
WEB VERSION
https://trkmad.com/101773/
DOWNLOAD IOS APP (App Store)
https://app.appsflyer.com/id1053416106?pid=affiliate&c=101773&af_siteid=101773&af_sub2=App-Store&af_sub1=XR
DOWNLOAD ANDROID APP (Google Play)
https://app.appsflyer.com/com.ticno.olymptrade?pid=affiliate&c=101773&af_siteid=101773&af_sub2=Google-Play&af_sub1=XR
Hello ,
I hope this message finds you well. I am reaching out to you for my money investment .
I am currently facing issues with President Recep Tayyip Erdogan, President Recep has confiscated my money in Turkey. I got a tip off that President Recep Tayyip Erdogan is trying to trace my money abroad.
In light of this situation, I am seeking to transfer as an Investor €45,000,000 Million euros in my Account in Germany to your bank account and you will receive the funds in your Bank Account as an Investment Manager , you can invest money in any Lucrative business of your choice, By Transferring the money to you , I will effectively protect these money from being traced by President Recep Tayyip Erdogan.
I kindly ask for your prompt response to confirm your willingness to invest the money. Once I receive your confirmation, I will provide you with further details .
Please reply to me directly with this email. : esaffet81@gmail.com
Thank you .
Warm regards,
Mr. Saffet Erdogan
салам-пополам -зыбай
Популярный канал в t.me с БЕЗДЕПОЗИТНЫМИ БОНУСАМИ
Бездепозитные бонусы - подарки от игровых заведений и букмекерских контор, которые новенькие получают без пополнения счета.
Раз в месяц будем добавлять новые бонусы
Полезный канал: @new_bonuses
Посмотрите: http://t.me/new_bonuses
I don't even know how I ended up here, but I hought this post was good.
I do not know whho you are but certainly you're going to a fawmous blogger
if you aren't already ;) Cheers! https://Www.Waste-Ndc.pro/community/profile/tressa79906983/
dz论坛啊,虽然说做的确实不错的,但是没什么运营的动力了因为国内论坛都饱和了我感觉,我的论坛也倒了。维护成本很大,白浪费流量了
现在做论坛没有以前热了