ホームページ > php教程 > php手册 > 処理クラスの無限クラス

処理クラスの無限クラス

WBOY
リリース: 2016-06-21 09:14:01
オリジナル
974 人が閲覧しました

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 = '

    ';

    for($i = 0, $cnt = Count($Data); $i {
    if($ProcessFunc) $ Str .= '
  • ' . $ProcessFunc($Data[$i]) ' . $Str .= '
  • ' i][' カテゴリ名'] . "n";
    if($Data[$i]['Child']) $Str .= '
  • >GenerateTypeTreeView( $Data[$i]['Child'], $ProcessFunc) '
  • ';
    }

    $Str .= '
';

return $Str;
}

//------------------------------------------ ---- ------------------------
//public String PrintCurrentLevel(String $ProcessFunc = '')
// 現在のデータを生成します多レベル分類の場合 位置文字列
// 分類データが次のとおりで、現在の分類がレベル 3 であるとすると、呼び出しはレベル 1 の分類 -> レベル 2 の分類 -> レベル 3 の分類を返します
// §──レベル1分類
// │
// │
// │
// §─レベル2分類
// │ │
// │ └─レベル3分類
// │
// └─レベル2分類
//
//
/ /
//
// @param: $ProcessFunc カテゴリデータの表示方法のコールバック関数です。設定されていない場合は、カテゴリ名が直接表示されます
// 関数定義のプロトタイプは次のとおりです。 function (&$arr);
// ここで $arr パラメータは、次のような各カテゴリ情報の 1 次元配列です:
// array(ID => 1, ParentID => 0, RootID => 0 , categoryName => 'レベル 1 カテゴリ')
// 戻り値 カテゴリ名をリンク付きで返したり、表示色の変更などを行った結果です
//
// 戻り値: カテゴリ ツリー全体における現在のカテゴリの位置を返します
//
//---- ------------------------- ----------------------- ---------------------
関数 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') . " または 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'] 新しいカテゴリの名前
//
// 戻り値: カテゴリ操作を追加した結果を返します
//
//-------- ------------------------------------- ------------- ------------------
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です
//
// 戻り値:カテゴリの削除結果を返す
//
//---- --------------------------------- ----------------- ---------------------
関数 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'] 新しいカテゴリの名前
//
// 戻り値: 分類操作を変更した結果を返します
//
//----- ------------------------ ---------------------------- -------------------
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);
}

//----- ------------------------ ----------------------------- --------------------
//パブリック配列 Modify(int $ID)
// 既存のカテゴリを変更します
//
// @param: $ID 指定カテゴリ ID
//
// 戻り値: 指定された ID カテゴリの情報を返します
// 配列には以下が含まれます:
// Array(
// 'ID' => カテゴリ ID,
// 'ParentID' = > 親カテゴリ ID,
// 'RootID' => 'CategoryName' => カテゴリ名,
// );
//
//-------- -------------------------------------- ---------- -----------------------------------
function GetCategory($ID)
{
$ this-> tblObj->SetCondition('ID = ' . (int)$ID);

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





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート