ここ数日間、基本的な内容を投稿してきましたが、今日は、CMS システムのバックエンドで一般的に使用されるカテゴリー管理部分の本質は、無制限のカテゴリー メニューです。初心者には難しいかもしれませんが、今日の私の詳しい説明を聞いて、将来は誰でもできるようになると思います。それを達成するにはどうすればよいでしょうか?まずデータベースを作成しましょう:
--
-- テーブル構造 `cr_columninfo`
--
コードをコピー コードは次のとおりです。
CREATE TABLE `cr_columninfo` (
`columnid` int(4) NOT NULL auto_increment,
`columnfatherid` int(4) NOT NULL デフォルト '0',
`columnname `varchar (100) NOT NULL デフォルト '',
`columnadder` varchar(50) NOT NULL デフォルト '',
`columninputdate` date NOT NULL デフォルト '0000-00-00',
PRIMARY KEY (` columnid`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 AUTO_INCREMENT=15;
-- テーブル `cr_columninfo` 内のデータをエクスポートします
--
INSERT INTO `cr_columninfo` ( ` columnid`, `columnfatherid`, `columnname`, `columnadder`, `columninputdate`) VALUES (1, 0, 'AV star', 'leehui', '2006-09-28'),
(2, 0) , 'キャンパス スタイル', 'leehui1983', '2006-09-28'),
(3, 1, '香港と台湾のスター', 'leehui', '2006-09-28'),
(4, 0, '風景写真', 'leehui1983', '2006-09-29'),
(5, 4, '広大な海', 'leehui1983', '2006-09-29') ,
(6, 5, '福州の海', 'leehui1983', '2006-09-29'),
(7, 2, '卒業写真', 'leehui', '2006-09-29 ' ),
(9, 0, 'スポーツスター', 'leehui1983', '2006-10-02'),
(10, 0, '絶妙な壁紙', 'leehui1983', '2006-10 - 02'),
(11, 0, '都市風景', 'leehui1983', '2006-10-02'),
(12, 0, '漫画アニメーション', 'leehui1983', '2006 - 10-02'),
(13, 0, 'ゲームのスクリーンショット', 'leehui1983', '2006-10-02'),
(14, 0, '作者のアルバム', 'leehui1983', ' 2006-10-02');
これらはテスト データです。基本原則は、各列に独自の ID 番号と、これら 2 つの関係に基づいて、最上位の列の親 ID = 0 となるツリー構造を確立します。次に、プログラムの実行原理を説明します。このプログラムはサブメニューを横断するために最も一般的な再帰アルゴリズムを使用します。まず、最初にすべてのトップ メニューをクエリして表示します。大きなテーブルでは、各行にトップレベル メニューが表示され、次にすべてのサブメニューが再帰的にリストされます。サブメニューは上位レベル メニューの次の行に配置され、表示属性が表示されます。行の ID はプログラムによって動的に生成され、JS と組み合わせて行の表示と非表示を制御します。これは、Microsoft のメニューと同様のスケーラブルな効果です。この記事は、プログラムを説明するために、生成されたページの HTML を DW にコピーした最終結果です。
コード部分を見てください。難しい構文はありません。興味があれば、このコードを展開してください。
PHP コードは次のとおりです: コードをコピーします コードは次のとおりです:
类别目录树
="0" bgcolor="#EFEFE7">
<表幅="100%" 高さ="25" ボーダー="0" セルパディング="0" セルスペース="0" bgcolor="#739E18" >
🎜>
//使用する ID 番号ドロップダウン メニューを追跡
$layer =1; //現在のメニューを追跡するために使用されるレベル
$Con=mysql_connect("localhost","root", "7529639");
mysql_query("SET NAMES 'GBK'");
$sql="select * from cr_columninfo where columnfatherid=0"; > $result=mysql_query( $ sql,$Con);
//第 1 レベルのメニューが存在する場合、メニューの表示を開始します
if(mysql_num_rows($result)>0) ShowTreeMenu($Con ,$result,$ID);
//=================================== =========
//ツリーメニュー関数を表示 ShowTreeMenu($con,$result,$layer)
//$con: データベース接続
//$result: メニューレコードセット表示する
//$layer: 表示するメニューのレベル
//========================== ============ =======
function ShowTreeMenu($Con,$result,$layer)
{
// メニュー項目の数を取得します。表示する必要があります
$numrows=mysql_num_rows($result) ;
//メニューの表示を開始します。各サブメニューはテーブルで表されます
echo " ";
for($rows=0;$rows<$numrows;$rows)
{
// サブメニュー レコード セットを抽出しますメニュー項目の
$sql="select * from cr_columninfo where columnfatherid=$menu[columnid]";
$result_sub=mysql_query($sql,$Con); echo "";
//メニュー項目にサブメニューがある場合、JavaScript の onClick ステートメントを追加します
if(mysql_num_rows($result_sub)>0)
{
echo " | ";
echo " ; ; echo " | "; //メニュー項目にサブメニューがない場合は、メニュー名のみが表示されます echo $menu[columnname]; echo " |
"; /If メニュー項目にサブメニューがある場合、サブメニューが表示されます
if(mysql_num_rows($result_sub)>0)
{
// メニュー項目に対応するサブメニューの ID とスタイルを指定しますonClick ステートメント
echo "";
//サブメニューの処理が完了し、前のレベルの再帰に戻り、系列を 1 つ減らします。
$layer--;
}
echo "
"; > }
?>