亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[導(dǎo)入]一個(gè)無(wú)限分類處理類

系統(tǒng) 2082 0
PHP代碼 :-------------------------------------------------------------------------------- ?

<? php?
/* ?名稱:?對(duì)分類操作的業(yè)務(wù)邏輯封裝?

*?說(shuō)明:?本類中引用的其它類(DB、Table、Item)均未提供,所以本類只能做個(gè)參考,不能直接應(yīng)用?
*?不是本人小氣不提供其它類,實(shí)在是因?yàn)槟切┒际且粌赡昵皩懙念?,很爛。怕大家看后對(duì)大?
*?造成誤導(dǎo).?在此發(fā)表這個(gè)類,只希望大家能從中學(xué)到一些程序設(shè)計(jì)的方法。?

*?特點(diǎn):?
*?采用遞歸調(diào)用的方法,對(duì)分類數(shù)據(jù)只需一次數(shù)據(jù)庫(kù)查詢可生成樹(shù)狀結(jié)構(gòu)。?無(wú)限遞歸層次(視機(jī)器堆棧而定)?
*?
*?數(shù)據(jù)庫(kù)定義:?
*?ID?smallint?unsigned?primary?#如果數(shù)據(jù)量很大可用int?
*?ParentID?smallint?unsigned?index?#如果數(shù)據(jù)量很大可用int,?請(qǐng)索引此字段?
*?#如果為根分類,則ParentID?=?0?
*?
*?RootID?smallint?unsigned?index?#如果數(shù)據(jù)量很大可用int,?請(qǐng)索引此字段?
*?#如果是根分類則RootID?=?0,?否則RootID?=?最上層的父分類ID?
*?CategoryName?varchar(n)?#此大小自定?
*?如需有其它字段定義附在后面?

*?注意事項(xiàng):?
*?不要試圖直接調(diào)用本類,除非你有和我定義那另外那幾個(gè)類相對(duì)應(yīng)的接口,?否則不會(huì)成功?
*?在合適的地方定義?DBTABLE_CATEGORY?這個(gè)常量?190-711?190-721??,使其指向你的分類數(shù)據(jù)表名字?
*?
*?程序構(gòu)架:?
*?├─基礎(chǔ)類?<!--?完成底層數(shù)據(jù)庫(kù)操作、數(shù)據(jù)抽象、語(yǔ)言、模板、異常、雜項(xiàng)等)操作?-->?
*?│?
*?│?
*?└─業(yè)務(wù)邏輯層(此類所處層次)?<!--?利用基礎(chǔ)類中數(shù)據(jù)操作、數(shù)據(jù)抽象等類根據(jù)表現(xiàn)層傳遞的參數(shù)完成數(shù)據(jù)處理,并返回?cái)?shù)據(jù)或操作結(jié)果?-->?
*?│?
*?│?
*?└───表現(xiàn)層(用戶界面)?<!--?利用業(yè)務(wù)邏輯層將取得的數(shù)據(jù)或操作數(shù)據(jù)的結(jié)果通過(guò)基礎(chǔ)類中的界面等類進(jìn)行顯示?-->?
*/ ?

define ( ' DBTABLE_CATEGORY ' , ? ' xxx ' );?

class ?Category_Logic?
{?
var ? $KernelRef ? = ? NULL ;? // 系統(tǒng)核心的引用?
var ? $tblObj ? = ? NULL ;? // 包含當(dāng)前分類數(shù)據(jù)?Table?類的實(shí)例?

var ? $_CurrentItem ? = ? NULL ;? // 包含當(dāng)前分類數(shù)據(jù)?TItem類的實(shí)例?

var ? $CategoryID ? = ? 0 ;? // 當(dāng)前分類ID,如果沒(méi)有當(dāng)前分類此項(xiàng)為?0?

//---------------------------------------------------------------------------?
//private?array?GetNodeData(array?$Data,?int?$ParentNode)?
//?根據(jù)一顆指定根的并且以兄弟雙親法表示的樹(shù)和當(dāng)前分類的ID,返回當(dāng)前分類在整個(gè)分類表中所處的位置?
//?
//?@param:?$Data?2維數(shù)組?Array(?
//?Array(?
//?'ID'?=>?分類ID,?
//?'ParentID'?=>?父分類ID,?
//?'RootID'?=>?根分類ID,?
//?'CategoryName'?=>?分類名稱,?
//?),?
//?……?
//?);?
//?表示的一顆樹(shù)?
//?
//?@param:?$ParentNode?父分類ID,?每一次由調(diào)用者給出,遞歸時(shí)由程序計(jì)算傳遞?
//?
//?return?value:?返回以兄弟雙親法表示的所有分類的樹(shù)?
//?注意:?確保當(dāng)前分類已經(jīng)設(shè)置,否則此函數(shù)無(wú)返回?
//?
//---------------------------------------------------------------------------?

function ?GetNodeData( $Data , ? $ParentNode )?
{?
$arr ? = ? Array ();?

$ArrayCount ? = ? 0 ;?

for ( $i ? = ? 0 , ? $cnt ? = ? Count ( $Data );? $i ? < ? $cnt ;? $i ++ )?
{?
if ( $Data [ $i ][ ' ParentID ' ]? == ? $ParentNode )?
{?
$arr [ $ArrayCount ]? = ? $Data [ $i ];?
$arr [ $ArrayCount ++ ][ ' Child ' ]? = ? $this -> GetNodeData( $Data , ? $Data [ $i ][ ' ID ' ]);?
}?
}?

return ? $arr ;?
}?

// ---------------------------------------------------------------------------?
//private?String?_CurrentLevel(array?$Data,?int?$Current,?String?$ProcessFunc?=?'')?
//?根據(jù)一顆指定根的并且以兄弟雙親法表示的樹(shù)和當(dāng)前分類的ID,返回當(dāng)前分類在整個(gè)分類表中所處的位置?
//?
//?@param:?$Data?兄弟雙親法表示的樹(shù),?由調(diào)用者傳遞?
//?
//?@param:?$Current?當(dāng)前分類ID,第一次調(diào)用時(shí)由調(diào)用者給出,遞歸時(shí)由程序自行計(jì)算?
//?
//?@param:?$ProcessFunc?指定對(duì)分類數(shù)據(jù)的處理函數(shù),?函數(shù)原型定義見(jiàn)?$this->PrintCurrentLevel?中的注釋?
//?
//?return?value:?返回當(dāng)前分類在分類樹(shù)中的位置?
//?注意:?確保當(dāng)前分類已經(jīng)設(shè)置,否則此函數(shù)無(wú)返回?
//?
//---------------------------------------------------------------------------?

function ?_CurrentLevel( $Data , ? $Current , ? $ProcessFunc ? = ? '' )?
{?
for ( $i ? = ? 0 ;? $i ? < ? Count ( $Data );? $i ++ )?
{?
if ( $Data [ $i ][ ' ID ' ]? == ? $Current )?
{?
if ( $Data [ $i ][ ' ParentID ' ]? != ? 0 )?
{?
$str ? = ? $this -> _CurrentLevel( $Data , ? $Data [ $i ][ ' ParentID ' ] , ? $ProcessFunc )? . ? ' ?-&gt;? ' ;?

if ( $ProcessFunc )? $str ? .= ? $ProcessFunc ( $Data [ $i ]);?
else ? $str ? .= ? $Data [ $i ][ ' CategoryName ' ];?
}?
else ?
{?
if ( $ProcessFunc )? $str ? = ? $ProcessFunc ( $Data [ $i ]);?
else ? $str ? = ? $Data [ $i ][ ' CategoryName ' ];?
}?
break ;?
}?
}?

return ? $str ;?
}?

// ---------------------------------------------------------------------------?
//public?Category_Logic(Object?&$Kernel,?int?$CategoryID?=?-1)?
//?本類構(gòu)造函數(shù)?
//?
//?@param:?$Kernel?此參數(shù)為當(dāng)前系統(tǒng)核心類的一個(gè)引用,?核心類中包括?
//?數(shù)據(jù)庫(kù)類、輸入輸出類、系統(tǒng)配置類等?
//?
//?@param:?$CategoryID?當(dāng)前分類ID。?
//?當(dāng)想調(diào)用?PrintCurrentLevel、GetRootID、GetParentID、GenerateTypeTreeList及?
//?調(diào)用_CurrentItem成員的方法時(shí)請(qǐng)先設(shè)置此值.?
//?
//?調(diào)用GenerateTypeTreeList時(shí)設(shè)置此值,則沒(méi)有ID為此的分類默認(rèn)被選擇,沒(méi)設(shè)置則無(wú)默認(rèn)?
//?
//?return?value:?none?
//?
//---------------------------------------------------------------------------?

function ? & Category_Logic( & $Kernel , ? $CategoryID ? = ? - 1 )?
{?
$this -> KernelRef? = ? & $Kernel ;?

$this -> tblObj? = ? new ?Table( $Kernel -> DBObj , ?DBTABLE_CATEGORY);?

if ( $CategoryID ? != ? - 1 )?
{?
$this -> SetCategoryID( $CategoryID );?
}?
}?

// ---------------------------------------------------------------------------?
//public?void?SetCategoryID(int?$CategoryID)?
//?設(shè)置當(dāng)前分類ID?
//?
//?return?value:?none?
//?
//---------------------------------------------------------------------------?

function ?SetCategoryID( $CategoryID )?
{?
if ( ! $CategoryID )? return ;?

$Item ? = ? new ?TItem( $this -> KernelRef -> DBObj , ?DBTABLE_CATEGORY , ? ' * ' , ? $CategoryID ? , ' ID ' );?

$this -> _SelfData? = ? & $Item ;?

$this -> CategoryID? = ? $CategoryID ;?
}?

// ---------------------------------------------------------------------------?
//public?int?GetRootID()?
//?返回當(dāng)前分類的根分類ID?
//?注意:只有設(shè)置的當(dāng)前分類時(shí)此函數(shù)才有效?
//?
//?return?value:?返回當(dāng)前分類的根分類ID?
//?
//---------------------------------------------------------------------------?

function ?GetRootID()?
{?
return ? $this -> _SelfData -> Get( ' RootID ' );?
}?

// ---------------------------------------------------------------------------?
//public?int?GetParentID()?
//?返回當(dāng)前分類的父分類ID?
//?注意:只有設(shè)置的當(dāng)前分類時(shí)此函數(shù)才有效?
//?
//?return?value:?返回當(dāng)前分類的父分類ID?
//?
//---------------------------------------------------------------------------?

function ?GetParentID()?
{?
if ( $this -> CategoryID)? return ? $this -> _SelfData -> Get( ' ParentID ' );?
}?


// ---------------------------------------------------------------------------?
//public?String?GenerateTypeTreeList(array?$Data,?String?$ProcessFunc,?int?$floor?=?0)?
//?返回整個(gè)分類的樹(shù)狀結(jié)構(gòu)放在OptionList中的列表?
//?
//?@param:?$Data?此參數(shù)由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調(diào)函數(shù),?函數(shù)原型請(qǐng)參照:?$this->PrintCurrentLevel()?
//?
//?@param:?$floor?本參數(shù)不能人為給出,是程序自動(dòng)計(jì)算的中間值?
//?
//?return?value:?
//?結(jié)構(gòu)為一顆兄弟雙親表示法表示的樹(shù)?
//?設(shè)如分類數(shù)據(jù)如下:?
//?├──1級(jí)分類?
//?│?
//?│?
//?│?
//?├─2級(jí)分類?
//?│?│?
//?│?└─3級(jí)分類?
//?│?
//?└─2級(jí)分類?
//?
//?則返回值為?Array(?
//?0?=>?Array(?
//?'ID'?=>?'',?
//?'ParentID'?=>?'',?
//?'RootID'?=>?'',?
//?'CategoryName'?=>?'',?
//?'Child'?=>? .?
//?)?
//? ..?
//?)?
//?
//---------------------------------------------------------------------------?

function ?DumpTypeDataToTree( $RootID ? = ? 0 , ? $Fields ? = ? ' * ' )?
{?
$this -> tblObj -> SetFields( $Fields );?
$this -> tblObj -> SetCondition( '' );?

$List ? = ? $this -> tblObj -> MapResult( $this -> tblObj -> Select());?

return ? $this -> GetNodeData( $List , ? $RootID );?
}?

// ---------------------------------------------------------------------------?
//public?String?GenerateTypeTreeList(array?$Data,?String?$ProcessFunc?=?'',?int?$floor?=?0)?
//?返回整個(gè)分類的樹(shù)狀結(jié)構(gòu)放在OptionList中的列表?
//?
//?@param:?$Data?此參數(shù)由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調(diào)函數(shù),?函數(shù)原型請(qǐng)參照:?$this->PrintCurrentLevel()?
//?
//?@param:?$floor?本參數(shù)不能人為給出,是程序自動(dòng)計(jì)算的中間值?
//?
//?return?value:?返回一個(gè)<option>分類名稱1</option>? ?<option>分類名稱n</option>?
//?
//?ps:?調(diào)用時(shí)echo?"<select?name='xxxx'>"?.?$_c->GenerateTypeTreeList($Data,?'ProcessFunc')?.?"</select>";?
//?
//---------------------------------------------------------------------------?

function ?GenerateTypeTreeList( $Data , ? $ProcessFunc , ? $floor ? = ? 0 )?
{?
$Str ? = ? '' ;?
for ( $i ? = ? 0 , ? $cnt ? = ? Count ( $Data );? $i ? < ? $cnt ;? $i ++ )?
{?
if ( $this -> CategoryID? == ? $Data [ $i ][ ' ID ' ])?
{?
$Str ? .= ? " <option?value='{$Data[$i]['ID']}'?selected> " ?
. ? str_repeat ( " &nbsp; " , ? $floor ? * ? 3 )?
. ? ' ' ?
. ?( $ProcessFunc ? ? ? $ProcessFunc ( $Data [ $i ])? : ? $Data [ $i ][ ' CategoryName ' ])?
. ? " </option>\n " ;?
}?
else ?
{?
$Str ? .= ? " <option?value='{$Data[$i]['ID']}'> " ?
. ? str_repeat ( " &nbsp; " , ? $floor ? * ? 3 )?
. ? ' ' ?
. ?( $ProcessFunc ? ? ? $ProcessFunc ( $Data [ $i ])? : ? $Data [ $i ][ ' CategoryName ' ])?
. ? " </option>\n " ;?
}?

if ( $Data [ $i ][ ' Child ' ])? $Str ? .= ? $this -> GenerateTypeTreeList( $Data [ $i ][ ' Child ' ] , ? $ProcessFunc , ? $floor ? + ? 1 );?
}?

return ? $Str ;?
}?

// ---------------------------------------------------------------------------?
//public?String?GenerateTypeTreeView(array?$Data,?String?$ProcessFunc?=?'')?
//?返回整個(gè)分類的樹(shù)狀結(jié)構(gòu)視圖?
//?
//?@param:?$Data?此參數(shù)由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調(diào)函數(shù),?函數(shù)原型請(qǐng)參照:?$this->PrintCurrentLevel()?
//?
//?return?value:?返回生成的一顆HTML形式顯示的樹(shù)?
//?
//---------------------------------------------------------------------------?

function ?GenerateTypeTreeView( $Data , ? $ProcessFunc )?
{?
$Str ? = ? ' <ul?style="Line-Height:200%"> ' ;?

for ( $i ? = ? 0 , ? $cnt ? = ? Count ( $Data );? $i ? < ? $cnt ;? $i ++ )?
{?
if ( $ProcessFunc )? $Str ? .= ? ' <li> ' ? . ? $ProcessFunc ( $Data [ $i ])? . ? ' </li> ' ? . ? " \n " ;?
else ? $Str ? .= ? ' <li> ' ? . ? $Data [ $i ][ ' CategoryName ' ]? . ? ' </li> ' ? . ? " \n " ;?

if ( $Data [ $i ][ ' Child ' ])? $Str ? .= ? ' <li> ' ? . ? $this -> GenerateTypeTreeView( $Data [ $i ][ ' Child ' ] , ? $ProcessFunc )? . ? ' </li> ' ;?
}?

$Str ? .= ? ' </ul> ' ;?

return ? $Str ;?
}?

// ---------------------------------------------------------------------------?
//public?String?PrintCurrentLevel(String?$ProcessFunc?=?'')?
//?對(duì)多級(jí)分類生成當(dāng)前位置字符串?
//?設(shè)如分類數(shù)據(jù)如下,當(dāng)前分類為3級(jí)分類,?則調(diào)用返回?1級(jí)分類?->?2級(jí)分類?->?3級(jí)分類?
//?├──1級(jí)分類?
//?│?
//?│?
//?│?
//?├─2級(jí)分類?
//?│?│?
//?│?└─3級(jí)分類?
//?│?
//?└─2級(jí)分類?
//?
//?
//?
//?
//?@param:?$ProcessFunc?此為對(duì)分類數(shù)據(jù)如何顯示的回調(diào)函數(shù),不設(shè)置則直接顯示分類名稱?
//?函數(shù)定義原型為?function?(&$arr);?
//?其中$arr參數(shù)為每一個(gè)分類信息的一維數(shù)組如下:?
//?array(ID?=>?1,?ParentID?=>?0,?RootID?=>?0,?CategoryName?=>?'1級(jí)分類')?
//?返回值為對(duì)上述數(shù)據(jù)處理的結(jié)果,比如返回帶鏈接的分類名字、更改顯示顏色等?
//?
//?return?value:?返回當(dāng)前分類在整個(gè)分類樹(shù)中所處位置?
//?
//---------------------------------------------------------------------------?

function ?PrintCurrentLevel( $ProcessFunc ? = ? '' )?
{?
if ( ! $this -> CategoryID)? return ? '' ;?

if ( $this -> _SelfData -> Get( " RootID " )? == ? 0 )?
{?
if ( $ProcessFunc )? return ? $ProcessFunc ( $this -> _SelfData -> fetchDataToArray());?
else ? return ? $this -> _SelfData -> Get( " CategoryName " );?
}?

$Current ? = ? $this -> CategoryID;?

$this -> tblObj -> SetCondition( ' RootID?=? ' ? . ? $this -> _SelfData -> Get( ' RootID ' )? . ? " ?or?ID?=? " ? . ? $this -> _SelfData -> Get( ' RootID ' ));?

$Data ? = ? $this -> tblObj -> MapResult( $this -> tblObj -> Select());?

return ? $this -> _CurrentLevel( $Data , ? $Current , ? $ProcessFunc );?
}?

// ---------------------------------------------------------------------------?
//public?boolean?Add(array?$arr)?
//?添加新分類到分類表中?
//?
//?@param:?$arr?在此數(shù)組中包括對(duì)新添加分類的定義,?定義如下:?
//?
//?$arr['RootID']?新分類所屬的根分類ID?
//?$arr['ParentID']?新分類的父分類ID?
//?$arr['CategoryName']?新分類的名稱?
//?
//?return?value:?返回添加分類操作結(jié)果?
//?
//---------------------------------------------------------------------------?

function ?Add( $arr )?
{?
$this -> tblObj -> SetFields(?
Array (?
' RootID ' , ?
' ParentID ' , ?
' CategoryName ' , ?
)?
);?

return ? $this -> tblObj -> Insert(?
Array (?
$arr [ ' RootID ' ] , ?
$arr [ ' ParentID ' ] , ?
$arr [ ' CategoryName ' ] , ?
)?
);?
}?

// ---------------------------------------------------------------------------?
//public?boolean?Delete(int?$ID)?
//?刪除已經(jīng)存在的分類?
//?
//?@param:?$ID?要?jiǎng)h除的分類ID?
//?
//?return?value:?返回刪除分類操作結(jié)果?
//?
//---------------------------------------------------------------------------?

function ?Delete( $ID )?
{?
$sysOption ? = ? & $this -> KernelRef -> Config;?

$this -> tblObj -> SetFields( ' * ' );?
$this -> tblObj -> SetCondition( ' ID?=? ' ? . ?(int) $ID );?

return ? $this -> tblObj -> Delete();?
}?

// ---------------------------------------------------------------------------?
//public?boolean?Modify(int?$ID,?array?$arr)?
//?修改已經(jīng)存在的分類?
//?
//?@param:?$ID?要修改的分類ID?
//?@param:?$arr?在此數(shù)組中包括修改后的分類定義,?定義如下:?
//?
//?$arr['RootID']?新分類所屬的根分類ID?
//?$arr['ParentID']?新分類的父分類ID?
//?$arr['CategoryName']?新分類的名稱?
//?
//?return?value:?返回修改分類操作結(jié)果?
//?
//---------------------------------------------------------------------------?

function ?Modify( $ID , ? $arr )?
{?
$this -> tblObj -> SetCondition( ' ID?=? ' ? . ?(int) $ID );?

$prev ? = ? $this -> tblObj -> MapOneRow( $this -> tblObj -> Select());?

$this -> tblObj -> SetFields(?
Array (?
' RootID ' , ?
' ParentID ' , ?
' CategoryName ' , ?
)?
);?

return ? $this -> tblObj -> Update( $arr );?
}?

// ---------------------------------------------------------------------------?
//public?array?Modify(int?$ID)?
//?修改已經(jīng)存在的分類?
//?
//?@param:?$ID?指定的分類ID?
//?
//?return?value:?返回指定ID分類的信息?
//?數(shù)組中包括:?
//?Array(?
//?'ID'?=>?分類ID,?
//?'ParentID'?=>?父分類ID,?
//?'RootID'?=>?根分類ID,?
//?'CategoryName'?=>?分類名稱,?
//?);?
//?
//---------------------------------------------------------------------------?

function ?GetCategory( $ID )?
{?
$this -> tblObj -> SetCondition( ' ID?=? ' ? . ?(int) $ID );?

return ? $this -> tblObj -> MapOneRow( $this -> tblObj -> Select());?
}?
}?
?> ?



文章來(lái)源: http://www.phpweblog.net/susam119/archive/2007/12/19/2573.html

[導(dǎo)入]一個(gè)無(wú)限分類處理類


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产自产拍精品视频免费看 | 日本精品久久久久中文字幕2 | 久久精品美女 | 久久婷婷国产综合精品 | 成人欧美一区二区三区白人 | 国产成人精品高清在线观看99 | 麻豆一区二区 | 成 人 黄 色 大 片 | 视色视频 | 亚洲香蕉在线观看 | 成人性生交大片免费看午夜a | 亚洲综合网站 | 在线观看一级毛片免费 | 一区二区在线播放福利视频 | 狠狠影视 | 久久频精品99香蕉国产 | 成人免费久久精品国产片久久影院 | 丁香婷婷影音先锋5566 | 91资源| 国产一区二区三区免费视频 | 成人特黄午夜性a一级毛片 成人特级毛片69免费观看 | 亚洲午夜视频在线 | 99re热精品视频国产免费 | 免费在线视频一区 | 日韩欧美成末人一区二区三区 | 深夜福利成人 | 欧美精品久久 | 久久久99精品久久久 | 91精品免费国产高清在线 | 日本成a人免费视频 | 男人都懂的网址 | 香蕉国产人午夜视频在线 | 久久女人 | 人人看人人鲁狠狠高清 | 站长推荐国产精品视频 | 搡的我好爽视频在线观看 | 精品一区二区在线欧美日韩 | 欧美一区二区在线观看视频 | 欧美日韩久久毛片 | 狠狠骑 | 日本在线不卡免 |