PHP コード:---------------------------------------------- -- ----------------------------------
/* 名前: ビジネス ロジック分類操作 パッケージ
*
* 著者: イケメンのようなクズ QQ: 1191391 E-mail: netcat2@21cn.com
*
* 完了日: 2003-12-18 13:33
*
* 説明: このカテゴリーで参照されています その他クラス(DB、Table、Item)は提供されていないため、このクラスは参照としてのみ使用でき、直接適用することはできません
* 他のクラスを提供しないのはケチというわけではありません。 2年前、とても混乱しています。読んだ後に皆さんが誤解されるのではないかと心配です
* このクラスをここで公開し、皆さんがそこからプログラミング手法を学んでいただければ幸いです。
* 人間に魚の釣り方を教えることは、魚の釣り方を教えることよりも悪いです~
*
* 特徴:
* 再帰的呼び出し方法を使用すると、分類されたデータのツリー構造を生成するために必要なデータベース クエリは 1 つだけです。 無制限の再帰レベル (マシンスタックに応じて)
*
* データベース定義:
* ID smallint unsigned Primary #データ量が多い場合は int が利用可能
* ParentID smallint unsigned Index #データ量が多い場合、 int が利用可能です。このフィールドにインデックスを付けてください
* #ルートカテゴリの場合は、ParentID = 0
*
* RootID smallint unsignedindex #データ量が多く、int が利用可能な場合は、このフィールドにインデックスを付けてください
* #ルート カテゴリの場合は RootID = 0、それ以外の場合は RootID = 最上位の親カテゴリ ID
* categoryName varchar(n) #このサイズはカスタマイズされます
* 他のフィールド定義がある場合は、後で添付してください
* 注:
* これらのクラスに対応するインターフェイスを定義していない限り、このクラスを直接呼び出さないでください。そうしないと成功しません
* 分類の名前を指すように、適切な場所で定数 DBTABLE_CATEGORY を定義します。データテーブル
*
* プログラム構造:
* §─基本クラス
* │
* │
* └─ビジネスロジック層(この型が存在するレベル)
* │
* │
* └───プレゼンテーション層(ユーザーインターフェース) <- ビジネスロジック層を使用して、取得したデータやデータを操作した結果をインターフェースなどで表示します。基本クラスのクラス -->
*/
define('DBTABLE_CATEGORY', 'xxx');
class category_Logic
{
var $KernelRef = NULL; //システムのコアへの参照
var $ tblObj = NULL; //現在の機密データ Table のインスタンスが含まれます
var $_CurrentItem = NULL //現在の機密データ TItem のインスタンスが含まれます
var $CategoryID = 0;現在のカテゴリがない場合、この項目は 0 です
//------------------------------------- ---------- --------------------------------------
//プライベート配列 GetNodeData(array $Data , int $ParentNode)
// 指定されたルートを持つツリーに基づいて、兄弟メソッドと現在のカテゴリの ID で表され、カテゴリ テーブル全体における現在のカテゴリの位置を返します
//
// @param : $Data 2次元配列 Array(
// Array(
// 'ID' => カテゴリID,
// 'ParentID' => 親カテゴリID,
// ' RootID' => ルートカテゴリID,
// 'CategoryName' => カテゴリ名,
// ),
// ...
// );
// ツリーを表します
//
// @param: $ParentNode 親カテゴリ ID 、毎回呼び出し元によって与えられ、再帰中にプログラムによって計算されて渡されます
//
// 戻り値: 兄弟メソッドによって表されるすべてのカテゴリのツリーを返します
// 注: 現在のカテゴリが設定されていることを確認してくださいそれ以外の場合、この関数は戻りません
//
//--------------------------------- --- -------------------------------------
関数 GetNodeData($Data, $ParentNode)
{
$arr = Array();
$ArrayCount = 0;
for($i = 0, $cnt = Count($Data); $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 は、最初の呼び出し時に呼び出し元によって与えられます。
//
// @param: $ProcessFunc は、カテゴリの処理関数を指定します。データについては、関数プロトタイプの定義を参照してください。 $this-> ;PrintCurrentLevel のコメント
//
// 戻り値: 分類ツリー内の現在のカテゴリの位置を返します
// 注: 現在のカテゴリが設定されていることを確認してください。それ以外の場合、この関数は戻り値を持ちません
//
//----- -------------------------------- ---------- --------------------
function _CurrentLevel($Data, $Current, $ProcessFunc = '')
{
for($i = 0; $i
if($Data[$i]['ID'] == $Current)
{
if($Data[$i]['ParentID'] != 0)
{
$str = $this->_CurrentLevel($Data, $Data[$i]['ParentID'], $ProcessFunc) 。 ' -> ';
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 のカテゴリはありません。デフォルトで選択されています。設定されていない場合、デフォルトはありません
//
// 戻り値: none
//
//----------- -------------------------------------------------------- --------------
関数 &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を設定します
//
//戻り値: 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 を返します
// 注意: 設定されているもののみ この関数は現在のカテゴリでのみ有効です
//
// 戻り値: 現在のカテゴリのルートカテゴリ ID を返します
//
//--------------------- ------------------------ ------------------------ ----
function GetRootID()
{
return $this->_SelfData->Get('RootID ');
}
//------------------------------------------------ ------------------------
//public int GetParentID()
// 現在のカテゴリの親カテゴリ ID を返します
// 注意: この関数は現在のカテゴリが設定されている場合のみ有効です
//
// 戻り値: 現在のカテゴリの親カテゴリ 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 このパラメーターは手動で指定することはできません。これは、によって自動的に計算される中間値です。プログラム
//
// 戻り値:
// 構造は兄弟と親の表記で表されるツリー
// 分類データは次のとおりであるとします。
// §──レベル 1 分類
// │
// │
// │
// §─レベル 2 分類
// │ │
// │ └─レベル 3 分類
// │
// └─レベル 2 分類
//
// 戻り値is Array(
// 0 => Array(
// 'ID' => '',
// 'ParentID' => '',
// 'RootID' => '',
/ / 'カテゴリ名' => '',
// '子' => ....
// .....
// )
//
//----- -------------------------------------------------------- -------------- ------
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 このパラメータは手動で指定することはできません。プログラムによって自動的に指定されます。 計算された中間値
//
// 戻り値: を返します。 .
//
// ps: echo "";
//
//------ ----------------------------- --------------------- ------------------
function GenerateTypeTreeList($Data, $ProcessFunc, $ Floor = 0)
{
$Str = '';
for($i = 0, $cnt = Count($Data); $i < $cnt; $i++)
{
if($this->カテゴリID == $Data[$i]['ID'])
{
$Str . = "<オプション値='{$Data[$i]['ID']}' 選択済み>" . " ", $floor * 3)
. '§'
. ($ProcessFunc ? $ProcessFunc ($Data[$i]) : $Data[$i]['CategoryName'])
. "n";
}
else
{
$Str .= "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()
//
// 戻り値: HTML 形式で表示される生成されたツリーを返します。 //
// ------------------------------------------- ----- ------------------------
function GenerateTypeTreeView($Data, $ProcessFunc)
{
$Str = '