欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[導入]一個無限分類處理類

系統 2147 0
PHP代碼 :-------------------------------------------------------------------------------- ?

<? php?
/* ?名稱:?對分類操作的業務邏輯封裝?

*?說明:?本類中引用的其它類(DB、Table、Item)均未提供,所以本類只能做個參考,不能直接應用?
*?不是本人小氣不提供其它類,實在是因為那些都是一兩年前寫的類,很爛。怕大家看后對大?
*?造成誤導.?在此發表這個類,只希望大家能從中學到一些程序設計的方法。?

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

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

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

class ?Category_Logic?
{?
var ? $KernelRef ? = ? NULL ;? // 系統核心的引用?
var ? $tblObj ? = ? NULL ;? // 包含當前分類數據?Table?類的實例?

var ? $_CurrentItem ? = ? NULL ;? // 包含當前分類數據?TItem類的實例?

var ? $CategoryID ? = ? 0 ;? // 當前分類ID,如果沒有當前分類此項為?0?

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

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?=?'')?
//?根據一顆指定根的并且以兄弟雙親法表示的樹和當前分類的ID,返回當前分類在整個分類表中所處的位置?
//?
//?@param:?$Data?兄弟雙親法表示的樹,?由調用者傳遞?
//?
//?@param:?$Current?當前分類ID,第一次調用時由調用者給出,遞歸時由程序自行計算?
//?
//?@param:?$ProcessFunc?指定對分類數據的處理函數,?函數原型定義見?$this->PrintCurrentLevel?中的注釋?
//?
//?return?value:?返回當前分類在分類樹中的位置?
//?注意:?確保當前分類已經設置,否則此函數無返回?
//?
//---------------------------------------------------------------------------?

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)?
//?本類構造函數?
//?
//?@param:?$Kernel?此參數為當前系統核心類的一個引用,?核心類中包括?
//?數據庫類、輸入輸出類、系統配置類等?
//?
//?@param:?$CategoryID?當前分類ID。?
//?當想調用?PrintCurrentLevel、GetRootID、GetParentID、GenerateTypeTreeList及?
//?調用_CurrentItem成員的方法時請先設置此值.?
//?
//?調用GenerateTypeTreeList時設置此值,則沒有ID為此的分類默認被選擇,沒設置則無默認?
//?
//?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)?
//?設置當前分類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()?
//?返回當前分類的根分類ID?
//?注意:只有設置的當前分類時此函數才有效?
//?
//?return?value:?返回當前分類的根分類ID?
//?
//---------------------------------------------------------------------------?

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

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

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


// ---------------------------------------------------------------------------?
//public?String?GenerateTypeTreeList(array?$Data,?String?$ProcessFunc,?int?$floor?=?0)?
//?返回整個分類的樹狀結構放在OptionList中的列表?
//?
//?@param:?$Data?此參數由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調函數,?函數原型請參照:?$this->PrintCurrentLevel()?
//?
//?@param:?$floor?本參數不能人為給出,是程序自動計算的中間值?
//?
//?return?value:?
//?結構為一顆兄弟雙親表示法表示的樹?
//?設如分類數據如下:?
//?├──1級分類?
//?│?
//?│?
//?│?
//?├─2級分類?
//?│?│?
//?│?└─3級分類?
//?│?
//?└─2級分類?
//?
//?則返回值為?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)?
//?返回整個分類的樹狀結構放在OptionList中的列表?
//?
//?@param:?$Data?此參數由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調函數,?函數原型請參照:?$this->PrintCurrentLevel()?
//?
//?@param:?$floor?本參數不能人為給出,是程序自動計算的中間值?
//?
//?return?value:?返回一個<option>分類名稱1</option>? ?<option>分類名稱n</option>?
//?
//?ps:?調用時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?=?'')?
//?返回整個分類的樹狀結構視圖?
//?
//?@param:?$Data?此參數由?$this->DumpTypeDataToTree()?返回?
//?
//?@param:?$ProcessFunc?處理顯示分類信息的回調函數,?函數原型請參照:?$this->PrintCurrentLevel()?
//?
//?return?value:?返回生成的一顆HTML形式顯示的樹?
//?
//---------------------------------------------------------------------------?

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

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?在此數組中包括對新添加分類的定義,?定義如下:?
//?
//?$arr['RootID']?新分類所屬的根分類ID?
//?$arr['ParentID']?新分類的父分類ID?
//?$arr['CategoryName']?新分類的名稱?
//?
//?return?value:?返回添加分類操作結果?
//?
//---------------------------------------------------------------------------?

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)?
//?刪除已經存在的分類?
//?
//?@param:?$ID?要刪除的分類ID?
//?
//?return?value:?返回刪除分類操作結果?
//?
//---------------------------------------------------------------------------?

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)?
//?修改已經存在的分類?
//?
//?@param:?$ID?要修改的分類ID?
//?@param:?$arr?在此數組中包括修改后的分類定義,?定義如下:?
//?
//?$arr['RootID']?新分類所屬的根分類ID?
//?$arr['ParentID']?新分類的父分類ID?
//?$arr['CategoryName']?新分類的名稱?
//?
//?return?value:?返回修改分類操作結果?
//?
//---------------------------------------------------------------------------?

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)?
//?修改已經存在的分類?
//?
//?@param:?$ID?指定的分類ID?
//?
//?return?value:?返回指定ID分類的信息?
//?數組中包括:?
//?Array(?
//?'ID'?=>?分類ID,?
//?'ParentID'?=>?父分類ID,?
//?'RootID'?=>?根分類ID,?
//?'CategoryName'?=>?分類名稱,?
//?);?
//?
//---------------------------------------------------------------------------?

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

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



文章來源: http://www.phpweblog.net/susam119/archive/2007/12/19/2573.html

[導入]一個無限分類處理類


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色版网站 | 欧美精品播放 | 先锋资源站 | 天天操天天插 | 九色九色九色在线综合888 | 嫩嫩草网站 | 欧美日韩亚洲国内综合网俺 | 我把寡妇日出水好爽视频 | 天天爽天天干天天操 | 亚洲国产aⅴ成人精品无吗 国内成人自拍视频 | 成人黄页在线观看 | 男女作爱免费网站 | 黄在线免费观看 | 久久天天拍天天爱天天躁 | 成人亚洲A片V一区二区三区婷婷 | 国产福利视频 | 亚洲永久精品国产 | 国产精品亚洲片在线观看不卡 | 国产女主播在线 | 天堂资源av | 日本老妇人乱视频 | 天天在线欧美精品免费看 | 亚洲男人天堂2021 | 婷婷在线视频 | 在线一区观看 | 久草精品视频在线观看 | 天天操一操 | 日韩欧美一区在线观看 | 97婷婷狠狠成人免费视频 | va在线播放 | 免费性| 天堂一区二区三区 | 男女性刺激爽爽免费视频 | 国产欧美日韩一区二区三区四区 | 国产成人一区二区 | 爱人同志国语免费观看全集 | 日韩在线国产精品 | 国产精品99久久 | 色综合天天综一个色天天综合网 | 九九这里只有精品视频 | 国产色综合一区二区三区 |