小丁的屋舍
DiscuzX! | 二次开发可能用到的东西
2024-02-20
查看标签
0次浏览

我们上一次在很久以前发过一篇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)

太多了!自己点进去去看~

留下足迹请遵守法律规则哦~
April 22nd, 2024 at 05:25 pmMike Saunder
April 22nd, 2024 at 05:25 pm

Good Day

I have just took a look on your SEO for xding.top for its SEO Trend and saw that your website could use a boost.

We will increase your ranks organically and safely, using only state of the art AI and whitehat methods, while providing monthly reports and outstanding support.

More info:
https://www.digital-x-press.com/unbeatable-seo/

Regards
Mike Saunder

Digital X SEO Experts

访客
April 18th, 2024 at 04:17 pmMike Hailey
April 18th, 2024 at 04:17 pm

Hi there

Just checked your xding.top baclink profile, I noticed a moderate percentage of toxic links pointing to your website

We will investigate each link for its toxicity and perform a professional clean up for you free of charge.

Start recovering your ranks today:
https://www.hilkom-digital.de/professional-linksprofile-clean-up-service/

Regards
Mike Hailey
Hilkom Digital SEO Experts
https://www.hilkom-digital.de/

访客
April 14th, 2024 at 05:48 pmMike Enderson
April 14th, 2024 at 05:48 pm

This service is perfect for boosting your local business' visibility on the map in a specific location.

We provide Google Maps listing management, optimization, and promotion services that cover everything needed to rank in the Google 3-Pack.

More info:
https://www.speed-seo.net/ranking-in-the-maps-means-sales/

Thanks and Regards
Mike Enderson

PS: Want a ONE-TIME comprehensive local plan that covers everything?
https://www.speed-seo.net/product/local-seo-bundle/

访客
April 12th, 2024 at 08:24 pmklcdm
April 12th, 2024 at 08:24 pm

dz论坛啊,虽然说做的确实不错的,但是没什么运营的动力了因为国内论坛都饱和了我感觉,我的论坛也倒了。维护成本很大,白浪费流量了

访客
March 29th, 2024 at 08:34 pmccbbp
March 29th, 2024 at 08:34 pm

现在做论坛没有以前热了

访客