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

合集下载

Discuz!常用函数解析

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模块参数

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帖子)

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!程序文件功能,修改文件从此不用再求人以及扩展文本的创建

相信有不少人热衷于基于修改原有系统文件所做的插件,当然了解程序文件功能是最重要的,下面我把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详解

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自定义函数库说明

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模板解析注释

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的功能。

Discuz外部调用模块的语法如下:
```php
$mod = new module('模块名称');
$mod->执行方法名(参数);
```
其中,`模块名称`是你要调用的模块的名称,可以是已安装的第三方模块名称或者自定义的模块名称。

`执行方法名`是要执行的方法的名称,这个方法是在模块中定义的一个函数。

你可以通过传递参数来传递数据给这个方法。

以下是一个示例,演示如何调用一个名为"example"的模块中的"exampleMethod"方法:
```php
$mod = new module('example');
$mod->exampleMethod(参数);
```
你需要将实际的模块名称和方法名称替换为你想要调用的模块和方法。

同时,你还需要根据具体的模块和方法的参数要求,传递正确的参数值。

请注意,要使用外部调用模块功能,你需要确保Discuz的模块系统已经正确配置,并且已安装所需的第三方模块。

此外,你还需要了解所调用的模块的具体实现方式和参数要求,以确保正确地使用该模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) {......}。

相关文档
最新文档