一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

童虎:人人皆可做插件 Discuz! 插件開發實例講解_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP技術進階 PHP SOCKET 技術研究
今天試著寫一個 PHP 與 C 語言通過socket通訊的程序,看過PHP手冊,發現有好幾種方式可以建立socket 客戶端. 1、通過 fsockopen() 建立socket連接,然后用 用fputs() 發送消息,用 fgets() 接

作者簡介:童虎,Discuz!論壇程序研發經理,負責Discuz!論壇程序研發團隊的管理工作,曾是Discuz!早期插件作者,擔任過Freediscuz插件區版主。 曾開發過社區寵物、社區監獄、社區虛擬形象等多個Discuz!熱門插件。

論壇向社區化發展已經成為趨勢,站長對網站的個性化需求越來越高,同時隨著網站規模的擴大,站長對于一些特殊功能的需求也越來越多, Discuz! 標準程序作為一個通用程序,從某種意義上講很難滿足所有站長個性化功能的需求,因此論壇插件就成為對標準程序最好的功能補充。

從目前來看,正在做插件和想做插件的人越來越多,從Discuz!官方論壇的統計數據大家就可以看出,目前插件區已經成為僅次于安裝使用區之后的第二大版塊。于此我們同時也發現許多希望開發插件的作者,有時候感覺插件開發很難上手,一定程度上也影響了插件的豐富性和多樣性。特此,寫這樣一篇文章,談不上有什么教育意義,只是給那些希望開發插件的朋友一塊敲門磚,讓更多的人成為一名插件作者,拿出你們的創意,讓論壇更加豐富多彩。

閑話少敘,書歸正言,首先我們來介紹一些Discuz!插件從程序實現的方式,主要是分兩種:

第一種是利用已有的插件機制,這種機制官方有詳細的開發文檔,可以利用現有的一些接口和函數,按照文檔規定的文件以及目錄結構,進行開發就可以了,這種方式是官方鼓勵的開發方式,所開發的插件比較標準,在后臺可以輕松管理并導入導出,利于插件的安裝。 但是這種方式需要插件作者看懂開發文檔,嚴格按照開發文檔做。個人感覺局限性相對而言比較大,不過推薦新手可以試試這種方式,畢竟這種方式插件方便插件使用者安裝,相對而言比較利于插件的推廣。

第二種就是我這篇文章可能要重點推薦的,我稱它為自由方式,這種方式需要插件作者對 Discuz! 程序相關接口和函數有一定了解。當然我會在下面的文章里面對一些常用函數做一個簡單介紹。這種方式的好處就是在編寫程序時候比較自由,不需要像第一種那樣需要放在規定的目錄中,給插件作者發揮的余地更大。還有,就是這樣寫出的程序更像論壇程序的一部分,而不是一個插件,哈哈。不過這種方式編寫的插件也有一定的缺陷,比如安裝上面相對第一種方式比較繁瑣,如果需要管理后臺,還需要自己來編寫。不過這些對于大家來說應該是小意思了吧,呵呵。

下面我一步一步來介紹自由方式編寫插件的過程,以及一些常用的函數和其用法。先強調一點,我這里所介紹的插件是有獨立運行文件的,而不是那種只修改原文件。

首先介紹一下插件的組成,一個普通的插件不管是小型的還是大型的,一般都會有一個主程序文件,作為 Discuz! 的插件,如果有獨立頁面一般會有模板文件。當然隨著插件功能增加可能還會有其他文件,比如后臺管理文件、自定義函數文件等等。總的來說一個插件最低限度要有一個主程序 PHP 文件,基本上都會有一個主程序文件和模板文件。高級一些插件還會存在后臺管理文件以及相關程序文件。

文件存放目錄,一般主程序會放在論壇根目錄下,這樣比較規范而且方便插件前臺調用。模板目錄一般放在 templatesdefault 目錄下,這樣即使更換風格也可以正常使用,因為 Discuz! 模板處理程序會有這樣的一個機制:如果生成模板緩存的時候,當前模板目錄下沒有需要的模板文件,會自動到默認模板目錄下獲取,如果還沒有才會報錯。所以作為插件的模板最好放在默認模板目錄下。

其他文件可以根據功能不同放在不同的目錄下,比如說后臺管理文件,一般會放在論壇根目錄 admin 目錄下,然后通過 admincp.php 里面調用,調用方法我會在后面說到。用的一些 function 之類的東西,可以寫成一個文件放在 include 目錄下,不過最好是單獨建立一個目錄放在里面,這樣比較方便今后的拆卸。

最后還有一部分文件,就是你頁面中可能會用到的圖片文件,這些圖片文件一般放在images 目錄下,至于放在那里在這里我們就沒有嚴格的要求了。

說完了文件,下面簡單介紹一下插件中對數據表的操作。對于插件而言實際上是不希望對論壇的數據表進行修改的,特別是論壇的幾個主要數據表:members、 posts、threads,對這幾個表如果修改的不恰當,很可能造成整個論壇系統性能的下降。為了防止給插件拆卸帶來不便,所以我們在制作插件時候盡量避免對上面三個數據表的結構進行修改。如果非要修改,盡量能單獨建立數據表,然后通過 uid 、 pid 、 tid 進行數據關聯,當使用的時候再調用。

退一步說如果非要在上述三個數據表里面添加字段,所添加的字段如果是字符類型必須是定長字段,例如 char ,如果是數字類型根據數值范圍不同,盡量用 tinyint 、 smallint 、int ,這樣盡可能不影響論壇效率。當然在實際使用中還有許多要注意的地方,鑒于文章的篇幅有限這里不做太多詳細的說明,另外我會對插件數據庫要注意的問題,單獨寫成文檔和大家一起討論。

上面都是一些常識問題,下面我以一個以前我寫過的插件為例子,具體對插件的編寫,以及一些 Discuz! 常用函數的使用做說明。

這個插件很簡單,就是一個抽獎的插件,主要功能是根據會員的一些論壇資料,比如發帖數、精華帖、在線時間、注冊時間等計算出獲獎幾率,并獲得一定數量指定積分。主要由三部分文件組成,主程序文件:luck.php、模板文件 templatesdefaultluck.htm 模板文件和圖片文件 imagesdefault ,增加了一個數據表:cdb_luck。

下面我將 luck.php 和模板文件部分關鍵代碼進行詳解,講解前我先介紹幾個必備的文件和自定義函數。

首先是幾乎在所有插件都要用到的文件 common.inc.php ,這個文件是 Discuz! 核心文件,幾乎所有的程序文件都會用到,這個文件主要是一些重要的變量進行初始化以及賦值,調用常用的自定義函數,以及一些共用程序。并且在里面對用戶登陸以及相關操作做了處理,具體的代碼這里就不詳細分析了,大家可以到 www.discuz.net 上找到詳解的文章。

其次就是幾個自定義函數了:

1、 function showmessage($message, $url_forward = '', $extra = '')

這個函數的主要作用就是返回提示信息,參數變量有三個:

$memssage 要返回的提示信息,支持 html ;

$url_forward 返回提示信息后跳轉的 url ;

$extra 其他參數,主要有兩個 HALTED 、 NOPERM ,其中 NOPERM 是比較常用的,是當一個用戶沒有權限時候,用這個參數會自動出現無權限頁面以及要求登陸的界面。

這個函數使用還有一個小技巧,就是當 $memssage 包含“返回”這個字樣的時候,無需填寫 $url_forward 變量,會自動返回上一頁。

2、function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0)

主要作用驗證表單提交是否合法, Discuz! 系統中為了防止非法表單提交,所有的表單提交頁面都會有一個隱藏 input , name 為 formhash ,這個 hash 是根據一些用戶資料經過加密生成的,主要驗證該用戶的表單提交動作是否合作。這個函數在有表單提交的時候會經常用到。

這個函數的參數變量有四個:

$var 提交 submit 的 name ;

$allowget 這個表單是否允許 get 方式提交;

$seccodecheck 提交表單是否需要驗證碼;

$secqaacheck 提交表單是否需要驗證問題。

3、 function template($file, $templateid = 0, $tpldir = '')

這個也是插件中比較常用的自定義函數之一,主要用戶生成插件的模板,參數變量有三個:

$file 要生成模板的文件名(不包括擴展名)這個指的是上面所說的模板文件;

$templateid 指定模板 ID , Discuz! 系統支持多套模板,每個模板都有對應的 ID ,這里可以指定某套模板的 id 下面的某個模板文件,一般不需要填寫;

$tpldir 模板文件目錄,這個一般情況下也不用填寫。

因為Discuz!的模板最終會編譯成 PHP 文件,所以在用這個函數的時候,還需要引用一下,一般用 PHP 中的 include 函數引用。

4、嚴格說這個是一個 class ,主要用于一些數據庫操作,比較多,這里就不一一描述了,大家可以自己看 includedb_mysql.class.php 文件,簡單說

兩個常用:

$db-query(“$sql”) 執行某一特定的 SQL 語句,支持幾乎所有的 MYSQL 常用語句。

$db-fetch_array($query) 將 SQL 語句的結果輸出為數組,主要用于 SELECT 操作。

最后還要提一下一些在插件中可能用到的, Discuz! 系統中一些全局變量:

$discuz_uid 用戶 uid

$discuz_user 用戶名

$tablepre 數據表前綴

$timestamp 當前時間(時間戳形式)

說了這么多了,下面我們來看具體代碼,我會把程序中每行代碼做解釋,希望大家能獲得一點啟發吧

require_once '.includecommon.inc.php';

這行代碼就是前面說的 common.inc.php 這個系統核心文件的引用,幾乎所有插件都會用到。

代碼如下:

以下為引用的內容:
if(!$discuz_uid) {
showmessage('not_loggedin', NULL, 'NOPERM');
}

這段的含義是當程序發現訪問者是游客時,自動會提示無權訪問,請登陸的界面,在Discuz! 里面是通過 common.inc.php 做處理,然后給 $discuz_uid 這個變量賦值,當這個變量為空或者為 0 時,程序會認為這個訪問者是游客,否則這個變量將被賦值為該會員的 uid 。和這個變量類似的還有 $discuz_user 這個是用于顯示會員用戶名的,如果為空也說明訪問者為游客。

代碼如下:

$startdate = '2007-02-17'; 開始日期,填寫格式2007-02-17

$enddate = '2007-02-24'; 結束日期,填寫格式2007-02-24

$joincount = 30; 可以參與抽獎的次數

$getcredit = 1; 增加擴展積分1~8

$mincredit = 1; 獲得積分的最小值

$maxcredit = 100; 獲得積分的最大值

這段代碼是一些程序里面用到的設置變量,如果你的插件有后臺程序可以把這些變量放到后臺進行設置,然后寫到數據庫或者緩存為文件。

代碼如下:

以下為引用的內容:
if(empty($getcredit) $getcredit 1 $getcredit 8) {
showmessage('積分設置有問題,請返回修改');
}

這段代碼也是一個提示類型的判斷語句,當不滿足 if 里面的條件時,就會跳到提示頁面,提示:積分設置有問題,請返回修改,大家注意這個的提示語言有“返回”的字樣,這樣我們不需要在填寫提示后返回的頁面。 Showmessage 會自動生成返回上一頁的連接。

代碼如下:

以下為引用的內容:
$starttime = strtotime($startdate) date('Z') - ($timeoffset 3600);
$endtime = strtotime($enddate) date('Z') - ($timeoffset 3600);
if($startdate $enddate) {
showmessage('開始時間大于結束,請返回修改');
} elseif($timestamp $starttime) {
showmessage('活動還沒開始,請返回');
} elseif($timestamp $endtime) {
showmessage('活動已經結束了', 'index.php');
}

這段代碼主要是對抽獎這個活動開始和結束時間做了計算,把標準時間格式轉換為 UNIX 時間戳。并對開始結束時間和當前時間做比較,返回一些錯誤情況的提示信息。

代碼如下:

以下為引用的內容:
$query = $db-query(SELECT COUNT(uid) as joinnum, SUM(credits) as credits
FROM {$tablepre}luck);
$total = $db-fetch_array($query);
$query = $db-query(SELECT count, credits FROM {$tablepre}luck WHERE uid='$discuz_uid');
if($luck = $db-fetch_array($query)) {
$update = 1;
} else {
$update = 0;
}
$remaincount = $joincount - $luck['count'];
$remaincount = $remaincount 0 $remaincount 0;

從這段開始涉及到一些數據庫的查詢,以及根據查詢情況進行一些變量的賦值。例如其中的這句。

代碼如下:

以下為引用的內容:
$query = $db-query(SELECT COUNT(uid) as joinnum, SUM(credits) as credits
FROM {$tablepre}luck);
$total = $db-fetch_array($query);

就是取一下當前抽獎活動參與的任務和送出的總獎金數,并將這個結果生成數組放到$total 里面。

代碼如下:

以下為引用的內容:
if(!submitcheck('lucksubmit', 1)) {
$query = $db-query(SELECT l.credits, l.uid, m.username
FROM {$tablepre}luck l
LEFT JOIN {$tablepre}members m ON m.uid=l.uid
ORDER BY l.credits DESC LIMIT 0, 10);
while($top = $db-fetch_array($query)) {
$toplist[] = $top;
}
include template('luck');
} else {
if($luck['count'] $joincount) {
$query = $db-query(SELECT regdate, posts, digestposts, oltime
FROM {$tablepre}members WHERE uid='$discuz_uid');
$member = $db-fetch_array($query);
$regday = intval(($timestamp - $member['regdate']) 86400);
$lucknum = ($member['digestposts'] 15 $member['post'] 10 $member['oltime'] 5
$regday 5) 100;
$mostcredit = $lucknum $maxcredit $maxcredit intval($lucknum);
$mostcredit = $mostcredit $mincredit $mostcredit $mincredit;
$finalcredit = rand($mincredit, $mostcredit);
$db-query(UPDATE {$tablepre}members SET extcredits$getcredit=extcredits$getcredit
'$finalcredit' WHERE uid='$discuz_uid');
if($update) {
$db-query(UPDATE {$tablepre}luck SET count=count 1, credits=credits '$finalcredit'
WHERE uid='$discuz_uid');
} else {
$db-query(INSERT INTO {$tablepre}luck (uid, count, credits) VALUES ('$discuz_uid', '1',
'$finalcredit'), 'UNBUFFERED');
}
showmessage('恭喜你獲得'.$finalcredit.$extcredits[$getcredit]['title'], 'luck.php');
} else {
showmessage('每人只有'.$joincount.'次抽獎機會,做人不要太貪心啊!', dreferer());
}
}

這段代碼比較長我們把它分為兩部分講解, else 前面為一部分,后面會一部分。 else前面的部分是當 !submitcheck('lucksubmit', 1) 這個條件不滿足的時候,也就是說當用戶沒有提交這個表單的時候,會進行一次數據庫查詢,并生成沒有提交前的界面。

這段代碼有兩點要注意,第一點就是 include template('luck'); 前面一段,這段是從cdb_luck 這個數據表中取得一些需要的數據,首先生成一個數組,然后再把這個數組,循環寫到 $toplist[] 這個數組中,最終形成了一個多維數組,這個數組會在下面的生成模板中生成列表用,其中的 include template('luck'); 就是用 templatesdefaultluck.htm 這個模板生成頁面的語句。

else 后面的部分主要是當用戶點擊提交按鈕后,系統自動判斷提交請求是否合法,當判斷確實合法后會通過一系列的計算,計算出該用戶獲得的分值,并寫入對應的 member 數據表中。并返回成功或者失敗信息。

這個插件的 PHP 部分就講完了,下面我來簡單講一下模板和數據庫部分。

模板文件上面已經說過了,一般會放在 templatesdefault 目錄下,這個插件也不例外。插件的模板和論壇的模板是一樣的,大部分都是由 html 代碼組成的,這里我就不多講了。重點我要講的時候模板中的一些 PHP 語法,了解 Discuz! 系統的人都知道模板在使用前會經過論壇系統自帶的一個模板處理函數進行編譯,生成一個 PHP 文件,放在緩存目錄下,所以在 Discuz! 模板中就會有一些 PHP 的語法,不過這些語法都是一些比較簡單的。在這個插件里面就用帶了一些,下面我和大家具體說說。

其中最常用的就是 if 語句,在模板中的寫法是這樣的:

代碼如下:

以下為引用的內容:
!--{if 變量名稱}--顯示模板!--{else}--顯示模板!--{if}--

這個和 PHP 的 if 語法和用作是一樣的,支持 else 和 elseif 這個是 Discuz! 模板中最常用的一個,也是今后大家做插件模板中最常用到的。

第二個常用到的模板語句: loop ,書寫格式如下


代碼如下:

以下為引用的內容:
!--{loop 數組名稱 key 值 元素名稱}--!--{loop}--

這個和PHP里面的foreach語法和作用是一樣的,主要用于在模板中配合一些 html里面的trli之類的語句,生成一些列表樣式的頁面,比如上文中提到的 $toplist[] 數組,在程序中被賦值后,在模板中通過 loop 循環配合trtdtdtr就生成了一個排行榜的頁面。這個模板語句也是用得比較多的一個

當然模板中還可以用一些其他 PHP 的語句,例如 eval 等,特別要提的還有就是在每個插件里面都會用到的 {template header} 、 {template footer} 這兩個雖然沒有對應的 PHP 語句,不過對應的是前文提到的 template 這個論壇自定義函數,這個函數的作用主要是引用其他模板,在這里主要引用的是,論壇的 header 和 footer 模板。同時這個語句還可以引用其他模板,用法為 {template 模板文件名前綴} 。

模板部分就說這么多了,其實只要知道了這些,一些專門做 html 不懂 PHP 的人稍加學習也可以做 Discuz! 的模板了。

模板和文件說完了,最后來說說這個插件的數據庫,前面已經說到了一些插件數據庫的基本要求,下面結合這個插件具體說說,首先在設計數據庫的時候,要想明白這個數據庫要記錄那些東西,這些東西是字符串類型還是數字類型,如果是字符串類型的最大長度是多少,如果是數字類型的最大和最小值又是多少,那些字段是可以共用的。

結合這個插件我的數據庫是這么設計,需要三個字段 uid 用于存放參與抽獎用戶的 uid ,最大值和論壇用戶表一致,為 mediumint(8) unsigned 。 count 參與抽獎的次數,一般有 255 次就夠了,所以設計成 tinyint(1) unsigned 。最后一個就是 credits 獲得積分,這個也和論壇數據字段一致 int(10) unsigned ,字段設計好了,下面開始設計索引。

索引主要是為了讓數據查詢更快,盡可能少占用 mysql 資源,所以在設計時候首先要想一下我們需要查詢數據表里面那些數據,哪些是我們經常查的。以這個插件為例我們經常要查的就是兩個字段,一個是 uid 和 credits ,因為每次用戶抽獎的時候我們都要查這個用戶參與了幾次抽獎,獲得多少積分,所以肯定要根據用戶的 uid 進行查詢,所以首先我們將 uid設計為主鍵,同時還考慮到我們還要計算所有用戶的總共獲得的分數,所以我們把 credits 設置為索引,這樣以來基本上就可以滿足我們的需要了。當然索引的設計是一門學問,可能在設計過程中還會遇到一些問題,比如聯合索引,索引優化等等。但是只要你把你要查詢的語句想清楚,設計索引也不是一件很困難的事情。

關于索引設置的數量的問題,如果設置的數量過多,將會大大影響數據寫入的速度,所以在設計索引的時候還要想清楚,所設計的這個數據表寫操作和讀操作那個更多,如果寫操作比較頻繁索引一定不要設置過多,否則會事倍功半的。

根據上面的這些東西,最終我設計成數據表導出 SQL 語句如下

代碼如下:

以下為引用的內容:
CREATE TABLE `cdb_luck` (
`uid` mediumint(8) unsigned NOT NULL,
`count` tinyint(1) unsigned NOT NULL default '0',
`credits` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`uid`),
KEY `credits` (`credits`)
) TYPE=MyISAM;

到此為止,一個插件的所有內容就完成了,當然如果你是一個追求完美的人可能還要給插件做上后臺以及安裝界面,接下來的時候就是來 www.discuz.net 的插件區發布了。怎么樣,還不算很復雜吧,我這里只能從技術上告訴大家,至于你的插件能不能受到大家的喜愛還要一個很重要的東西就是創意,別人能想到的東西你能想到,別人想不到的東西你也能想到,這樣你的插件才能受到大家的喜愛。

本次就談到這里,如果你還有什么問題,可以到 www.discuz.net 上找我。希望所有人都能做出讓大家喜愛的插件,謝謝!

來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
相關PHP教程
亚洲 欧美 自拍偷拍| dy888夜精品国产专区| 色婷婷**av毛片一区| 一夜七次郎国产精品亚洲| 在线观看欧美www| 亚洲最新av网址| www.久久撸.com| 97久久久久久| 成人黄色免费在线观看| 成人在线免费网站| 日本在线视频不卡| 国产一二三区在线播放| 天天干天天操天天做| 日本美女视频网站| 手机看片国产日韩| 亚洲国产成人无码av在线| 99在线观看精品视频| 日本aⅴ免费视频一区二区三区 | 久久婷婷综合激情| 亚洲免费观看高清完整版在线观看 | 韩国视频一区二区| 2020国产精品自拍| 午夜久久久久久久久| 91精品免费在线| 日韩在线激情视频| 一级黄色片播放| 日韩精品在线视频观看| 5g国产欧美日韩视频| 日本道色综合久久| 国产日韩在线观看一区| 亚洲一区二区三区四区视频| 亚洲在线色站| 久草视频这里只有精品| free性中国hd国语露脸| 中文字幕中文在线| 91免费公开视频| 久久久久久香蕉| 国产区日韩欧美| 这里只有久久精品| 午夜激情福利电影| 性一交一黄一片| 成人免费看片载| 一本色道综合久久欧美日韩精品| 国产精品一区二| 中文字幕国产精品| 国产精品色悠悠| 91国产视频在线| 国产国产精品人在线视| 福利视频久久| 久久精品一区二区三区av| 久久综合中文字幕| 欧美xxx久久| 国产一区二区精品免费| 成人三级做爰av| 久久久久久久极品| 国产在线拍揄自揄拍| yjizz视频| 国产在线观看免费av| 91丝袜超薄交口足| 在线丝袜欧美日韩制服| 超碰在线国产97| 欧美黑人精品一区二区不卡| 国产ts变态重口人妖hd| 国产精品美女久久久久久久| 国产亚洲成人精品| 高清成人在线观看| 亚洲欧美成人精品| 999热精品视频| 26uuu亚洲综合色| 久久久久久久久久国产| 免费久久久久久| 国产精品入口芒果| 在线成人精品视频| 久久久久久蜜桃| 亚洲男人第一天堂| 少妇高潮一区二区三区69| 国产精品视频一二| 亚洲在线第一页| 4444在线观看| 国内精品卡一卡二卡三| 五月天婷婷导航| 中文字幕人妻精品一区| 亚洲综合一区二区| 国产精品久久久精品| 国产麻豆视频在线观看| 亚洲va欧美va人人爽| 久久精品五月婷婷| 污污网站免费看| 国产精品夜夜夜爽阿娇| 国产精品123区| 亚洲黄色免费三级| 欧美精品xxxxbbbb| 午夜精品理论片| 波多野结衣家庭教师| 天堂成人免费av电影一区| 一区二区在线观看免费视频播放| 亚洲欧美日本另类| 欧美喷潮久久久xxxxx| 欧美久久在线| 一本一道人人妻人人妻αv| 久久综合国产精品台湾中文娱乐网| 国产成人无码专区| 日韩美女中文字幕| 日韩一卡二卡在线观看| 国产精品亚洲专一区二区三区| 欧美日韩中文字幕在线| 91爱视频在线| 无码人妻精品一区二区三| www.日韩高清| 成人精品在线看| 国产一区二区精彩视频| 成人免费毛片男人用品| 亚洲性在线观看| 精品亚洲va在线va天堂资源站| 欧美不卡在线一区二区三区| 国产91丝袜美女在线播放| 国产一区二区三区免费看 | 亚洲欧美在线精品| 日韩精品―中文字幕| 欧美色图另类小说| 伊人成人222| 国产精品一级视频| 精品一区二区三区日韩| 亚洲精品美女在线观看播放| 茄子视频成人免费观看| 日韩码欧中文字| 亚洲第一黄色网| 久久人人看视频| 欧美黑人视频一区| 国产成人极品视频| 国产精品中出一区二区三区| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 久久色视频免费观看| 色悠悠久久88| 一级黄色录像在线观看| 经典一区二区三区| 久久久久久久国产精品视频| 欧美成人三级伦在线观看| www一区二区| 国产精品爱久久久久久久| 国产熟女一区二区| 一区二区三区中文免费| 免费久久久一本精品久久区| 亚洲影院一区二区三区| 亚洲成人aaa| 成人精品小视频| 国产成人福利片| 国产成人拍精品视频午夜网站| 粉嫩精品久久99综合一区| 亚洲国产精品一区二区久久| 奇米影视首页 狠狠色丁香婷婷久久综合| 久久久蜜桃一区二区| 欧美一级xxx| 亚洲色图38p| caoporn国产精品| 亚洲va国产va天堂va久久| 人人草在线观看| 亚洲精品久久久久久久久| 国产成人av免费观看| 亚洲色图欧洲色图婷婷| 神马欧美一区二区| 经典三级在线一区| 91九色蝌蚪国产| 伊人免费在线观看| 久久精品一偷一偷国产| 一级免费黄色录像| 日韩美女天天操| 五月天六月丁香| 一区二区不卡在线播放 | 中文字幕日韩视频| 白白色免费视频| 91传媒视频在线播放| 无码人妻丰满熟妇区五十路百度| 91老司机福利 在线| 久久精品国产99精品国产亚洲性色| 国产视频一区二区三区四区五区| 久久久999成人| 国产一级大片在线观看| 亚洲美女视频网| 美国精品一区二区| 亚洲第一视频网站| 久久视频精品在线观看| 日韩免费一区二区| 三级网站在线免费观看| 日韩一区二区免费视频| 中文字幕 日本| 欧美片网站yy| 国模私拍在线观看| 日韩一级免费一区| 亚洲性猛交xxxx乱大交| 欧美精品一区二区在线播放 | 久久电影网电视剧免费观看| 91嫩草免费看| 美女免费视频一区二区| 国产一区二区无遮挡| 日产欧产美韩系列久久99| 91精品免费| 精品亚洲aⅴ乱码一区二区三区| 91网站免费看| 精品一二线国产| 欧美视频1区| 99在线精品一区二区三区| 色乱码一区二区三区熟女| 久久久久国产成人精品亚洲午夜| 国产精品av免费观看| 国产精品天美传媒| 不卡影院一区二区| 欧美中文字幕一二三区视频| 999精品免费视频| 亚洲а∨天堂久久精品喷水| 一级片一级片一级片| 国产一区二区美女视频| 一级做a爰片久久毛片| 亚洲精品911| 国产黄色高清视频| 欧美一级视频一区二区| 精品黑人一区二区三区在线观看| 成人片在线免费看| 久久久美女毛片| 波多结衣在线观看| 日韩三级电影网址| 免费看一级一片| 无码人妻久久一区二区三区 | 免费 成 人 黄 色| 亚洲五码中文字幕| 韩国三级与黑人| 亚洲激情国产精品| wwwxxx亚洲| 国产精品视频网| 国产乱码精品一区二区三| 日本道在线视频| 在线亚洲一区二区| 免费中文字幕视频| 国产精品久久久久久久久免费看| 国产精品综合一区二区| 欧美黑人经典片免费观看| 欧美日韩国产成人在线91| 欧美日韩国产精品综合| 国产精品va在线播放我和闺蜜| 韩国v欧美v日本v亚洲v| 欧美a在线视频| 欧美不卡在线视频| 亚洲综合一区中| 久久综合一区二区三区| 亚洲视频香蕉人妖| 中文字幕一区二区三区乱码不卡| 日韩中文字幕在线| 久久成人免费网| 天天操天天摸天天爽| 亚洲日本aⅴ片在线观看香蕉| 99精品全国免费观看| 国产不卡av在线免费观看| av一本久道久久综合久久鬼色| 五月婷婷丁香色| 一本色道久久88亚洲综合88| 天天舔天天干天天操| 成人在线观看你懂的| 精品国产乱码久久久久久1区2区| 一区二区视频免费| 亚洲午夜精品国产| 欧美一区二区三区免费在线看| 中文字幕一区二区人妻痴汉电车| 色一情一乱一伦一区二区三区丨| 在线观看国产日韩| 伊人免费在线观看| 男人天堂a在线| 亚洲国产欧美在线成人app| www.久久久久久久久久| 国产乱淫av片杨贵妃| 亚洲欧美福利视频| 久久精品国产网站| 潘金莲一级淫片aaaaa| 97视频在线免费观看| 2023国产精品自拍| 国产特级黄色录像| 91香蕉国产在线观看| 精品久久中文字幕| 中文av免费观看| 日韩xxxx视频| 精品国产一区二区三区久久久狼| 成人免费毛片app| 91在线无精精品白丝| 91精品综合视频| 色综合久久99| 99久久国产热无码精品免费| a在线视频观看| 久久精品国产免费观看| www日韩大片| 久久久精品99| 欧美 另类 交| 色婷婷av一区二区三区在线观看| 波多野结衣视频一区| 91高清免费观看| 亚洲欧美丝袜| 尤物九九久久国产精品的分类| 国产又粗又猛又爽又黄91精品| 久久久久亚洲av无码专区桃色| 国产中文字幕91| 在线播放中文字幕一区| 奇米影视在线99精品| 无遮挡aaaaa大片免费看| 国产亚洲福利社区| 亚洲国产精久久久久久| 成人成人成人在线视频| 精品99久久久久成人网站免费| 一级做a爰片久久| 俺去亚洲欧洲欧美日韩| 亚洲欧洲日本在线| 中文字幕有码无码人妻av蜜桃| 欧美激情精品久久久久久小说| 欧美一级大片在线观看| 婷婷丁香激情综合| 丝袜美腿亚洲一区二区图片| 无码人妻aⅴ一区二区三区69岛| 欧美日韩国产精品一区二区| 亚洲人午夜色婷婷| 亚洲欧美另类小说| 亚洲精品一区二区口爆| 99久久久久久久久久| 一区二区精品在线观看| 欧美黑人性视频| 色视频欧美一区二区三区| 久久精品理论片| 久久久久久蜜桃| 天天干天天综合| 国产精品免费在线| 国产亚洲欧美一区| 亚洲午夜羞羞片| 美女视频第一区二区三区免费观看网站| 网爆门在线观看| 日韩在线一级片| 91丨九色丨国产| 深夜福利一区二区| 色先锋资源久久综合| 国产成人自拍高清视频在线免费播放 | 国产免费视频一区二区三区| 国产污在线观看| 综合一区中文字幕| 日韩美女视频免费看| 亚洲国产三级网| 亚洲国产裸拍裸体视频在线观看乱了| 日本不卡不码高清免费观看| 日韩精品视频免费看| 亚洲一级Av无码毛片久久精品| 亚洲一区二区精品在线| 国产精品白丝jk喷水视频一区| 亚洲精品在线观看网站| 国产精品成人网| 精品一区二区三区免费播放| 久久久久久无码精品大片| 动漫精品一区二区三区| 少妇高潮毛片色欲ava片| 精品日本一区二区三区| 久久久久中文字幕| 亚洲精品美女在线观看| 日韩欧美亚洲范冰冰与中字| 久久久噜噜噜久久人人看| 日韩精彩视频在线观看| 无码人妻av一区二区三区波多野 | 亚洲欧洲一区二区三区久久| 午夜精品久久久久久久久久久 | 欧美少妇性性性| 国产精品福利一区| 粉嫩嫩av羞羞动漫久久久| www.国产精品视频| 国产视频1区2区| 女教师淫辱の教室蜜臀av软件| 男人插女人下面免费视频| 黄色网址在线免费看| **亚洲第一综合导航网站| 97色伦亚洲国产| 日韩在线视频导航| 亚洲精品久久视频| 在线观看亚洲精品视频| 亚洲综合一区在线| 欧美国产禁国产网站cc| 成人自拍视频在线| 美女网站在线免费欧美精品| 天天干,夜夜爽| 999国产精品视频免费| 综合激情网五月| 欧美一区二区三区爽爽爽| 国产特黄级aaaaa片免| 精人妻一区二区三区| 天堂视频免费看| 久热免费在线观看| 欧美成人xxxxx| 91九色丨porny丨国产jk| 一区二区在线观| 日韩在线观看电影完整版高清免费| 成人自拍爱视频| 国产日韩精品入口| 国产欧美日韩丝袜精品一区| 国产成人精品视| 国产成人精品在线观看| 日韩av色综合| 日本不卡视频在线播放| 日本伊人精品一区二区三区介绍| 欧美精品videos| 欧美精品第一页在线播放| 欧美肥婆姓交大片| 精品自在线视频| 久久亚洲精品毛片| 久久精品国产91精品亚洲| 影音先锋欧美精品| 色悠悠久久久久| 欧美激情中文网| 国产成人精品a视频一区www| 国产精品稀缺呦系列在线 | 欧美成人三级电影在线|