以前、分類機能も含めて百科事典を作ったことがあるので、最初は難しそうだと思ったのですが、それは無限分類ではなく、自分で設計した固定の3段階分類のシンプルな実装でした。考えてみると実装方法が大雑把すぎます。実は、3 レベル分類は無限レベル分類の特殊なケースにすぎません。しばらく考えてから、ネットで調べたら、そういうのがたくさんあることが分かりました(笑)。実際、無限ドロップダウン リスト関数は非常に単純で、再帰アルゴリズムを使用するだけです。
まず、データベースを設計する必要があります。分類情報を保存するテーブルを構築する必要があります。最初のフィールドは主キー (ID)、2 番目は親分類 ID (親 ID)、3 番目は名前 (クラス名) です。考えられる影響は次のとおりです:
ID PARENTID CLASSNAME
1 0 第 1 レベルの分類 A
2 0 第 1 レベルの分類 B
3 1 第 2 レベルの分類 A
4 1 第 2 レベルの分類B
主なアイデア: まず、3 番目と 4 番目の行を見てください。親クラス ID (PARENTID) の値は 1 ですが、1 番目と 2 番目の行はクラス ID=1 のサブクラスに属していることを意味します。は第 1 レベルの分類であり、上位の分類はないため、親クラス ID (PARENTID) の値は 0 であり、主分類を示すなど、無限の分類が実現されます。最終的な効果は次のとおりです。
§第 1 レベルの分類 A
§─┴第 2 レベルの分類 A
§─┴第 2 レベルの分類 B
っていって、第 1 レベルの分類 B
はプログラムです。ここでは、PHP は記述言語として、原理が似ており、単なる再帰であるため、簡単に他の言語に変更することができます。
コードをコピー コードは次のとおりです。
$dbhost = "localhost" / / データベースのホスト名
$dbuser = "root"; // データベースのユーザー名
$dbpd = "123456"; // データベースのパスワード
$dbname = "test"; mysql_connect($ dbhost,$dbuser,$dbpd); // ホストに接続します
mysql_select_db($dbname) // データベースを選択します
mysql_query("SET NAMES 'utf8'"); §",0 );
function display_tree($tag,$classid) {
$result = mysql_query("
SELECT *
FROM ylmf_class
WHEREparentid = '" . $classid . "'
;"
);
while ($row = mysql_fetch_array($result)) {
// ノード名をインデントします
echo $tag.$row['classname'] . "< ;br/>";
//この関数を再度呼び出して、子ノード
display_tree($tag."─┴",$row['id']);
}
}
?>
このような再帰的なメソッドは、多数のサブカラムや一部の成熟した CMS システムにとって負担となります。これらはすべて簡単に呼び出すための配列を生成し、効率を大幅に向上させることができます。