坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

[DZ教程] Discuz二次开发必备技术手册(持续更新)

[复制链接]
坏蛋网络官方 发表于 2020-1-20 01:24:54 来自手机 | 显示全部楼层 |阅读模式
登录
! [2 y( }+ c, c! a5 n  ^6 z/ K<a href="member.php?mod=logging&action=login" title="登录">登录</a>
  i" ~0 h! g' i7 H
' q2 A. {- x& ]3 j0 ^注册
- }( u4 k) `( N- n0 ]1 T<a href="member.php?mod=register" title="立即注册">立即注册</a>$ j6 o, ~9 ^$ l2 ?0 X1 ?
+ P. E1 [( l4 b* ~, S# z$ _
忘记密码. f% X0 u" t8 c2 _
<a href="javascript:;" title="找回密码">找回密码</a>
6 r% m8 |: v9 z) }: ]% }; Q% D# {
' z- T8 Y8 F, I' \" m4 D购买邀请码
5 H6 n: i  r+ X$ y% Q9 G% Hmisc.php?mod=buyinvitecode. P! y/ e7 e+ O6 u

1 d# d& D7 J% h- ~( R/ g4 j" Y: r: hJS跳转
0 u# P0 k) O0 o- u/ f  O* W9 Nonclick="window.location.href='home.php?mod=mobile&do=friend';"9 b6 u4 Y& r3 p

1 S8 F" ?/ O  r8 w0 MJS更换class的名称
* j0 F# \$ s- o$ _& {0 I9 }document.getElementById('idname').className='a';
2 q; R" ~0 x0 l# ?* {document.getElementById('idname').style.display='block';
% u2 \$ |* ?4 ]4 @8 e$ N$ }document.getElementById("idname").style.marginTop="30px";
1 [/ O, G: m! c( I2 ?: {" a# z& m8 p- m4 S
批量替换超链接:  Z) }. A( a4 ~1 }7 S# z: T
href="[^"]*"
% H& b9 ?) c: [2 @8 |+ a$ ^1 y7 M
" o+ @& m$ Q$ Z8 S( P: k过滤DZ代码:! \1 R  |& I' y. K' U6 Y1 O: J
preg_replace ("/\[[a-z][^\]]*\]|\[\/[a-z]+\]/i",'',preg_replace("/\[attach\]\d+\[\/attach\]/i",'',$message));+ B& I3 q* _+ H. |$ j& T6 e

& H$ j4 T' u6 f% Z+ V1 D调用单个数据3 W6 v/ u( Z* E! ^, |& \7 d
$a = DB::result(DB::query("SELECT qi FROM ".DB::table('abc')." WHERE id = '1'"));! t8 }  x6 E% K  h9 a8 t7 P
  o; n# r0 C3 t
调用统计数据# J& p, F" }- K
$a = DB::result(DB::query("SELECT count(*) FROM ".DB::table('abc')." WHERE id = '1'"));
: z) f4 W4 e6 Z: v4 c
* ]# B/ S& U3 z: _4 E2 W: Y单数据表调用/ n5 w9 g! \$ J3 T- X
$perpage = 20;
% W& v) `+ i- X8 Q  M$curpage = empty ( $_GET['page'] ) ? 1 : intval ( $_GET['page'] );
5 Z0 L8 r" X9 I* C9 i- e$start = ($curpage-1)*$perpage;8 u2 b! a1 G9 `# g, c; X
$askcount = DB::result(DB::query("SELECT COUNT(*) FROM ".DB::table('forum_thread')." WHERE fid = '2' AND authorid > 1"));
8 {/ |; X3 n( p" x0 I$ v/ B5 @. v//$asklist
) T9 n# r% Q: \& J' l$asklist = array();- u. _4 T. s/ e9 ?! r6 Q
if ($askcount) {
( `2 q( b  S3 L0 I/ R5 m        $query = DB::query("SELECT * FROM ".DB::table('forum_thread')." WHERE fid = '2' AND displayorder > -1 ORDER BY tid ASC LIMIT $start,$perpage");" J; u4 y$ H# M, |
        while ($value = DB::fetch($query)) {* i& q0 |6 |' U% M7 \+ o5 d+ l8 S
                $asklist[] = $value;
( W) C$ g+ D$ w; \        }
0 n& E, [+ F7 U0 l$ `+ D}& p7 H! W# o8 u& h8 z% P+ V
$multi = multi($askcount, $perpage, $curpage, "这里填写跳转地址");; X8 Z) M# q+ a/ T$ q& L% K5 B
$ v" o$ D- A9 h) K8 v  D( k; F
& D& }- w1 K) R6 R' q
. u- Y* u! ]* M/ E( M, E
多数据表调用
6 A$ Y. u% b* b+ J$perpage = 40;* M! F# z/ V  N! |$ P. l* K3 s
$curpage = empty ( $_GET['page'] ) ? 1 : intval ( $_GET['page'] );
/ f: T& T0 p  n9 v; w$start = ($curpage-1)*$perpage;
& L1 ?/ N) Z$ N; ~9 [$acount = DB::result(DB::query("SELECT count(*) FROM ".DB::table('forum_forum')." b LEFT JOIN ".DB::table('forum_forumfield')." bf ON bf.fid=b.fid WHERE b.type='sub' AND b.status = 3 AND bf.icon != ''"));. H# t$ m! }  c9 E2 o6 e8 v
//$alist
) y0 ?6 N  t4 U1 Q! y5 v' g$alist = array();
. i# H/ [- X8 y1 dif ($acount) {' J, f9 r1 q9 q9 {' e: v5 I3 x
        $query = DB::query("SELECT bf.*, b.* FROM ".DB::table('forum_forum')." b LEFT JOIN ".DB::table('forum_forumfield')." bf ON bf.fid=b.fid WHERE b.type='sub' AND b.status = 3 AND bf.icon != '' ORDER BY bf.shoplevel DESC, b.commoncredits DESC, bf.fid DESC LIMIT $start,$perpage");. E  f. e4 ]  ]9 P8 ^
        while ($value = DB::fetch($query)) {8 R, |3 C& Z5 _
                $alist[] = $value;
, e! [2 _9 g6 |3 R0 X" r$ H" a' v        }
; y, b, X, p/ i5 C  ^}
- G& E1 K/ Q0 X$multi = multi($acount, $perpage, $curpage, "这里填写跳转地址");+ e8 \$ K4 T/ H. l
+ O$ R' J8 ^, L1 J4 _2 f% ]1 U
$ g+ C0 E3 c8 T3 l8 t- k% X. \

8 K- z; d; C) L& c& @前台数据显示
3 D* w' A& P& d; F$ t$ m<!--{loop $alist $key $value}-->
) r0 h5 d$ z/ u; m& j5 I<!--{eval $tupianfm = DB::result(DB::query("SELECT attachment FROM ".DB::table('forum_threadimage')." WHERE tid = '$value[tid]'"));}-->
( H# l- L' v7 ^% }, s% y% f<img src="$tupianfm"><br>$value[authorid]
4 c/ K/ J1 p) z( x! `- x<!--{/loop}-->
8 g  j! ]' W6 @* y7 H9 [# _- p9 y( ]; ~( M5 y( K# x7 u1 \
  p: E% p2 J& Q
取数据表中符合条件的第一条数据
1 ^, h8 `' X/ n$app=array();+ e! V, @7 d/ ^9 Z
$app=DB::fetch_first("select * from ".DB::table('abc')." where id='{$id}'");
* k9 I; b8 E$ C- X! D2 R
* g5 p* K% W" ?  F, D) s
6 E, L- M, I' w7 }6 O
' P8 X" M. Q( Z3 ]7 p' ^人性化时间戳, Z4 H: f& U4 }; c. Z
<!--{echo dgmdate(这里填写时间参数, 'u', '9999', getglobal('setting/dateformat'))}-->
' n( g/ R- v' A- s6 G<!--{echo date("Y-m/d H:i:s",这里填写时间参数)}-->6 v1 d! `' b  y0 G" b* ?; K! ?' U1 n

) J5 @$ c$ W# g* `
# w2 B* d2 G% C& Q2 j5 Y截取字符字数
, j( x6 c# U% h<!--{echo cutstr(这里填写参数,40)}-->; h2 Z, \& B: ]9 S- d
, j0 f' u$ K  |  k
' O; {/ I0 n( n, E
过滤DISCUZ代码# [- q. G; [4 A! S
preg_replace ("/\[[a-z][^\]]*\]|\[\/[a-z]+\]/i",'',preg_replace("/\[attach\]\d+\[\/attach\]/i",'',$message));  o2 o# k% }& u

3 h- q0 |9 o7 J( E! y3 V' v4 f/ S  M+ D/ _% t' C: B& x
写入数据库
. g7 Q7 C4 w" O& i# mif(submitcheck('tijiao')) {2 i* R/ J( c. J: z4 n3 x% W+ |$ I
        $setarr = array(
9 B( j, Q6 r3 h1 M                'tid' => $_GET['topicid'],; B6 q) v  h6 k6 w
                'name' => $_POST['name'],& ?4 U7 o& n2 S( M1 n
                'position' => $_GET['position'],
: F9 T+ }+ J$ \% M                'dateline' => $_G['timestamp'],8 ^$ u  V7 L/ z# H2 G; H- k
        );6 z7 E0 b8 h9 u6 Q
        DB::insert('abc', $setarr, 1);* S- j3 V: `' E+ p
        $query = DB::query("UPDATE ".DB::table('abc')." SET stickreply='1' WHERE tid='$tid'");+ H1 j6 N) |% A  x7 _4 q$ U1 V
        $query = DB::query("DELETE FROM ".DB::table('abc')." WHERE pid='$pid'");) c& N. K. q% ~* }( Z0 m1 T% x2 V3 Y
        showmessage('成功的提示信息', "跳转地址");
2 Y1 y6 e' L6 U! `7 E}" L5 o2 `) V# P4 Q3 Z
$ b. Y7 o! Y; \! w6 M

2 }4 v& b* [5 o! m# i5 x9 b9 [4 w$ G
2 l1 G& H- W4 \- v" C表单提交:
" n5 Y, i/ h9 e# F  B<form action="do.php" method="post" autocomplete="off">3 |/ o! Z7 q& C( q
        <input type="hidden" value="{FORMHASH}" name="formhash" />8 I! b0 x  S7 l5 w  _+ T$ K
        最低奖金:<input name="qi" type="text" value="" /> 
% J' g+ ^! E& V- E        最高奖金:<input name="end" type="text" value="" />  % D6 o' O: }" f: T, d/ u8 S: j
        <button value="true" name="tijiao" type="submit">提交设置</button>
' N2 k9 P, K  k1 M        <input type="hidden" name="tijiao" value="true" />
: \& {% J4 l  D) U  L! a, S</form>
9 }5 O3 d1 l* ~# f1 v* J& S# q$ A' h
8 I/ S& x3 f: e; R4 n+ z0 x! N
. u9 V+ H* q9 L9 |" M  [( I
以下两个时间格式是对等关系
/ L! |. i: X: P; Cdate("Ymd",time());  20150212
  F: W7 J! g. H" ~  XFROM_UNIXTIME(dateline, '%Y%m%d')
# V. Q9 @' s8 N# g7 I4 b" Z' s; f+ X: o6 M
前者用于PHP,后者用于数据库调用的字段的格式化
1 Y, I8 k" T  t  ]% M& j6 Z6 o, o$ t( C0 {7 G$ x4 Q
调用图片附件
& D+ m+ E" W3 G$ l( a<!--{eval $biaoid = substr($value[tid], -1); $cover = DB::result(DB::query("SELECT attachment FROM ".DB::table('forum_attachment_'.$biaoid.'')." WHERE tid = '$value[tid]'"));}-->& n/ r6 E# H1 `* G& W. s6 B( i% e
" d* H$ X8 H3 D

. f8 X; M1 w/ D3 A7 i数据库循环嵌套调用
% k% S7 M! k/ s0 [: S: p2 v: M! \<!--{eval $slides = DB::fetch_all("SELECT * FROM ".DB::table('a')." WHERE `uid`= $_G[uid] ORDER BY `id` DESC");}-->5 K* [4 z: A! b9 F% V* M; w6 u; {
<!--{loop $slides $slide}-->
$ }+ Q1 }1 s  V# i# e$slide[name]6 ^1 p$ ]2 J6 a0 y; _/ i
<!--{/loop}-->" c- B6 G5 y0 o/ W" b
) g- a! J( M, v- r
& }! `$ v7 @" \3 V: m* O5 m$ O
ucenter无法登录:
- p( u- X2 B3 D9 i! [. ?打开uc_server/model/admin.php
2 M& l  Z( ?, W+ h6 T找到第22行的5 T, E& h9 {: y+ b
$this->cookie_status = 0;
8 U, l  y5 c9 m$ s2 {4 L% f! n$ X+ }
' E7 Y# A/ X- J3 Q
改成' ^2 R- P2 l7 I, ^2 x
$this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;
3 h: F9 y' {% E) V; U; v* K1 ]$ \6 Y3 u

/ `& C* i( o2 G) S" N# {( _3 S4 T$ f7 i$ h8 {  i  K  F# y
无刷新切换li标签并且同时加载框架页面:1 V: \, [, H/ x! W0 b6 j7 H4 e  b+ _
<script type="text/javascript"> ' k, N3 y8 X4 v6 d3 U+ t
var jq = jQuery.noConflict();
. g8 r2 f( h2 n! ~  @jq(function(){
$ b: e: Q: E- a7 `. h9 N/ Rjq("#changemenu>li").mouseover(function(){ : ]% U% p6 c5 }" N6 a) a
jq("#changemenu>li").each(function(i){ ( z5 F+ s. H( n
jq(this).removeClass("current");
. B6 r$ @+ |( R  T# m+ a7 g; {}); + g0 ^. K6 i, j- [* @) }
jq(this).addClass("current");
4 ]8 w0 b4 |. D  adocument.getElementById("changenr").innerHTML='<iframe src="do.php?id='+jq(this).attr('dataid')+'" height="350" width="1070" frameborder="0" scrolling="no"></iframe>';. R: u# k; x6 o9 ?  W+ I
}).mouseout(function(){
; b' l- g$ w) Ajq(this).addClass("current");
: `7 s! g0 W+ \" d2 w7 Q; U  r}); 0 F9 r) d5 D' o3 m
});
5 [: v: ^* P6 e4 z. t, b% C9 L1 `</script>
2 Q# S; {3 v$ W# B- W5 g<ul id="changemenu">
( Q( Q4 p' z" q/ p9 Z   <li class="current" dataid="1"></li>- c6 W  F, Y+ _6 g0 j
   <li dataid="2"></li>. P4 ]* Y2 J! ~, s( s: I! P
</ul>& L1 c. [/ N! H
<div id="changenr"></div>! W( F7 F$ K- r2 K

  }# _0 |& G. j' G" T% S- m, F/ o/ X$ v/ P: x' P$ h# Y+ p  o

$ W" ^' W. R( r: l- |0 v快速发帖! m- {5 u/ ~% C6 T- G
<a href="forum.php?mod=misc&action=nav">发布新话题</a>
: W7 D8 |. s1 y' w6 k9 k  C  O6 f9 w: `/ U5 t: Q
8 h) k" ~5 g" g
( J5 h  c" b- M6 I; g, b- C' C
DISCUZ JSON数据解析获取" W# M/ M2 \1 o. H4 Y& j
$str = 'a:2:{s:8:"sitename";s:8:"源码哥";s:3:"pic";s:12:"ymg6.jpg";}';
2 }: u6 K1 p' l$newstr = str_replace("\","",$str);" @' o, Q0 {  G& r' K% K) q6 ]# Y
$data = unserialize($newstr);
2 D. \8 b0 Z2 Cecho $data[sitename];//输出结果为源码哥& M) |- U1 X# Z6 U% \% F: C2 s1 j  N5 {

% [" @: k+ F/ x0 m- B* s# V
) u) h% P) E# b; D6 f2 u- j+ R) f  ]2 t5 f6 L$ O9 g7 \2 Q# \
DISCUZ云平台站点同步提示DNS错误解决方法:打开source\plugin\manyou\Service\Client\Restful.php,找到代码:! c+ B% J7 V5 g) J- [  I4 N# ~
$result = $this->_fsockopen($url, 0, $data, '', false, $ip, 5);
3 Q" _& y/ d( o& i
5 S$ U& V; W% Q  [) I' i* B' Y1 A' I
修改为:- ^1 c! D+ C; y9 O9 T1 k! V
$result = $this->_fsockopen($url, 0, $data, '', false, $ip, 30);
! i: g8 Z; U; x1 Z9 z. T  @9 o
) B" Q( {+ X& k# v- r& R
" J" b% p$ G# y% L; m: {  V) n0 S" @5 `, m- c
LI标签列表自适应宽度JS实现代码(去除每行最后一个li标签的右边距):
% R8 O) {( P2 g, J<script type="text/javascript" src="http://www.banban.so/new/bang/uploads/146383669567393.js"></script>( \2 m, @/ T2 a0 {3 o, s
<style>ul,li{margin:0; padding:0; list-style:none;}.list{width:100%; margin:0 auto;}.list li{width:32%; float:left; margin-right:2%; background:#0092B9; text-align:center; color:#fff; height:300px; line-height:300px; margin-bottom:10px;}</style>
. a& U8 J. c/ |) C; `<div class="list">0 h# ?6 d6 W! x+ o# e7 S8 u
        <ul>
& m! }: u) W- U% ?        <li>源码哥</li>3 h' Y" p& J1 }% x9 o
        <li>源码哥</li>
: D2 w8 z1 |! f- `6 t& s        <li>源码哥</li>
4 ~! _" M* |9 R! W# a0 J        <li>源码哥</li>
" M6 }; z* L. P( U6 m. I8 R        <li>源码哥</li>2 K( x/ [( l8 y. {% I% Q, `
        <li>源码哥</li>  l! q; R$ Q/ c) v- M! W: g5 o$ Y4 [" B% a
    </ul>
% J0 T1 I/ K2 n</div>
0 T. d$ C& |; Y7 i: \<script type="text/javascript">
; \3 I$ a9 w) D    $('.list li:nth-child(3n)').css('marginRight', '0');& Q* b5 x) W  \) x  T- c
</script>
0 R/ L( C1 c8 S( x. Q
& X3 K$ M: u* N) U$ g+ J2 ?$ q+ F. l( g. |. F3 o. U! |* Y
: c! t" h# h- B% q8 s
常用词汇7 [1 z* x' i( y5 q. K
select 选择
0 J7 s: H8 R: e1 @1 \count 总数
  ?6 S9 d& }9 Dtable 表' |9 u! T3 u/ P" h0 z# u+ y( _
where 条件
/ f1 x6 L7 A& r6 g% R# n. V* Cresult 结果/ W! B# B  n; U, G
perpage 每页; F) L4 }. P; p9 B% _  L5 h! U
curpage 当前页
+ m0 n% `+ [3 R. O; Dupdate 更新* b' K$ }0 B& G: `& m
delete 删除# }# f  ?' ]: x* s, e1 F7 w8 S
insert 写入) A  i7 [* ~1 |: n
dateline 日期+ Z( S% _: }$ `! T1 Z/ S" [6 r# v
time 时间, H4 z1 t2 A8 s7 p0 j' F( s3 h
echo 输出   <?php   echo '123';   ?>* Y  p6 y9 n+ C8 N* I! L  A
multi 分页函数
3 }( O# r, x  ]6 w" x% d/ {if 如果
2 S& \" y& g3 o+ [! L( Xelse 否则! N7 e7 `# B+ z$ ~- R. Z8 a6 c
elseif
  [: Z/ b3 R3 n- ^* i& z9 ]7 j8 vstart 起始: V% c- ?2 ^3 M6 a% |. \
limit 限制  limit 105 z: N; Z9 L6 N  _* p* \+ V
DESC 倒序( ]+ x: K! j% T$ ^- m
ASC 正序
9 B7 l: N+ L5 R2 Q+ s8 \6 c4 e' S+ K/ A/ v1 [, R. a6 @
$ l# i0 ?% Y: g, H

7 g9 P2 G' p  [/ L活动帖发布页面核心处理文件:
8 {9 R0 b, |% [' X; Vsource\class\extend\extend_thread_activity.php
4 Z6 L& S3 Z+ q$ Z6 U6 l% ]
% @& U4 I3 k! x( K分类信息解析文件
. v( N& D- e) r$ w7 J8 |( ssource\function\function_threadsort.php
$ @# |) i- z, j6 Y. t( BDiscuz模版运行php代码
- ]: n$ G1 e  a: f& V<!--{eval echo'源码哥';}-->  Y' N' ?: c8 n; ?$ t3 p8 W4 c
8 `8 V+ ^+ z% G+ h" A( v
<!--{eval}-->
# D- h+ {5 X1 S! Wecho'源码哥';
- W3 ]' q7 H+ a* L: b7 J<!--{/eval}-->8 j: }  u: e. g
标签获得焦点后触发js
) ]2 Z8 E* q: l" a6 L5 u& W3 ronfocus="ymgcom()"6 ~) f! R8 [5 a* q, Q) N! R. g
+ `8 S, m+ o8 P, r6 ?' q+ e3 H% Q! e
$ T. `: ?6 P2 i$ _
标签失去焦点后触发js
8 ^  C' }# y- h5 ]3 ~6 _  {8 t; p! k9 a6 b8 W
onblur="ymgcom();"6 ^; u$ k, D* S  o3 J0 b
# \; z3 K; V1 G3 h5 v

. J; z- k2 H) i2 F* Q# {8 ?密码输出1*****67 q+ l+ g; `2 W1 o. s. W
//原密码为$_GET['password']
% O0 C4 U' C7 Y* `2 |$password = preg_replace("/^(.{".round(strlen($_GET['password']) / 4)."})(.+?)(.{".round(strlen($_GET['password']) / 6)."})$/s", "\\1***\\3", $_GET['password']);
. g  b! Q7 y) decho $password;) ^' T4 }$ k: G6 ~( b
1578843666617.jpeg
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
yyc男神 发表于 2020-1-21 03:31:41 | 显示全部楼层
看帖回帖是美德!
回复

使用道具 举报

雨后晴天 发表于 2020-1-21 04:32:56 | 显示全部楼层
帮帮顶顶!!
回复

使用道具 举报

MR.Z 发表于 2020-1-21 04:46:00 | 显示全部楼层
路过,支持一下啦
回复

使用道具 举报

66666 发表于 2020-1-21 16:44:35 | 显示全部楼层
这是什么东东啊
回复

使用道具 举报

 shu1332725 发表于 2020-1-21 17:24:28 | 显示全部楼层
路过,支持一下啦
回复

使用道具 举报

foryun 发表于 2020-1-22 03:36:46 | 显示全部楼层
真是 收益 匪浅
回复

使用道具 举报

666男神 发表于 2020-1-24 23:52:00 | 显示全部楼层
相当不错,感谢无私分享精神!
回复

使用道具 举报

全村的希望 发表于 2020-1-26 11:18:50 | 显示全部楼层
前排支持下
回复

使用道具 举报

jjj111 发表于 2020-1-26 12:32:02 | 显示全部楼层
不错 支持下
回复

使用道具 举报

快速回复 返回顶部 返回列表