Discuz之论坛模块通用函数集合 function_forum详解
Discuz!常用函数解析

Discuz!常用函数解析php, 函数, Discuz, param, Discuz二次开发<?php/*[Discuz!] (C)2001-2007 Comsenz Inc.This is NOT a freeware, use is subject to license terms$Id: global.func.php 13426 2008-04-15 03:37:02Z heyond $*/if(!defined('IN_DISCUZ')) {exit('Access Denied');}/*** 加密或者解密用户信息* @param $string - 加密或解密的串* @param $operation - 加密还是解密* @param 密钥* @return 返回字符串* $ckey_length 随机密钥长度取值 0-32;* 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
* 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方* 当此值为 0 时,则不产生随机密钥*/function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {$ckey_length = 4;$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);$keya = md5(substr($key, 0, 16));$keyb = md5(substr($key, 16, 16));$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() :0).substr(md5($string.$keyb), 0, 16).$string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();for($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for($a = $j = $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}if($operation == 'DECODE') {if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {return substr($result, 26);} else {return '';}} else {return $keyc.str_replace('=', '',base64_encode($result));}}/*** 清理cookie*/function clearcookies() {global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits;dsetcookie('sid', '', -86400 * 365);dsetcookie('auth', '', -86400 * 365);dsetcookie('visitedfid', '', -86400 * 365);dsetcookie('onlinedetail', '', -86400 * 365, 0);dsetcookie('loginuser', '', -86400 * 365);dsetcookie('activationauth', '', -86400 * 365);$discuz_uid = $adminid = $credits = 0;$discuz_user = $discuz_pw = $discuz_secques = '';}/*** 检查积分下限* @param $creditsarray - 积分数组* @param $coef - 积分*/function checklowerlimit($creditsarray, $coef = 1) {if(is_array($creditsarray)) {global $extcredits, $id;foreach($creditsarray as $id => $addcredits) {$addcredits = $addcredits * $coef;if($addcredits < 0 &&($GLOBALS['extcredits'.$id] < $extcredits[$id]['lowerlimit'] || (($GLOBALS['extcredits'.$id] + $addcredits) <$extcredits[$id]['lowerlimit']))) {if($coef == 1) {showmessage('credits_policy_l owerlimit');} else {showmessage('credits_policy_n um_lowerlimit');}}}}}/*** 密码检测** @param string $md5* @param string $verified* @param string $salt* @return* 0= Failed* 1= MD5 with salt, 2= Dual MD5, 3= Normal Md5 4= MD5-16*/function checkmd5($md5, $verified, $salt = '') {if(md5($md5.$salt) == $verified) {$result = !empty($salt) ? 1 : 2;} elseif(empty($salt)) {$result = $md5 == $verified ? 3 : ((strlen($verified) == 16 && substr($md5, 8, 16) == $verified) ? 4 : 0);} else {$result = 0;}return $result;}/*** 检查模板源文件是否更新* 当编译文件不存时强制重新编译* 当 tplrefresh = 1 时检查文件* 当 tplrefresh > 1 时,则根据 tplrefresh 取余,无余时则检查更新**/function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $tpldir) {global $tplrefresh;if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($GLOBALS['timestamp'] % $tplrefresh))) {if(empty($timecompare) || @filemtime($subtpl) > $timecompare) {require_onceDISCUZ_ROOT.'./include/template.func.php';parse_template($maintpl, $templateid, $tpldir); return TRUE;}}return FALSE;}/*** 根据中文裁减字符串* @param $string - 字符串* @param $length - 长度* @param $doc - 缩略后缀* @return 返回带省略号被裁减好的字符串*/function cutstr($string, $length, $dot = ' ...') {global $charset;if(strlen($string) <= $length) {return $string;}$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);$strcut = '';if(strtolower($charset) == 'utf-8') {$n = $tn = $noc = 0;while($n < strlen($string)) {$t = ord($string[$n]);if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)){$tn = 1; $n++; $noc++;} elseif(194 <= $t && $t <= 223) {$tn = 2; $n += 2; $noc += 2;} elseif(224 <= $t && $t < 239) {$tn = 3; $n += 3; $noc += 2;} elseif(240 <= $t && $t <= 247) {$tn = 4; $n += 4; $noc += 2;} elseif(248 <= $t && $t <= 251) {$tn = 5; $n += 5; $noc += 2;} elseif($t == 252 || $t == 253) {$tn = 6; $n += 6; $noc += 2;} else {$n++;}if($noc >= $length) {break;}}if($noc > $length) {$n -= $tn;}$strcut = substr($string, 0, $n);} else {for($i = 0; $i < $length; $i++) {$strcut .= ord($string[$i]) > 127 ?$string[$i].$string[++$i] : $string[$i];}}$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);return $strcut.$dot;}/*** 处理转义字符* @param $string -字符串* @param $force - 是否强制* @return 返回整理好的字符串*/function daddslashes($string, $force = 0) {!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());if(!MAGIC_QUOTES_GPC || $force) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = daddslashes($val, $force);}} else {$string = addslashes($string);}}return $string;}/*** 检测日期的有效性*/function datecheck($ymd, $sep='-') {if(!empty($ymd)) {list($year, $month, $day) = explode($sep, $ymd);return checkdate($month, $day, $year);} else {return FALSE;}}/*** 调试信息*/function debuginfo() {if($GLOBALS['debug']) {global $db, $discuz_starttime, $debuginfo;$mtime = explode(' ', microtime());$debuginfo = array('time' => number_format(($mtime[1] + $mtime[0] - $discuz_starttime), 6), 'queries' => $db->querynum);return TRUE;} else {return FALSE;}}/*** 退出系统*/function dexit($message = '') {echo $message;output();exit();}function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {$return = '';$matches = parse_url($url);$host = $matches['host'];$path = $matches['path'] ?$matches['path'].'?'.$matches['query'].'#'.$matches['fragment'] : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80;if($post) {$out = "POST $path HTTP/1.0\r\n";$out .= "Accept: */*\r\n";//$out .= "Referer: $boardurl\r\n";$out .= "Accept-Language: zh-cn\r\n";$out .= "Content-Type:application/x-www-form-urlencoded\r\n";$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n";$out .= 'Content-Length: '.strlen($post)."\r\n";$out .= "Connection: Close\r\n";$out .= "Cache-Control: no-cache\r\n";$out .= "Cookie: $cookie\r\n\r\n";$out .= $post;} else {$out = "GET $path HTTP/1.0\r\n";$out .= "Accept: */*\r\n";//$out .= "Referer: $boardurl\r\n";$out .= "Accept-Language: zh-cn\r\n";$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n";$out .= "Connection: Close\r\n";$out .= "Cookie: $cookie\r\n\r\n";}$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);if(!$fp) {return '';//note $errstr : $errno \r\n} else {stream_set_blocking($fp, $block);stream_set_timeout($fp, $timeout);@fwrite($fp, $out);$status = stream_get_meta_data($fp);if(!$status['timed_out']) {while (!feof($fp)) {if(($header = @fgets($fp)) && ($header== "\r\n" || $header == "\n")) {break;}}$stop = false;while(!feof($fp) && !$stop) {$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));$return .= $data;if($limit) {$limit -= strlen($data);$stop = $limit <= 0;}}}@fclose($fp);return $return;}}/*** HTML转义字符* @param $string - 字符串* @return 返回转义好的字符串*/function dhtmlspecialchars($string) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = dhtmlspecialchars($val);}} else {$string =preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});) /', '&\\1',str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));}return $string;}function dheader($string, $replace = true, $http_response_code = 0) { $string = str_replace(array("\r", "\n"), array('', ''), $string); if(empty($http_response_code) || PHP_VERSION < '4.3' ) {@header($string, $replace);} else {@header($string, $replace, $http_response_code);}if(preg_match('/^\s*location:/is', $string)) {exit();}}/*** 上传文件的函数* @param $file - 要上传的文件* @return 返回带省略号被裁减好的字符串*/function disuploadedfile($file) {return function_exists('is_uploaded_file') &&(is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));}/*** 刷新重定向*/function dreferer($default = '') {global $referer, $indexname;$default = empty($default) ? $indexname : '';if(empty($referer) &&isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {$referer =preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);$referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;} else {$referer = dhtmlspecialchars($referer);}if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {$referer = $default;}return $referer;}/*** 设置cookie* @param $var - 变量名* @param $value - 变量值* @param $life - 生命期* @param $prefix - 前缀*/function dsetcookie($var, $value, $life = 0, $prefix = 1) {global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;setcookie(($prefix ? $cookiepre : '').$var, $value,$life ? $timestamp + $life : 0, $cookiepath,$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0); }function dunlink($filename, $havethumb = 0, $remote = 0) {global $authkey, $ftp, $attachdir;if($remote) {require_once DISCUZ_ROOT.'./include/ftp.func.php';if(!$ftp['connid']) {if(!($ftp['connid'] =dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'],$ftp['ssl']))) {return;}}dftp_delete($ftp['connid'], $filename);$havethumb && dftp_delete($ftp['connid'],$filename.'.thumb.jpg');} else {@unlink($attachdir.'/'.$filename);$havethumb &&@unlink($attachdir.'/'.$filename.'.thumb.jpg');}}/*** 格式化email* @param $email - 邮箱地址* @param $tolink - 是否增加链接* @return 返回代码*/function emailconv($email, $tolink = 1) {$email = str_replace(array('@', '.'), array('@', '.'), $email); return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;}/*** 系统错误日志* @param $type - 信息类型* @param $message - 信息* @param $halt - 是否退出*/function errorlog($type, $message, $halt = 1) {global $timestamp, $discuz_userss, $onlineip, $_SERVER;$user = empty($discuz_userss) ? '' : $discuz_userss.'<br />'; $user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];writelog('errorlog',dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));if($halt) {exit();}}/*** 去掉文件扩展名* @param $finename - 文件名称* @return 文件名*/function fileext($filename) {return trim(substr(strrchr($filename, '.'), 1, 10));}/*** 产生form防伪码*/function formhash($specialadd = '') {global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;$hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';return substr(md5(substr($timestamp, 0,-7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key.$hashadd.$sp ecialadd), 8, 8);}/*** 论坛权限* @param $permstr - 权限信息* @return 0 无权限 > 0 有权限*/function forumperm($permstr) {global $groupid, $extgroupids;$groupidarray = array($groupid);foreach(explode("\t", $extgroupids) as $extgroupid) {if($extgroupid = intval(trim($extgroupid))) {$groupidarray[] = $extgroupid;}}return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);}/**权限表达式* @param $formula - 权限表达式* @param $type - 0 论坛权限验证 1 勋章权限验证 2 返回勋章权限字串*/function formulaperm($formula, $type = 0) {global $_DSESSION, $extcredits, $formulamessage, $usermsg, $forum, $language;if((!$formula || $_DSESSION['adminid'] == 1 ||$forum['ismoderator']) && !$type) {return;}$formula = unserialize($formula);$formula = $formula[1];if(!$formula) {return;}@eval("\$formulaperm = ($formula) ? TRUE : FALSE;");if(!$formulaperm || $type == 2) {include_once language('misc');$search = array('$_DSESSION[\'digestposts\']','$_DSESSION[\'posts\']', '$_DSESSION[\'oltime\']','$_DSESSION[\'pageviews\']');$replace = array($language['formulaperm_digestposts'], $language['formulaperm_posts'], $language['formulaperm_oltime'], $language['formulaperm_pageviews']);for($i = 1; $i <= 8; $i++) {$search[] = '$_DSESSION[\'extcredits'.$i.'\']'; $replace[] = $extcredits[$i]['title'] ? $extcredits[$i]['title'] : $language['formulaperm_extcredits'].$i;}$i = 0;$usermsg = '';foreach($search as $s) {$usermsg .= strexists($formula, $s) ? $replace[$i].' = '.(@eval('return intval('.$s.');')).' ' : '';$i++;}$search = array_merge($search, array('and', 'or', '>=', '<='));$replace = array_merge($replace,array(' '.$language['formulaperm_and'].' ',' '.$language['formulaperm_or'].' ', '≥', '≤'));$formulamessage = str_replace($search, $replace, $formula);if($type == 1) {showmessage('medal_permforum_nopermission', NULL, 'NOPERM');} elseif($type == 2) {return $formulamessage;} else {showmessage('forum_permforum_nopermission', NULL, 'NOPERM');}}return TRUE;}/*** 获取用户所在组* @param $uid - 用户组* @param $group - 用户组* @param $member - 用户组*/function getgroupid($uid, $group, &$member) {global $creditsformula, $db, $tablepre;if(!empty($creditsformula)) {$updatearray = array();eval("\$credits = round($creditsformula);");if($credits != $member['credits']) {$updatearray[] = "credits='$credits'";$member['credits'] = $credits;}if($group['type'] == 'member'&& !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower'])) {$query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND$member[credits]>=creditshigher AND $member[credits]<creditslower LIMIT 1");if($db->num_rows($query)) {$member['groupid'] =$db->result($query, 0);$updatearray[] ="groupid='$member[groupid]'";}}if($updatearray) {$db->query("UPDATE {$tablepre}members SET".implode(', ', $updatearray)." WHERE uid='$uid'");}}return $member['groupid'];}function getrobot() {if(!defined('IS_ROBOT')) {$kw_spiders ='Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla'; if(preg_match("/($kw_browsers)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', FALSE);} elseif(preg_match("/($kw_spiders)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', TRUE);} else {define('IS_ROBOT', FALSE);}}return IS_ROBOT;}/*** 根据用户的 uid 得到 avatar/home 目录** @param int $uid* @return string*/function get_home($uid) {$uid = sprintf("%05d", $uid);$dir1 = substr($uid, 0, -4);$dir2 = substr($uid, -4, 2);$dir3 = substr($uid, -2, 2);return $dir1.'/'.$dir2.'/'.$dir3;}/*** vip用户购买组权限是否到期* @param $terms 期限来源于 memberfields 表的 groupterms 字段* @return 返回过期信息*/function groupexpiry($terms) {$terms = is_array($terms) ? $terms : unserialize($terms);$groupexpiry = isset($terms['main']['time']) ?intval($terms['main']['time']) : 0;if(is_array($terms['ext'])) {foreach($terms['ext'] as $expiry) {if((!$groupexpiry && $expiry) || $expiry < $groupexpiry) {$groupexpiry = $expiry;}}}return $groupexpiry;}/*** ip允许访问* @param $ip 要检查的ip地址* @param - $accesslist 允许访问的ip地址* @param 返回结果*/function ipaccess($ip, $accesslist) {return preg_match("/^(".str_replace(array("\r\n", ' '),array('|', ''), preg_quote($accesslist, '/')).")/", $ip);}/*** 将数组元素格式化成类似 '1','2','3' 的字符串* @return STRING 字串否则为 NULL*/function implodeids($array) {if(!empty($array)) {return "'".implode("','", is_array($array) ? $array : array($array))."'";} else {return '';}}/*** ip限制访问* @param $ip 要检查的ip地址* @param - $accesslist 允许访问的ip地址* @param 返回结果*/function ipbanned($onlineip) {global $ipaccess, $timestamp, $cachelost;if($ipaccess && !ipaccess($onlineip, $ipaccess)) {return TRUE;}$cachelost .= (@includeDISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php') ? '' : ' ipbanned'; if(empty($_DCACHE['ipbanned'])) {return FALSE;} else {if($_DCACHE['ipbanned']['expiration'] < $timestamp) { @unlink(DISCUZ_ROOT.'./forumdata/cache/cache_ ipbanned.php');}returnpreg_match("/^(".$_DCACHE['ipbanned']['regexp'].")$/", $onlineip);}}/*** 检查邮箱是否有效* @param $email 要检查的邮箱* @param 返回结果*/function isemail($email) {return strlen($email) > 6 &&preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);}/*** 加载语言* @param $file - 语言文件* @param $templateid - 模板号码* @param $tpldir - 模板路径* @return 加载的语言*/function language($file, $templateid = 0, $tpldir = '') {$tpldir = $tpldir ? $tpldir : TPLDIR;$templateid = $templateid ? $templateid : TEMPLATEID;$languagepack = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.lang.php'; if(file_exists($languagepack)) {return $languagepack;} elseif($templateid != 1 && $tpldir != './templates/default') {return language($file, 1, './templates/default');} else {return FALSE;}}/*** 分页* @param $num - 总数* @param $perpage - 每页数* @param $curpage - 当前页* @param $mpurl - 跳转的路径* @param $maxpages - 允许显示的最大页数* @param $page - 最多显示多少页码* @param $autogoto - 最后一页,自动跳转* @param $simple - 是否简洁模式(简洁模式不显示上一页、下一页和页码跳转)* @return 返回分页代码*/function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = TRUE, $simple = FALSE) {global $maxpage;//debug 加入 ajaxtarget 属性$ajaxtarget = !empty($_GET['ajaxtarget']) ? "ajaxtarget=\"".dhtmlspecialchars($_GET['ajaxtarget'])."\" " : '';$multipage = '';$mpurl .= strpos($mpurl, '?') ? '&' : '?';$realpages = 1;if($num > $perpage) {$offset = 2;$realpages = @ceil($num / $perpage);$pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;if($page > $pages) {$from = 1;$to = $pages;} else {$from = $curpage - $offset;$to = $from + $page - 1;if($from < 1) {$to = $curpage + 1 - $from;$from = 1;if($to - $from < $page) {$to = $page;}} elseif($to > $pages) {$from = $pages - $page + 1;$to = $pages;}}$multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').($curpage > 1 && !$simple ? '<ahref="'.$mpurl.'page='.($curpage - 1).'"class="prev"'.$ajaxtarget.'>‹‹</a>' : '');for($i = $from; $i <= $to; $i++) {$multipage .= $i == $curpage ?'<strong>'.$i.'</strong>' :'<ahref="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';}$multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'"class="next"'.$ajaxtarget.'>››</a>' : '').($to < $pages ? '<ahref="'.$mpurl.'page='.$pages.'" class="last"'.$ajaxtarget.'>...'.$realpages.'</a>' : '').(!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" /></kbd>' : ''); $multipage = $multipage ? '<divclass="pages">'.(!$simple ? '<em> '.$num.' </em>' :'').$multipage.'</div>' : '';}$maxpage = $realpages;return $multipage;}/*** 系统输出* @return 返回内容*/function output() {if(defined('DISCUZ_OUTPUTED')) {return;}define('DISCUZ_OUTPUTED', 1);global $sid, $transsidstatus, $rewritestatus, $ftp, $advlist, $insenz, $queryfloat, $thread, $inajax;if(($advlist || !empty($insenz['hardadstatus']) || $queryfloat) && !defined('IN_ADMINCP') && !(CURSCRIPT == 'viewthread' &&$thread['digest'] == '-1') && !$inajax) {include template('adv');}if(($transsidstatus = empty($GLOBALS['_DCOOKIE']['sid']) && $transsidstatus) || $rewritestatus) {if($transsidstatus) {$searcharray = array("/\<a(\s*[^\>]+\s*)href\=([\"|\']?)([^\"\'\s]+)/ies","/(\<form.+?\>)/is");$replacearray = array("transsid('\\3','<a\\1href=\\2')","\\1\n<input type=\"hidden\"name=\"sid\" value=\"$sid\" />");} else {$searcharray = $replacearray = array();if($rewritestatus & 1) {$searcharray[] = "/\<ahref\=\"forumdisplay\.php\?fid\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";$replacearray[] = "rewrite_forum('\\1', '\\3', '\\4')";}if($rewritestatus & 2) {$searcharray[] = "/\<ahref\=\"viewthread\.php\?tid\=(\d+)(&extra\=page\%3D(\d+))?(&page\=(\d+))?\"([^\>]*)\>/e";$replacearray[] ="rewrite_thread('\\1', '\\5', '\\3', '\\6')";}if($rewritestatus & 4) {$searcharray[] = "/\<ahref\=\"space\.php\?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/e";$replacearray[] = "rewrite_space('\\2', '\\3', '\\4')";}if($rewritestatus & 8) {$searcharray[] = "/\<ahref\=\"tag\.php\?name\=([^&]+?)\"([^\>]*)\>/e";$replacearray[] = "rewrite_tag('\\1', '\\2')";}}$content = preg_replace($searcharray, $replacearray, ob_get_contents());ob_end_clean();$GLOBALS['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();echo $content;}if($ftp['connid']) {@ftp_close($ftp['connid']);}$ftp = array();//debug Module:HTML_CACHE 如果定义了缓存常量,则此处将缓冲区的内容写入文件。
DISCUZ模块参数

相册链接: {url}相册名称: {title}相册封面: {pic}用户UID: {uid}用户名: {username}创建日期: {dateline}更新日期: {updatetime}照片数: {picnum}2.日志模块日志链接: {url}日志标题: {title}日志简介: {summary}日志图片: {pic}发布时间: {dateline}作者UID: {uid}作者名: {username}用户头像: {avatar}用户头像(中): {avatar_middle} 用户头像(大): {avatar_big}评论数: {replynum}浏览数: {viewnum}表态项1: {click1}表态项2: {click2}表态项3: {click3}表态项4: {click4}表态项5: {click5}表态项6: {click6}表态项7: {click7}表态项8: {click8}3.记录模块记录链接: {url}记录内容: {title}用户UID: {uid}用户名: {username}用户头像: {avatar} 用户头像(中): {avatar_middle}用户头像(大): {avatar_big}发布时间: {dateline}回复数: {replynum}4.图片模块图片链接: {url}图片名称: {title}图片地址: {pic}图片说明: {summary}用户UID: {uid}用户名: {username}上传时间: {dateline}查看数: {viewnum}表态项1: {click1}表态项2: {click2}表态项3: {click3}表态项4: {click4}表态项5: {click5}表态项6: {click6}表态项7: {click7}表态项8: {click8}5.文章模块作者UID: {uid}作者名: {username}用户头像: {avatar}用户头像(中): {avatar_middle}用户头像(大): {avatar_big}文章链接: {url}文章标题: {title}文章封面: {pic}文章简介: {summary}发布时间: {dateline}栏目链接: {caturl}栏目名称: {catname}文章数: {articles}查看数: {viewnum}评论数: {commentnum}6.文章栏目栏目链接: {url}栏目名称: {title}文章数: {articles}7.专题模块专题链接: {url}专题名称: {title}专题封面: {pic}专题名称: {summary}创建者UID: {uid} 创建者: {username}创建时间: {dateline}查看数: {viewnum}8.友情链接站点URL: {url}站点名称: {title}站点LOGO: {pic}站点简介: {summary}发帖总数: {posts}帖子显示名: {posts_title}群组总数: {groups}群组显示名: {groups_title}会员总数: {members}会员显示名: {members_title}群组今日发帖: {groupnewposts}今日发帖显示名: {groupnewposts_title}论坛今日发帖数: {bbsnewposts}今日发帖显示名: {bbsnewposts_title}论坛昨日发帖数: {bbslastposts}昨日发帖显示名: {bbslastposts_title}当前在线会员数: {onlinemembers}当前在线会员显示名: {onlinemembers_title}历史最高在线会员数: {maxmembers}历史最高在线显示名: {maxmembers_title}动态数: {doings}动态显示名: {doings_title} 日志数: {blogs}日志显示名: {blogs_title}相册数: {albums}相册显示名: {albums_title} 图片数: {pics}图片显示名: {pics_title}分享数: {shares}分享显示名: {shares_title}10.会员模块空间链接: {url}用户名: {title}用户头像: {avatar}用户头像(中): {avatar_middle}用户头像(大): {avatar_big}注册时间: {regdate}发帖数: {posts}主题数: {threads}精华帖数: {digestposts}积分数: {credits}推荐原因: {reason}竟价单次访问单价: {unitprice}竟价总积分: {showcredit}blockclass_member_field_shownote: {shownote}威望: {extcredits1}金钱: {extcredits2}贡献: {extcredits3}出生年份: {birthyear}出生月份: {birthmonth}生日: {birthday}生肖: {zodiac}血型: {bloodtype}真实姓名: {realname}星座: {constellation}固定电话: {telephone}手机: {mobile}证件类型: {idcardtype}证件号: {idcard}邮寄地址: {address}邮编: {zipcode}出生省份: {birthprovince}出生地: {birthcity}出生县: {birthdist}出生小区: {birthcommunity}毕业学校: {graduateschool}学历: {education}公司: {company}职业: {occupation}职位: {position}年收入: {revenue}情感状态: {affectivestatus}身高: {height}QQ: {qq}个人主页: {site}自我介绍: {bio}国籍: {nationality}居住省份: {resideprovince}居住地: {residecity}居住县: {residedist}居住小区: {residecommunity}体重: {weight}支付宝: {alipay}MSN: {msn}阿里旺旺: {taobao}兴趣爱好: {interest}昵称: {field2}性别: {gender}交友目的: {lookingfor}11.静态模块详见通用循环内容12.公告模块公告链接: {url}公告标题: {title}公告内容: {summary}开始时间: {starttime}结束时间: {endtime}应用链接: {url}应用名称: {title}应用图标: {icon}应用图标(小): {icon_small}14.群组模块群组链接: {url}群组名称: {title}群组图片: {pic}群组介绍: {summary}群组图标: {icon} 创始人: {foundername}创始人UID: {founderuid}总发帖数: {posts}今日发帖数: {todayposts}总话题数: {threads}成员数:{membernum}创建时间: {dateline}群组等级: {level}群组公共积分: {commoncredits}群组活跃度: {activity}15.群组活动活动帖URL: {url}活动标题: {title}主题图片: {pic}活动介绍: {summary}活动时间: {time}报名截止时间: {expiration}发起人: {author}发起人UID: {authorid}每人花销: {cost} 活动地点: {place}活动类型: {class}性别要求: {gender}需要人数: {number}已报名人数: {applynumber}16.群组帖子帖子链接: {url}帖子标题: {title}附件图片: {pic}帖子内容: {summary}楼主: {author} 楼主UID: {authorid}楼主头像: {avatar}楼主头像(中): {avatar_middle}楼主头像(大): {avatar_big}主题帖子总数: {posts}主题今日帖子数: {todayposts}主题最后发帖时间: {lastpost}主题发布时间: {dateline}主题回复数: {replies}主题查看数: {views}主题热度: {heats} 主题推荐数: {recommends}群组名称: {groupname}群组链接: {groupurl}17.群组商品商品链接: {url}商品名称: {title}商品图片地址: {pic}商品说明: {summary}商品累计售出数: {totalitems}商品卖家: {author}商品卖家UID: {authorid}商品价格: {price}18.活动模块活动帖URL: {url}活动标题: {title}主题图片: {pic}活动介绍: {summary}活动时间: {time}报名截止时间: {expiration}发起人: {author}发起人UID: {authorid}每人花销: {cost}活动地点: {place}活动类型: {class}性别要求: {gender}需要人数: {number}已报名人数: {applynumber}19.板块模块版块链接: {url}版块名称: {title}版块介绍: {summary}版块图标: {icon}版块帖子数: {posts}版块话题数: {threads}版块今日新帖数: {todayposts}20.帖子模块帖子URL: {url} 帖子标题: {title}附件图片: {pic}帖子内容: {summary}楼主: {author}楼主UID: {authorid}楼主头像: {avatar}楼主头像(中): {avatar_middle}楼主头像(大): {avatar_big}帖子图标: {icon}版块URL: {forumurl}版块名称: {forumname}主题分类名称: {typename}主题分类图标: {typeicon}主题分类URL: {typeurl} 分类信息名称: {sortname}分类信息URL: {sorturl}总发帖数: {posts}今日发帖数: {todayposts}最后回复时间: {lastpost}发帖时间: {dateline}回复数: {replies}总浏览数: {views}热度值: {heats}推荐数: {recommends}21.商品模块商品链接: {url}商品名称: {title}商品图片地址: {pic}商品说明: {summary}商品累计售出数: {totalitems}商品卖家: {author}商品卖家UID: {authorid}商品价格: {price}。
dedecms调用dz论坛代码(织梦调用dz帖子)

3、论坛调精华主题调用代码如下:
{dede:loop table="cdb_threads" if="displayorder!=-1" sort="tid" row="10"}
<a href="/bbs/viewthread.php?tid=[field:tid /]">
[[field:lastpost function="date('m-d','@me')" /]]
</li>
{/dede:loop}
调用回复次数最多的帖子。
{dede:loop table="cdb_threads" if="fid=4 and displayorder!=-1" sort="replies" row="8"}
document.write('<param name="movie" value="{dede:global.cfg_templeturl/}/images/bcastr3.swf"><param name="quality"
value="high">');
document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
[field:message function="cn_substr('@me',46)" /]...<a href="/bbs/thread-[field:tid/]-1-1.html" target="_blank">[查看全文]</a>
[DZ X2.0教程]教你快速了解Discuz!程序文件功能,修改文件从此不用再求人以及扩展文本的创建
![[DZ X2.0教程]教你快速了解Discuz!程序文件功能,修改文件从此不用再求人以及扩展文本的创建](https://img.taocdn.com/s3/m/1cd6f12d453610661ed9f4fd.png)
相信有不少人热衷于基于修改原有系统文件所做的插件,当然了解程序文件功能是最重要的,下面我把Discuz! X2.0主要的程序文件功能说一下。
我只是整理,不是自己原创编辑的,所有权归原创作者所有哦。
Tips:Q:针对说明的文件是?A:我只基于原版文件对upload目录中基本的程序文件(php,htm,js,除了极少数无关紧要的)进行解释,其余文件(如图片文件),一般不做说明Q:某些目录下空白的index.htm是用来做什么的?A:用来防止列目录的Q:文件名颜色和标识的意义是?A:粗体表示这个文件比较重要,除非你非常了解其功能,否则修改错误会导致全站瘫痪;斜体表示这个文件已被加密,一般情况下修改没有意义;下划线表示这个文件一般99.99%的修改是用不上的,了解即可绿色的是函数库文件,蓝色的是常量调用文件,红色的是系统全局核心文件Q:文件名命名有什么特别规律吗?A:有的,一般inc的是调用文件,func是函数库文件,class是库文件,lng的是语言包文件,了解这些后缀能快速掌握文件功能。
Q:我看了你的帖子,可是我还是看不懂文件内是什么意思啊?A:这个嘛,还是要有一定基础了,一般掌握SQL,PHP和Htm你就可以去改文件做你要的功能了,这个不是我的任务了哦。
一般来说,如果随便指个地方,你能在1分钟内说出大概位置及所在的文件,那么你基本就算合格了。
不过我个人认为最重要的还是多改多读,在实践中提高自己的能力下面开始了,请看你的upload目录里面的文件,表述的格式依次为文件名,功能描述等等先从根目录开始,根目录文件一般都是入口,即执行具体功能的代码一般不在这些文件中,而是在其调用的文件中admin.php 系统站点管理入口文件api.php Discuz!合作应用入口文件(例如漫游、支付宝什么的都走这里)connect.php QQ互联入口文件cp.php 应用入口文件crossdomain.xml 数据交互文件,如果在里面定义其它站点的地址,那么这两个不同站点就可以交互数据favicon.ico图标文件,显示在浏览器的标题栏forum.php 论坛入口文件group.php 群组入口文件home.php 家园入口文件index.php 功能与portal.php基本相同member.php 用户信息入口文件misc.php 网站用户常用操作入口文件,例如像评分、收藏等功能都是走这个文件的plugin.php 插件入口文件portal.php 门户入口文件robots.txt在这个文件中加上具体的地址,可以防止被搜索蜘蛛检索到search.php 搜索功能入口程序userapp.php 用户应用入口程序API目录中的文件主要是和Discuz!进行合作的商家的应用程序,一般不要也无需修改,这里不多说明。
Discuz之论坛模块通用函数集合function_forum详解

Discuz之论坛模块通用函数集合function_forum详解** @param $uid - 用户ID* @param $size - 头像大小 small/middle/big* @param $returnsrc - 是否返回头像地址*/function discuz_uc_avatar($uid, $size = '', $returnsrc = FALSE) { ......}======1======/*** 论坛附件删除* @param $attach - 单一附件数据*/function dunlink($attach) {......}======2======/**权限表达式* @param $formula - 权限表达式*/function formulaperm($formula) {......}======3======/**勋章权限表达式* @param $formula - 勋章权限表达式* @param $type - 1 权限验证 2 勋章字串*/function medalformulaperm($formula, $type) {......======4======/*** vip用户购买组权限是否到期* @param $terms 期限来源于 memberfields 表的 groupterms 字段* @return 返回过期信息*/function groupexpiry($terms) {......}======5======/*** 返回当前链接的域名* @return 返回域名*///清理到程序中function site() {return $_SERVER['HTTP_HOST'];}======6======/*** 显示主题分类* @param $curtypeid - 当前被选择的类型id* @return 返回的HTML数据*///使用较少function typeselect($curtypeid = 0) { ......}============/*** 更新管理者状态* @param $modacton - 动作* @param $smcols - 执行次数*/function updatemodworks($modaction, $posts = 1) { ......}======8======/*** 格式化一个sql语句,通常用于update操作** @param string $fieldname 字段名称* @param int $position 位置* @param int $value 数值 0|1* @return string*/function buildbitsql($fieldname, $position, $value) {......}======9======/*** 依据 tid 或者 fid ,自动取得 $_G['forum'] 或 $_G['thread'] 数据* @global*/function loadforum() {......}======10======** @param $tid 主题id* @param $fields 取用主题表的字段,默认 "*"* @param $addcondiction 除 tid='$tid' 以外的其他条件, 默认空 * @param $forcetableid 是否强制只从某个分表中取得 thread, 默认null* @return array 当有合法数值返回的时候, 将自动追加2个key 值threadtable, posttable 记录此主题使用的分表名称*/function get_thread_by_tid($tid, $fields = '*', $addcondiction = '', $forcetableid = null) {......}======11======/*** 依据 pid 和其他条件,从某个post数据表中取回post信息* @global $_G* @param $pid 帖子id* @param $fields 帖子表字段,默认 ** @param $addcondiction 其他条件,默认空* @param $forcetable 是否强制使用某个分表, 支持: 使用id: 0 1 2 或者 p(主表), a(副表) 或者直接制定表名 forum_post_1* @return array*/function get_post_by_pid($pid, $fields = '*', $addcondiction = '', $forcetable = null) {......}======12======/**是否有查看版块 RSS 的权限*/function rssforumperm($forum) {......}======13======/*** upload_icon_banner上传群组/版块图片* $forum中 fid和status 必须存在,status判断是群组还是版块图片,以存入不同目录* $file上传时的$_FILES* $type icon 或 banner*/function upload_icon_banner(&$data, $file, $type) {......}======14======/**用于 archiver 环境下的分页*/function arch_multi($total, $perpage, $page, $link) {......}======15======/**archiver 模板路径*/function loadarchiver($path) {......======16======/*** update_threadpartake 按参与人次更新主题热度function update_threadpartake($tid) {......}======17======/*** 获取帖子封面地址** @param int $tid* @param int $cover 负数时表示是远程,正数为本地没有值表示只取filename*/function getthreadcover($tid, $cover = 0, $getfilename = 0) { ......}======18======/***添加主题标签** @param $tags* @param $itemidfunction addthreadtag($tags, $itemid , $typeid = 'tid') { ......}======19======/***修改主题标签** @param $tags* @param $itemid* @returnfunction modthreadtag($tags, $itemid) { ......}======20======/*** 将未使用的附件转为已使用状态* @param $aid* @param $tid* @param $pid*/function convertunusedattach($aid, $tid, $pid) { ......}======21======/*** 更新附件的 TID 值* @param $where 条件* @param $oldtid 旧 TID* @param $newtid 新 TID*/function updateattachtid($where, $oldtid, $newtid) { ...... }======22======/**插入一个帖子*/function insertpost($data) {......}======23======/*** 更新POST* @global $_G* @param array $data 更新的数据* @param string/array $condition 条件* @param bool $unbuffered 是否即时返回* @param int $posttableid post分表ID* @return int 返回的更新的记录数*/function updatepost($data, $condition, $unbuffered = false, $posttableid = false) {......}。
DISCUZX自定义函数库说明

|--/source/function DX自定义函数库|--/function_admincp.php后台各项处理函数|--/function_attachment.php附件类处理函数|--/function_block.php DIY模块调用处理函数|--/function_blog.php日志函数|--/function_cache.php缓存函数|--/function_cloudaddons.php应用中心在线安装模板插件处理|--/function_collection.php淘贴处理函数|--/function_comment.php评论留言处理函数|--/function_core.php全局核心函数库|--/function_credit.php积分处理|--/function_delete.php清理类函数|--/function_discuzcode.php论坛UBB代码转换处理1|--/function_domain.php域名处理函数|--/function_ec_credit.php|--/function_editor.php编辑器处理函数|--/function_exif.php上传附件EXIF信息处理库|--/function_feed.php家园动态处理函数|--/function_filesock.php PHP内置函数fsockopen模拟GET/POST|--/function_followcode.php论坛UBB代码转换处理2|--/function_forum.php论坛全局功能处理函数|--/function_forumlist.php论坛相关功能处理函数|--/function_friend.php好友处理函数|--/function_group.php群组全局函数|--/function_grouplog.php群组积分日志记录处理|--/function_home.php空间处理函数(截取字符、个人空间DIY、上传等)|--/function_importdata.php其他函数(表情、风格数据、DIY更新等)|--/function_magic.php道具处理函数|--/function_mail.php邮件发送函数|--/function_manyou.php漫游平台处理函数|--/function_member.php用户数据处理函数|--/function_message.php全局showmessage函数处理项目|--/function_misc.php其他函数(IP地理数据处理、主题高亮属性等)|--/function_plugin.php插件处理函数|--/function_portal.php门户全局处理函数|--/function_portalcp.php门户管理、编辑处理函数|--/function_post.php帖子数据处理函数(更新、截取、版块统计更新、积分、附件)|--/function_profile.php个人设置处理函数|--/function_search.php搜索处理函数|--/function_seccode.php验证码处理函数|--/function_share.php分享处理函数|--/function_space.php个人空间处理函数(空间数据调用代码、布局等)|--/function_spacecp.php空间发布数据处理函数|--/function_stat.php数据统计函数|--/function_threadsort.php论坛分类信息处理函数(分类信息处理方式、模板代码等)|--/function_trade.php商品处理函数|--/function_upload.php文件上传处理函数|--/function_userapp.php漫游应用处理函数|--/source/function/cache缓存数据处理cache_admingroups.php缓存管理组数据cache_advs.php缓存广告cache_albumcategory.php缓存相册分类cache_announcements.php缓存全局公告(似乎这个文件写法有问题?不是很明白)cache_announcements_forum.php缓存论坛公告(给发布者增加UID)cache_attachtype.php缓存附件分类cache_bbcodes.php缓存Discuz代码cache_bbcodes_display.php缓存Discuz代码排序cache_blogcategory.php缓存日志分类cache_censor.php缓存关键词cache_click.php缓存表态动作cache_connect_blacklist.php缓存封停QQ帐号(封停的QQ帐号不可使用)cache_creditrule.php缓存积分规则cache_custominfo.php缓存用户扩展信息cache_diytemplatename.php缓存DIY页面数据cache_domainwhitelist.php缓存域名数据cache_fields_connect_register.php缓存QQ注册信息cache_fields_optional.php缓存用户栏目-资料页面cache_fields_register.php缓存用户栏目-注册项目cache_fields_required.php缓存用户栏目-名片cache_focus.php站长推荐缓存cache_forumlinks.php缓存友情链接cache_forumrecommend.php缓存论坛版块推荐信息cache_forums.php缓存版块信息cache_forumstick.php缓存论坛置顶信息cache_founder.php缓存创始人、管理员信息cache_globalstick.php缓存全局置顶信息cache_groupicon.php缓存用户组图标cache_grouplevels.php缓存群组等级cache_groupreadaccess.php缓存用户组权限cache_grouptype.php缓存群组分类cache_heats.php缓存论坛首页推荐数据cache_ipbanned.php缓存禁止访问IP数据cache_ipctrl.php缓存IP控制数据cache_magics.php缓存道具信息cache_medals.php缓存勋章cache_modreasons.php缓存操作理由cache_myapp.php缓存漫游应用cache_onlinelist.php缓存在线列表cache_plugin.php缓存插件信息cache_portalcategory.php缓存门户栏目分类cache_profilesetting.php缓存个人信息扩展cache_relatedlink.php缓存关联链接cache_secqaa.php缓存验证回答cache_setting.php缓存后台设置cache_smileycodes.php缓存表情代码cache_smileytypes.php缓存表情分类cache_smilies.php缓存表情数据cache_smilies_js.php缓存表情js代码cache_split.php缓存分表数据cache_stamps.php缓存主题鉴定cache_stamptypeid.php缓存表情分类顺序cache_styles.php缓存风格cache_threadsorts.php缓存分类信息cache_updatediytemplate.php缓存DIY模板cache_userapp.php缓存漫游应用cache_usergroups.php缓存用户组信息cache_userstats.php缓存用户统计信息。
discuz模板解析注释

discuz模板解析注释代码1 <?php23function parse_template($tplfile, $objfile) {4global$options;56//循环嵌套次数7$nest = 3;89//打开模板⽂件10if(!$fp = fopen($tplfile, ‘rb’)) {11exit(’Current template file not found or have no access!’);12 }1314$template = fread($fp, filesize($tplfile));15fclose($fp);1617//匹配变量18//双引号(单引号)内的\具有转义所以,要得到⼀个\必须写为\\;要得到⼀个$必须写为\$;最后结果为\$,可在正则中使⽤的变量符号19$var_regexp = “((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)(\[[a-zA-Z0-9_\-\.\”\’\[\]\$\x7f-\xff]+\])*)”;2021//匹配字符22$const_regexp = “([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)”;2324//清除缩进(tab)25$template = preg_replace(”/([\n\r]+)\t+/s”, “\\1“, $template);2627//清除注释(<!– –>),⽅便后续操作,不需要匹配多余的<!–28$template = preg_replace(”/\<\!\-\-\{(.+?)\}\-\-\>/s”, “{\\1}”, $template);2930//将{LF}替换成⼀个硬回车(\n)31$template = str_replace(”{LF}”, “<?=\”\\n\“?>”, $template);3233//匹配多种变量形式,包括$xxx[”xxxx”]与$xxx[$xxx]、或$xxx34$template = preg_replace(”/\{(\\\$[a-zA-Z0-9_\[\]\’\”\$\.\x7f-\xff]+)\}/s”, “<?=\\1?>”, $template);3536//使⽤/e修正符,可使替换元素以php代码执⾏后,再进⾏replace.37$template = preg_replace(”/$var_regexp/es”, “addquote(’<?=\\1?>’)”, $template);3839//再次替换叠加字符串变量40$template = preg_replace(”/\<\?\=\<\?\=$var_regexp\?\>\?\>/es”, “addquote(’<?=\\1?>’)”, $template);4142//⼦模板嵌套解析43$template = preg_replace(”/[\n\r\t]*\{template\s+([a-z0-9_]+)\}[\n\r\t]*/is”, “\n<? include template(’\\1′); ?>\n”, $template);44$template = preg_replace(”/[\n\r\t]*\{template\s+(.+?)\}[\n\r\t]*/is”, “\n<? include template(\\1); ?>\n”, $template);4546//eval语法解析47$template = preg_replace(”/[\n\r\t]*\{eval\s+(.+?)\}[\n\r\t]*/ies”, “stripvtags(’\n<? \\1; ?>\n’,”)”, $template);4849//echo语法解析50$template = preg_replace(”/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/ies”, “stripvtags(’\n<? echo \\1; ?>\n’,”)”, $template);5152//elseif语法解析53$template = preg_replace(”/[\n\r\t]*\{elseif\s+(.+?)\}[\n\r\t]*/ies”, “stripvtags(’\n<? } elseif(\\1) { ?>\n’,”)”, $template);5455//else语法解析56$template = preg_replace(”/[\n\r\t]*\{else\}[\n\r\t]*/is”, “\n<? } else { ?>\n”, $template);5758for($i = 0; $i < $nest; $i++) {59$template = preg_replace(”/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/ies”, “stripvtags(’\n<? if(is_array(\\1)) { foreach(\\1 as \\2) { ?>’,'\n\\3\n<? } } ?>\n’)”, $template);60 $template = preg_replace(”/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/ies”, “stripvtags(’\n<? if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>’,'\n\\4\n<? } } ?>\n’)”, $template);61$template = preg_replace(”/[\n\r\t]*\{if\s+(.+?)\}[\n\r]*(.+?)[\n\r]*\{\/if\}[\n\r\t]*/ies”, “stripvtags(’\n<? if(\\1) { ?>’,'\n\\2\n<? } ?>\n’)”, $template);62 }6364 //常量直接输出..65 $template = preg_replace(”/\{$const_regexp\}/s”, “<?=\\1?>”, $template);6667 //相临定界符清除(使语法更加连贯)68 $template = preg_replace(”/ \?\>[\n\r]*\<\? /s”, ” “, $template);6970 if(!@$fp = fopen($objfile, ‘wb’)) {71 exit(’Directory \’./cache/template/\’ not found or have no access!’);72 }7374 //转换链接中的&符号为&使编译模板读取时能够正常不会将其视为引⽤..75 $template = preg_replace(”/\”(http)?[\w\.\/:]+\?[^\”]+?&[^\”]+?\”/e”, “transamp(’\\0′)”, $template); 7677 flock($fp, 2);78 fwrite($fp, $template);79 fclose($fp);80 }8182 //转换&避免&以引⽤⽅式执⾏..83 function transamp($str) {84 $str = str_replace(’&’, ‘&’, $str);85 $str = str_replace(’&’, ‘&’, $str);86 $str = str_replace(’\”‘, ‘”‘, $str);87 return $str;88 }8990 //将$var字符串,转换为可执⾏的php代码形式,并返回其结果..91 //\”转换为”,将为[xxx]转换为[’xxx’]92 function addquote($var) {93 return str_replace(”\\\”", “\”", preg_replace(”/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s”, “[’\\1′]”, $var));94 }9596 //设置语⾔变量97 function languagevar($var) {98 return $GLOBALS[’language’][$var] ? $GLOBALS[’language’][$var] : “!$var!”;99 }100 //清理或转换标签为php语法101 function stripvtags($expr, $statement) {102 $expr = str_replace(”\\\”", “\”", preg_replace(”/\<\?\=(\\\$.+?)\?\>/s”, “\\1“, $expr));103 $statement = str_replace(”\\\”", “\”", $statement);104 return $expr.$statement;105 }106107 ?>。
discuz 外部调用模块语法

discuz 外部调用模块语法
在Discuz中,可以使用模块化的方式将各种功能集成到一个统一的系统中。
通过外部调用模块,可以方便地引入和使用第三方模块,扩展Discuz的功能。
Discuz外部调用模块的语法如下:
```php
$mod = new module('模块名称');
$mod->执行方法名(参数);
```
其中,`模块名称`是你要调用的模块的名称,可以是已安装的第三方模块名称或者自定义的模块名称。
`执行方法名`是要执行的方法的名称,这个方法是在模块中定义的一个函数。
你可以通过传递参数来传递数据给这个方法。
以下是一个示例,演示如何调用一个名为"example"的模块中的"exampleMethod"方法:
```php
$mod = new module('example');
$mod->exampleMethod(参数);
```
你需要将实际的模块名称和方法名称替换为你想要调用的模块和方法。
同时,你还需要根据具体的模块和方法的参数要求,传递正确的参数值。
请注意,要使用外部调用模块功能,你需要确保Discuz的模块系统已经正确配置,并且已安装所需的第三方模块。
此外,你还需要了解所调用的模块的具体实现方式和参数要求,以确保正确地使用该模块。
Discuz!常用函数解析

require_once DISCUZ_ROOT.'./include/request.func.php';
$fromid = $discuz_uid;
}
uc_pm_send($fromid, $toid, $subject, $message);
}
/**
* 显示标准提示信息
* @param $toid - 信息
* @param $subject - 跳转到的url
while(($file = readdir($handle)) !== FALSE) {
if($file != '.' && $file != '..') {
$dir = $dirname . DIRECTORY_SEPARATOR . $file;
updatesession();
dheader("location: ".str_replace('&', '&', $url_forward));
}
if(in_array($extra, array('HALTED', 'NOPERM'))) {
* @param $email_subject - 标题
* @param $email_messge - 内容
* @param $email_from - 发送者
*/
function sendmail($email_to, $email_subject, $email_message, $email_from = '') {
Discuz! 常用全局变量函数表

《DZ 全局变量及说明》∙变量名称名称说明[A]字母组∙$action.................................................................................操作∙$adminid...............................................................................管理级别∙$adminemail...........................................................................config.inc.php里面设置的那个∙$adminid...............................................................................管理组id(1管理员2超版3普版-1特殊)∙$adminpaccess.......................................................................不详∙$allowanonymous...................................................................是否允许匿名∙$allowavatar..........................................................................是否允许使用头像∙$allowbanip...........................................................................是否允许ban ip∙$allowbanuser.......................................................................是否允许ban用户∙$allowviewip.........................................................................是否允许查看IP∙$allowgetattach.....................................................................是否允许下载附件∙$allowpostannounce...............................................................是否允许发公告∙$allowcensorword..................................................................是否允许设置词语过滤(主观臆测)∙$allow..................................................................................反正就是权限的全局变量,等回在整理∙$attahdir..............................................................................附件上传目录(绝对)允许的附件扩展名(应该是)∙$attachimgpost.....................................................................帖子中是否显示图片附件∙$attachrefcheck....................................................................下载附件是否来路检查∙$attachsave..........................................................................附件保存方式∙$attachurl.............................................................................附件上传目录(相对)∙$attackevasive.......................................................................config.inc.php中设置,防DDOS攻击设置,详细见该文件∙$authkey..............................................................................(暂时见#26解释)∙$avatarshow_license..............................................................天下秀license∙$avatarshowdefault...............................................................系统管理中显示默认形象设置∙$avatarshowheight................................................................系统管理中头像最大高度∙$avatarshowwidth.................................................................系统管理的头像宽度∙$avatarshowid.......................................................................用户头像所对应用户的UID∙$archiverstatus......................................................................启用Archiver∙$attachrefcheck....................................................................下载附件来路检查∙$avatarshowstatus.................................................................关闭天下秀∙$allowvisit.............................................................................允许访问∙$allowpost............................................................................允许发帖∙$allowreply............................................................................允许回复..允许发投票∙$allowdirectpost.....................................................................允许直接发帖∙$allowgetattach.....................................................................允许查看附件∙$allowpostattach....................................................................允许上传附件∙$allowvote............................................................................允许投票∙$allowmultigroups...................................................................允许加入/离开公众用户组∙$allowsearch..........................................................................允许搜索∙$allowavatar...........................................................................允许使用头像∙$allowcstatus.........................................................................允许使用自定义头衔∙$allowuseblog.........................................................................允许使用BLOG∙$allowinvisible.........................................................................允许隐身∙$allowtransfer........................................................................允许积分转账∙$allowsetreadperm..................................................................允许设置帖子阅读权限∙$allowsetattachperm...............................................................允许设置附件阅读权限∙$allowhidecode.......................................................................允许使用HIDE∙$allowhtml..............................................................................允许使用HTML∙$allowcusbbcode.....................................................................允许使用自定义BBCODE∙$allowanonymous....................................................................允许匿名.. 允许用昵称∙$allowsigbbcode......................................................................允许签名用BBCODE∙$allowsigimgcode.....................................................................允许签名用IMG∙$allowviewpro.........................................................................允许看个人信息∙$allowviewstats.......................................................................允许看统计∙$attachextensions....................................................................附件允许拓展名∙$adminemail............................................................................论坛系统Email∙$attachdir...............................................................................附件保存位置∙$attachurl...............................................................................附件路径URL 地址∙$attackevasive........................................................................防护大量正常请求造成的拒绝服务攻击[B]字母组∙$bbname..............................................................................论坛名∙$boardurl..............................................................................论坛地址∙{$boardurl}forumdisplay?fid=$fid..............................................版块地址∙{$boardurl}viewthread.php?tid=$tid.........................................帖子地址∙$bdaystatus..........................................................................发送生日邮件∙$bannedmessages..................................................................禁言是否显示“该用户已经被屏蔽”的信息∙$bbclosed.............................................................................是否关闭论坛是否用BBCODE代码∙$bbrules................................................................................论坛规则∙$bbrulestxt............................................................................论坛规则是否允许使用HTML∙$boardlicensed.......................................................................显示论坛授权信息[C]字母组∙$credits................................................................................积分∙$censoremail.........................................................................启用EMAIL审核∙$censoruser..........................................................................启用用户审核∙$closedreason........................................................................论坛关闭显示的信息∙$creditsformula......................................................................积分公式∙$creditsformulaexp..................................................................还是公式?∙$creditsnotify.........................................................................启用的拓展积分∙$creditspolicy.........................................................................积分策略∙$creditstax.............................................................................积分交易手续费比率∙$creditstrans..........................................................................交易积分设置∙$custombackup......................................................................?未知∙$cookiedomain........................................................................cookie 作用域∙$cookiepath............................................................................cookie 作用路径[D]字母组$db......................................................................................数据库操作类$discuz_user $discuz_userss.....................................................当前用户名$discuz_uid...........................................................................当前uid $discuz_pw...........................................................................当前用户密码的MD5$discuz_secques....................................................................当前用户安全提问信息$dateformat..........................................................................用户的日期格式$delayviewcount....................................................................点击数延迟更新$debug................................................................................显示程序运行信息$dotfolders...........................................................................本人发起或回复的主题显示加点图标$dupkarmarate......................................................................允许重复评分$digest.................................................................................精华$dotfolders...........................................................................是否将当前用户的主题加点$delayviewcount....................................................................浏览延迟 $dele tereason.......................................................................删除理由 $doublee..............................................................................允许同一Email 注册不同用户$dupkarmarate......................................................................允许重复评分$dbhost...............................................................................数据库服务器$dbuser...............................................................................数据库用户名$dbpw.................................................................................数据库密码 $dbname..............................................................................数据库名数据库错误报告$database.............................................................................MySQL 版本设置$dbcharset............................................................................MySQL 字符集[E]字母组$extcredits............................................................................扩展积分信息(array)$extcredits............................................................................拓展积分 $exchangemincredits...............................................................兑换最低余额$edittimelimit..........................................................................编辑帖子限制时间$editedby..............................................................................显示最后编辑信息$errorreport...........................................................................是否报告PHP 错误[F]字母组$forum[name]........................................................................版块名字 $fastpost...............................................................................快速发帖 $fullmytop ics..........................................................................我的话题全文搜索$forumjump...........................................................................显示论坛跳转菜单$floodctrl...............................................................................发帖灌水预防(秒)$fastpost...............................................................................显示快速发表$forcesecques..........................................................管理人员必须设置安全提问才能进入系统设置[G]字母组Gzip 压缩$globalstick............................................................................启用全局置顶$groupid................................................................................用户组ID[H]字母组$hideprivate...........................................................................隐藏无权访问的论坛$hottopic..............................................................................热门主题帖数$hideprivate...........................................................................隐藏无权访问的论坛$headercharset......................................................................强制设置字符集,只乱码时使用[I]字母组$ipaccess...............................................................................IP允许访问后台权限$ipregctrl...............................................................................IP注册控制[J]字母组$jscachelifeJS.........................................................................数据缓存时间(秒)$jsrefdomainsJ S......................................................................来路限制 $jsstatus................................................................................启用JS[K]字母组$keyword...............................................................................关键字$karmaratelimit........................................................................评分时间限制(小时):[L]字母组$loadctrl................................................................................系统负载控制积分最大天数$loadctrl.................................................................................负载控制[N]字母组$navtitle................................................................................标题$navigation............................................................................描述$nocacheheaders....................................................................禁止浏览器缓冲$newgroupid..........................................................................新用户组别$newsletter............................................................................?未知$newbiespan..........................................................................新手见习时间[M]字母组$memberperpage....................................................................每页显示会员数$modworkstatus......................................................................论坛管理工作统计$maxonlines............................................................................最大在线人数$maxspm60............................................................................秒最大搜索次数$maxsearchresults...................................................................最大搜索结果$maxsmilies最大单一Smilies.......................................................解析次数$membermaxpages..................................................................用户列表最大页数$memliststatus........................................................................允许查看会员列表$maxb days.............................................................................首页显示生日$modworkstatus......................................................................启用管理统计$modreasons...........................................................................管理理由分限制$moddisplay.............................................................................版主显示方式$minpostsize............................................................................最小字数$memliststatus.........................................................................启用会员列表查看$memberperpage.....................................................................会员列表每页显示会员$membermaxpages...................................................................会员列表最大页数$maxthreadads.........................................................................主题广告最大数目$maxspm.................................................................................60 秒最大搜索次数$maxsmilies...............................................................................同一SMILES最大解析数$maxsigrows.............................................................................最大签名高度$maxsearchresults......................................................................最大搜索结果$maxpostsize.............................................................................帖子最大字数$maxpolloptions.........................................................................投票最大选项数$maxonlines..............................................................................最大在线人数$maxmodworksmonths...............................................................管理记录保留最长时间$maxincperthread......................................................................单主题最高收入$maxchargespan........................................................................单主题最高出售时限(小时):$maxprice.................................................................................最大售价件尺寸$maxsizeperday..........................................................................一天最大附件尺寸$maxpmnum..............................................................................最大购买天数[O]字母组$onlineip.................................................................................用户IP $oltimespan.............................................................................用户在线时间更新时长(分钟)$onlinehold.............................................................................在线保持时间[P]字母组$post[authortitle].....................................................................用户组 $ppp......................................................................................每页显示贴数$posts....................................................................................帖数$postperday............................................................................平均每日的发帖$pconnect..............................................................................数据库持久连接[R]字母组$rssstatus................................................................................启用RSS$rewritestatus..........................................................................URL 静态化$regfloodctrl.............................................................................24 小时注册尝试次数限制$reportpost..............................................................................允许向版主报告帖子$readaccess..............................................................................关系到阅读权限用规律$reportpost..............................................................................启用报告$regverify.................................................................................注册审核启用$regstatus................................................................................允许注册$regfloodctrl..............................................................................24 小时注册尝试次数限制$regctrl.....................................................................................IP 注册间隔限制(小时)$reasonpm.................................................................................PM强制理由$raterange.................................................................................评分范围[S]字母组$styleid..................................................................................当前风格的ID$stylejump..............................................................................显示风格下拉菜单$sessionexists..........................................................................是否更新sessions$statstatus..............................................................................使用论坛流量统计$statscachelife.........................................................................统计系统缓存时间$seccodestatus........................................................................启用验证码(安全)$searchctrl...............................................................................搜索时间限制(秒)$subforumsindex......................................................................首页显示论坛的下级子论坛$stylejump...............................................................................风格跳转菜单$statscachelife..........................................................................统计更新时间(分钟)$starthreshold..........................................................................星星升级数$smileyinsert.............................................................................启用SMILES$smcols....................................................................................一行显示SMILES 个数$showemail..............................................................................显示EMAIL$seokeywords..........................................................................关键字 $seodescription.........................................................................头部描述$seccodestatus........................................................................验证码启用$searchctrl...............................................................................搜索控制时间$searchbanperiods.....................................................................禁止全文搜索时间段[T]字母组$tablepre................................................................................表前缀 $timestamp.............................................................................时间信息 $timeformat............................................................................用户的时间格式$timeoffset.............................................................................用户的时差$thread[author]......................................................................作者$thread[dateline].....................................................................时间$thread[replies].......................................................................评论次数 $thread[views]........................................................................查看次数 $thread[subject].....................................................................帖子名称 $tpp......................................................................................每页显示主题数$threadmaxpages....................................................................主题列表最大页数$transsidstatus........................................................................启用URL 传递sid$transfermincredits...................................................................转账最低余额$topicperpage.........................................................................每页主题 $threadmaxpages.....................................................................主题列表最大页数$tablepre................................................................................表名前缀 $tplrefresh..............................................................................模板自动刷新开关[U]字母组$userstatusby..........................................................................用户组头衔衡量标准[V]字母组$visitedforums..........................................................................显示最近访问论坛数量$vtonlinesta tus.........................................................................帖子中显示作者状态$version...................................................................................当前的版本$visitbanperiods.........................................................................禁止访问时间段[W]字母组$welcomemsg..........................................................................禁止自动向新注册用户发送欢迎短消息$whosonlinestatus....................................................................显示在线用户$wapstatu s..............................................................................启用WAP$watermarkquality.....................................................................水印透明度$whosonlinestatus.....................................................................在线列表显示方式$welcomemsgtxt.......................................................................欢迎短信息内容$welcomemsg...........................................................................启用欢迎短信息$watermarkstatus......................................................................启用水印$watermarktrans........................................................................水印融合度$waptpp...................................................................................WAP浏览页数$wapstatus...............................................................................启用WAP$wapppp...................................................................................WAP浏览显示主题数$wapmps...................................................................................WAP 页最大长度$wapdateformat.........................................................................WAP时间格式$wapcharset..............................................................................WAP字符设定《DZ 全局常量及说明》∙变量名称名称说明∙IN_DISCUZ..............................................................................是否在论坛里∙DISCUZ_ROOT.........................................................................路径∙CURSCRIPT..............................................................................某些页面自定义∙FORMHASH...............................................................................随机串《DZ 全局数组及说明》∙变量名称名称说明[_]字符组∙$_DCACHE。
Discuz教程

Discuz教程插件制作的基本思路是:(初学者适用)1.形成插件思路2.制作插件界面3.构架程序模块4.搭建存储数据5.填充功能语句6.检查应用错误7.完善插件功能前言:为方便互联网数万Discuz!爱好者,更加深入了解Discuz!软件,本人在熟悉Discuz!过程中,顺便将个人经验写给大家。
本贴内容由本人定期更新。
本贴只介绍Discuz!中部分技术点,本贴紧属个人观点,不足之处,请各位多多指教,在下先此谢过!。
“Discuz!”在下文中简称“DZ”。
要弄DZ二次开发,必须至少具备如下技能:1)能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的)2)扎实的PHP基础,熟悉结构化程序,OOP程序的写法及应用3)熟悉MYSQL就用,掌握SQL语言,懂SQL优化者更佳4)熟悉使用Discuz!的各项功能一)Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。
a) Admin:后台管理功能模块b) Api:DZ系统与其它系统之间接口程序c) Archiver:DZ中,用以搜索引擎优化的无图版d) Attachments:DZ中,用户上传附件的存放目录e) Customavatars:DZ中,用户自定义头像的目录f) Forumdata:DZ缓存数据的存放目录g) Images:DZ模板中的图片存放目录h) Include:DZ常用函数库,基本功能模块目录i) Ipdata:DZ统计IP来路用的数据j) Plugins:DZ插件信息的存放目录k) Templates:DZ模板文件的存放目录l) Wap:DZ无线,Wap程序处理目录二)必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。
关于DZ数据库设计文档,请参阅DZ相关的项目文档(请从本贴附件中下载)三)Discuz!的流程控制a) 后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2 || admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存放在admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:首页:index.php会员注册:register.php;会员登录:logging.php发贴程序:post.php会员信息:member.php论坛内容:forumdisplay.php查看贴子:member.php…大部分功能,此处不一一列出…c) DZ根目下的config.inc.php属于整个DZ系统的配置文件四)Discuz!的数据处理过程a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理五)Discuz!的显示控制(网站多样式风格输出)a) 显示层就是大家通常所看到的网站风格了。
DZ论坛目录_数据库_表_字段_详解

资源来自网络!自己收集起来的感觉比较详细了·有23页!收1个金币怎么样?呵呵!希望对论坛制作的朋友有帮助嘻嘻!最近在弄论坛秀秀自己的小站admincp.php——后台系统设置程序文件,一般只处理菜单的显示的访问权限,不处理管理控制。
attachment——附件文件,仅仅处理附件下载的功能。
announcement.php——论坛公告的显示,一般很少改blog.php——浏览BLOG文章时候会用的,非常容易理解config.inc.php——配置论坛数据库、密码等信息,这个大家最熟悉了digest.php——论坛精华区的信息显示,不用多说了吧?discuz_version.php——论坛版本信息,用来更新用的,没有官方说明绝对不要修改faq.php——论坛帮助系统,不过我看绝对没人用forumdisplay.php——很简单,论坛主题列表的显示index.php——控制首页元素显示logging.php——登陆系统,判断用户名、密码。
mail_config.inc.php——配置论坛EMAIL功能member.php——控制会员列表显示,积分策略等等信息显示memcp.php——会员控制面板misc.php——控制评分功能、BLOG、论坛界面显示功能等等plugin.php——论坛插件,这个主要控制论坛插件的菜单的显示,一般极少修改pm.php——论坛短信息程序,控制短信息发表与浏览post.php——与viewthread.php相似,但是更多是管理帖子发表、编辑等等信息,也会有权限的控制提示redirect.php——控制显示论坛的最后发表的主题访问register.php——注册文件,同时也会控制注册的信息的合法性rss.php——RSS快速订阅,不用多说了吧?search.php——处理论坛搜索功能中的信息筛选seccode.php——论坛注册,生成验证码的程序stats.php——处理统计中的统计信息topic.php——一般无法直接访问,控制页面显示,显示主题条数topicadmin.php——控制的是管理人员的前台管理操作,如精华、置顶、高亮等等viewpro.php——处理浏览会员信息的内容显示viewthread.php——处理浏览帖子时候的帖子信息显示,例如信息、标题等等,同时也处理访问帖子的权限,如阅读权限是否足够等等。
discuz源代码详解(3)

discuz源代码详解(3)2009-03-07 13:24以下内容为程序代码:/*** 用来得到上一个页面的地址,也就是来路。
* @para string $default 这个参数是直接设置一个refer,不用判断得到** @return string*/function dreferer($default = '') {global $referer, $indexname;$default = empty($default) ? $indexname : '';if(empty($referer) && isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {$referer = preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);$referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;} else {$referer = dhtmlspecialchars($referer);}if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {$referer = $default;}return $referer;}以下内容为程序代码:/*** 设置cookie用的,我觉得这个和clearcookies放到一起比较好,不过好像这个是按字母排的…* @para string $var cookie名* @para string $value cookie值* @para int $life 生存时间* @para int $prefix cookie前缀**/function dsetcookie($var, $value, $life = 0, $prefix = 1) {global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;//echo $prefix."--".$var."--".$value."--".$life."--".$cookiepath;setcookie(($prefix ? $cookiepre : '').$var, $value,$life ? $timestamp + $life : 0, $cookiepath,$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);}以下内容为程序代码:/*** 删除论坛的附件用的* @para string $filename 附件名* @para int $havethumb 是否有缩略图* @para int $remote 是否为远程附件**/function dunlink($filename, $havethumb = 0, $remote = 0) {global $authkey, $ftp, $attachdir;if($remote) {require_once DISCUZ_ROOT.'./include/ftp.func.php';if(!$ftp['connid']) {if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {return;}}dftp_delete($ftp['connid'], $filename);$havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');} else {@unlink($attachdir.'/'.$filename);$havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');}}以下内容为程序代码:/*** 生成email连接用的,比如把图片点击可在新窗口打开查看*********************换成:<ahref="mailto:*********************">*********************</a>这样的形式* @para string $email* @para int $tolink*/function emailconv($email, $tolink = 1) {$email = str_replace(array('@', '.'), array('@', '.'), $email);return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;}以下内容为程序代码:/*** 记录错误日志用的* @para string $type 错误类型* @para string $message 错误内容* @para int $halt 发生错误后是不是就马上停止论坛的运行**/function errorlog($type, $message, $halt = 1) {global $timestamp, $discuz_userss, $onlineip, $_SERVER;$user = empty($discuz_userss) ? '' : $discuz_userss.'<br>';$user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];writelog('errorlog',dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));if($halt) {dexit();}}以下内容为程序代码:/*** 判断访问者是不是robot** @return boolean*/function getrobot() {if(!defined('IS_ROBOT')) {$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';if(preg_match("/($kw_browsers)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', FALSE);} elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', TRUE);} else {define('IS_ROBOT', FALSE);}}return IS_ROBOT;}以下内容为程序代码:/*** 得到一个文件的扩展名* @para string $filename** @return string*/function fileext($filename) {return trim(substr(strrchr($filename, '.'), 1, 10));}以下内容为程序代码:/*** 用当前时间,会员名,uid,密码,authkey生成一个form hash(哈希)** @return string*/function formhash() {global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key), 8, 8);}以下内容为程序代码:/*** 生成论坛访问权限的字串,以|隔开* @para string $permstr 访问权限字串** @return string*/function forumperm($permstr) {global $groupid, $extgroupids;$groupidarray = array($groupid);foreach(explode("\t", $extgroupids) as $extgroupid) {if($extgroupid = intval(trim($extgroupid))) {$groupidarray[] = $extgroupid;}}return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);}以下内容为程序代码:/*** 得到用户组,同步groupid和member['groupid'],当会员积分和当前积分不一致更新members表。
discuz相关语句解释

模板中语句介绍!
注册模块:
判断是否登录
<!--{if $discuz_uid}--><!--{/if}-->
判断是否是管理员登录如果adminid和discuz_id 都大于1 则显示{lang modcp}版主管理
如果adminid和discuz_id 都等于1,则显示{lang admincp} 系统管理
<!--{if $discuz_uid && $adminid > 1}--> <!--{/if}-->
<!--{if $discuz_uid && $adminid == 1> <!--{/if}-->
判断是否设置新手任务:
<!--{if $taskon}--> <!--{/if}-->
判断是否已经申请新手任务
{if $doingtask}
<a id="task_ntc" {if $doingtask}href="task.php?item=doing" class="new" title="{lang task_unfinish}"{else}href="task.php"{/if} target="_blank">{lang task}</a>
解释为:如果申请了新手任务则鼠标放在论坛任务上时有提示”你有未完成任务”如果没有申请则显示论坛任务,二次点击论坛任务的执行文件地址也是不一样的。
单独模板中的注册模块完全可以参照头部模板文件header.htm 文件的写法来改进。
discuz论坛详细的目录结构

目录+文件篇:| -- admin.php 管理员入口| -- api.php 接口文件| -- category.php 分类入口| -- cp.php 个人资料设置入口| -- crossdom ain.xml FLASH跨域传输文件| -- favicon.ico 系统icon图标| -- forum.php 广场入口| -- group.php 群组入口| -- hom e.php 空间入口| -- index.php 首页入口| -- ivite.php 邀请处理文件| -- m ember.php 用户处理文件| -- misc.php 杂项处理文件| -- plugin.php 插件处理文件| -- portal.php 站点首页入口同index.php| -- robots.txt 搜索引擎蜘蛛限制配置文件| -- search.php 搜索入口文件ob| -- userapp.php 用户应用、游戏、漫游入口文件| -- static 系统用到的图片包| -- tem plate 系统总模板目录| -- uc_client ucenter客户端程序| -- uc_server FULL版本中ucenter服务端| -- api 接口文件夹| -- api -- db| -- api -- db -- dbbak.php 接口调用中用到的数据库备份文件,内涵数据库类| -- api -- javascript -- advertisem en.php 广告调用接口| -- api -- javascript -- javascript.php js调用接口| -- api -- m anyou 漫游平台调用接口文件夹| -- api -- m anyou -- class 漫游接口中需要用到的类的文件夹| -- api -- m anyou -- Manyou.php 漫游接口文件| -- api -- m anyou -- m y.php 继承与manyou.php,用来执行更新用户资料的借口文件| -- api -- m obile 移动手机设备接口文件夹,这个文件夹中包含了大量的用户手机浏览器客户端显示的模板和执行文件。
Discuz数据库函数操作方法

Discuz!X/数据库函数操作方法
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(别名, 方法)排序。
discuz的模板制作与源代码分析

discuz的模板制作与源代码分析各位网友,大家好!我是德阳热线论坛管理员()欢迎大家到我站看看,许多使用discuz的人都会自然的想到论坛的风格、样式和模板,如何修改它,如何让它符合心中的要求,相信大家只要对discuz的模板源代码进行钻研的话,那就肯定能够自己独立修改,并且达到自己想要的风格和样式。
但是discuz的源代码极为精简,而且无注释,采用的方法多变,对象、函数等等都不易理解,无疑让大家对模板源代码头痛不已。
俗语说得好,授人以鱼不如授人以渔,我在这里不讲如局具体修改什么,而是讲一讲discuz模板的工作原理和源代码的拆开。
说到模板风格,大家自然想到的就是templates文件夹下的default模板,这里面的文件众多,它是discuz的默认模板。
在这个文件夹里的模板文件很多,最常使用到的,比如说header.htm和footer.htm两个文件,它们分别是论坛的头部和底部,在其它模板里都必须调用这两个文件,是以大家可以看到,在论坛的所有页面里,头部和底部都是相同的。
论坛最常见的三个页面,一个是主页,也就是通常的index.php,还有是主题列表页,以及帖子内容页,下面以index.php来讲述discuz模板的原理以及它牵扯到的文件。
首先我们打开index.php,在这个文件的开头是discuz作者的声明。
然后就是//定义页面define('CURSCRIPT','index');//包含common文件和forum函数库require_once'./include/common.inc.php';require_once DISCUZ_ROOT.'./include/forum.func.php';大家可以看到这里很重要的两句,就是使用require_once函数来包含两个文件,在common.inc.php里存放的是一些常用数据,而在forum.func.php里存放的是有关版块的函数,把这些分离开来单独作为一个文件,是因为这些东西会在多个文件里使用,是以为了循环利用以及代码的精简性,他们被放在一个单独的文件里。
论坛模块__论坛业务介绍与整体说明

论坛模块__论坛业务介绍与整体说明论坛模块__论坛业务介绍与整体说明论坛中的概念版块:也叫做“版⾯”、“讨论区” ,⽤于对帖⼦进⾏分类。
主题:也叫做“主帖”,表⽰⼀个新的话题,可以有很多回帖,属于某个版块。
回复:也叫做“回帖”、“跟帖”,属于某个主帖。
注:主题不能脱离版块单独存在,回帖也不能脱离主题单独存在。
论坛模块的功能说明浏览版块列表显⽰单个版块(主题列表)显⽰单个主题(主帖+回帖列表)参与发新帖回帖管理⽂章主题设置类型移动到其它版块删除修改回复删除修改版块管理增删改查上下移动主题列表的排序效果说明⼀般⽤户不能使⽤修改功能所有的回帖都是针对主帖中的⾔论的,但主帖中的意思改变了,回帖也就没有意义了。
实现这些功能的顺序1,版块管理1,设计实体。
2,分析与实现功能。
2,其他功能(浏览+参与+⽂章管理)1,设计实体2,分析与实现功能。
版块的上下移动每个Forum的position都要有值,⽽且不能重复。
显⽰数据时按position排序(升序)。
上下移动就是交换position的值。
论坛模块的实体图流程说明:实现⼀组功能的步骤1,充分了解需求,包括所有的细节,需要知道要做⼀个什么样的功能充分了解需求的⽅式有:看需求⽂档、分析静态页⾯、问有关⼈员等。
正向⼯程:设计实体 --> JavaBean --> hbm.xml --> 建表2,设计实体/表正向⼯程:设计实体、映射⽂件à 建表反向⼯程:设计表 à 映射⽂件、实体3,分析功能分析到每个请求的粒度。
得到的结果是我们需要处理多少种请求,其中每种请求对应⼀个Action⽅法。
4,实现功能:1,创建Action,并定义出其中的⽅法。
2,实现Action⽅法,并创建出所⽤到的新的Service⽅法。
3,实现Service⽅法,并创建出所⽤到的新的Dao⽅法。
4,实现Dao⽅法。
5,创建并完成JSP页⾯。
5,测试、运⾏完成。
discuz中的forum.php入口文件详解

discuz中的forum.php入口文件详解<?php/*** [Discuz!] (C)2001-2099 Comsenz Inc.* This is NOT a freeware, use is subject to license terms** $Id: forum.php 31999 2012-10-30 07:19:49Z cnteacher $ */define('APPTYPEID', 2);define('CURSCRIPT', 'forum');//定义应用IDrequire './source/class/class_core.php';//基础文件引入,其他文件根据需要引入require './source/function/function_forum.php';$modarray = array('ajax','announcement','attachment','forumdisplay', 'group','image','index','medal','misc','modcp','notice','post','r edirect','relatekw','relatethread','rss','topicadmin','trade','viewthread', 'tag','collection','guide');//模块定义以及缓存模块定义$modcachelist = array('index' => array('announcements', 'onlinelist', 'forumlinks', 'heats', 'historyposts', 'onlinerecord', 'userstats', 'diytemplatenameforum'), 'forumdisplay' => array('smilies', 'announcements_forum', 'globalstick', 'forums','onlinelist', 'forumstick', 'threadtable_info', 'threadtableids', 'stamps', 'diytemplatenameforum'),'viewthread' => array('smilies', 'smileytypes', 'forums', 'usergroups','stamps', 'bbcodes', 'smilies', 'custominfo', 'groupicon', 'stamps','threadtableids', 'threadtable_info', 'posttable_info', 'diytemplatenameforum'), 'redirect' => array('threadtableids', 'threadtable_info', 'posttable_info'),'post' => array('bbcodes_display', 'bbcodes', 'smileycodes', 'smilies', 'smileytypes', 'domainwhitelist', 'albumcategory'), 'space' => array('fields_required', 'fields_optional', 'custominfo'),'group' => array('grouptype', 'diytemplatenamegroup'),);$mod = !in_array(C::app()->var['mod'], $modarray) ? 'index' : C::app()->var['mod'];//判断mod的合法性define('CURMODULE', $mod);//定义常量、论坛以及模板解析时需要$cachelist = array();//依据CURMODULE或mod设定需要加载的缓存if(isset($modcachelist[CURMODULE])) {$cachelist = $modcachelist[CURMODULE];$cachelist[] = 'plugin';$cachelist[] = 'pluginlanguage_system';}if(C::app()->var['mod'] == 'group') {$_G['basescript'] = 'group';}C::app()->cachelist = $cachelist;C::app()->init();/*$discuz->cachelist=$cachelist;$discuz->init();//核心处理*/loadforum();set_rssauth();runhooks();//针对论坛功能的公共过程$navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['seotitle']['forum']);requireDISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';//加载mod>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
** @param $uid - 用户ID* @param $size - 头像大小 small/middle/big* @param $returnsrc - 是否返回头像地址*/function discuz_uc_avatar($uid, $size = '', $returnsrc = FALSE) { ......}======1======/*** 论坛附件删除* @param $attach - 单一附件数据*/function dunlink($attach) {......}======2======/**权限表达式* @param $formula - 权限表达式*/function formulaperm($formula) {......}======3======/**勋章权限表达式* @param $formula - 勋章权限表达式* @param $type - 1 权限验证 2 勋章字串*/function medalformulaperm($formula, $type) {......======4======/*** vip用户购买组权限是否到期* @param $terms 期限来源于 memberfields 表的 groupterms 字段* @return 返回过期信息*/function groupexpiry($terms) {......}======5======/*** 返回当前链接的域名* @return 返回域名*///清理到程序中function site() {return $_SERVER['HTTP_HOST'];}======6======/*** 显示主题分类* @param $curtypeid - 当前被选择的类型id* @return 返回的HTML数据*///使用较少function typeselect($curtypeid = 0) {......}============/*** 更新管理者状态* @param $modacton - 动作* @param $smcols - 执行次数*/function updatemodworks($modaction, $posts = 1) {......}======8======/*** 格式化一个sql语句,通常用于update操作** @param string $fieldname 字段名称* @param int $position 位置* @param int $value 数值 0|1* @return string*/function buildbitsql($fieldname, $position, $value) {......}======9======/*** 依据 tid 或者 fid ,自动取得 $_G['forum'] 或 $_G['thread'] 数据 * @global <type>*/function loadforum() {......}======10======** @param <type> $tid 主题id* @param <type> $fields 取用主题表的字段,默认 "*"* @param <type> $addcondiction 除 tid='$tid' 以外的其他条件, 默认空 * @param <type> $forcetableid 是否强制只从某个分表中取得 thread, 默认null* @return array 当有合法数值返回的时候, 将自动追加2个key值threadtable, posttable 记录此主题使用的分表名称*/function get_thread_by_tid($tid, $fields = '*', $addcondiction = '', $forcetableid = null) {......}======11======/*** 依据 pid 和其他条件,从某个post数据表中取回post信息* @global <type> $_G* @param <type> $pid 帖子id* @param <type> $fields 帖子表字段,默认 ** @param <type> $addcondiction 其他条件,默认空* @param <type> $forcetable 是否强制使用某个分表, 支持: 使用id: 0 1 2 或者 p(主表), a(副表) 或者直接制定表名 forum_post_1* @return array*/function get_post_by_pid($pid, $fields = '*', $addcondiction = '', $forcetable = null) {......}======12======/**是否有查看版块 RSS 的权限*/function rssforumperm($forum) {......}======13======/*** upload_icon_banner上传群组/版块图片* $forum中 fid和status 必须存在,status判断是群组还是版块图片,以存入不同目录* $file上传时的$_FILES* $type icon 或 banner*/function upload_icon_banner(&$data, $file, $type) {......}======14======/**用于 archiver 环境下的分页*/function arch_multi($total, $perpage, $page, $link) {......}======15======/**archiver 模板路径*/function loadarchiver($path) {......}======16======/*** update_threadpartake 按参与人次更新主题热度function update_threadpartake($tid) {......}======17======/*** 获取帖子封面地址** @param int $tid* @param int $cover 负数时表示是远程,正数为本地没有值表示只取filename*/function getthreadcover($tid, $cover = 0, $getfilename = 0) { ......}======18======/***添加主题标签** @param <type> $tags* @param <type> $itemid*/function addthreadtag($tags, $itemid , $typeid = 'tid') {......}======19======/***修改主题标签** @param <type> $tags* @param <type> $itemid* @return <type>function modthreadtag($tags, $itemid) {......}======20======/*** 将未使用的附件转为已使用状态* @param <int> $aid* @param <int> $tid* @param <pid> $pid*/function convertunusedattach($aid, $tid, $pid) {......}======21======/*** 更新附件的 TID 值* @param <string> $where 条件* @param <int> $oldtid 旧 TID* @param <int> $newtid 新 TID*/function updateattachtid($where, $oldtid, $newtid) { ......}======22======/**插入一个帖子*/function insertpost($data) {......}======23======/*** 更新POST* @global $_G* @param array $data 更新的数据* @param string/array $condition 条件* @param bool $unbuffered 是否即时返回* @param int $posttableid post分表ID* @return int 返回的更新的记录数*/function updatepost($data, $condition, $unbuffered = false, $posttableid = false) {......}。