DiscuzX! | 二次开发可能用到的东西
我们上一次在很久以前发过一篇Discuz X3.4 一些常用的接口/入口,最近在做称号系统插件又捣鼓了一些,今后的二次开发中可能会用到的东西。
Discuz!发送系统通知方法notification_add()解析
文章来源: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()
原文: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()介绍_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
原文:黄聪: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 数据库常用方法
原文:Discuz 常用方法 - 简书 (jianshu.com)
太多了!自己点进去去看~
Discuz! X3.4 数据字典
原文:Discuz! X3.4 数据字典,dz数据字典,Discuz! 数据库字典 - Discuz! 教程 - Discuz! 资料库 (dismall.com)
太多了!自己点进去去看~
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »