無限分類 データを分類する場合、ほとんどの場合、ニュースやソフトウェア チャネルにはさまざまなサブカテゴリがある可能性がありますが、これらのサブカテゴリがわからないため、無限分類方法を使用する必要があります。
最初のカテゴリ (親カテゴリ) –> 2 番目のカテゴリ (子カテゴリ) –> 3 番目のカテゴリ (孫カテゴリ)
そのような親族分類が増えるほど、プログラムとデータベースを制御することがより複雑になり、同じレベルでの分類処理と制御は非常に簡単になります。これは、次のようなこのレベルの分類を記録するのに必要なデータベースが 1 つだけであるためです。 、ニュースやその他の分類はこのレベルでの処理が非常に簡単ですが、Web サイトの場合は、第 1 レベルの分類だけでは十分ではなく、次のように再度分類する必要があります。
システム –> Linux、Windows
ニュース – > Linux ニュース、Windows ニュース
linux–>システム ツール、カーネル、プログラミング言語、開発ツール
…
分類が第 3 レベルになると、情報の処理がより明確になります。つまり、情報を明確に処理するには、分類が詳細であればあるほど、情報の処理が容易になります。ネチズンが明確な目的を持って必要な情報を見つけやすくなります。しかし、分類が改良され続けるにつれて、プログラムとデータベースを制御することはますます困難になります。
難易度 2: php を使用してこの明確な関係を完成させるにはどうすればよいですか?
この種のマルチレベルで詳細な分類は、すべての PHP プログラマーが解決しなければならない問題です。優れた Web サイトを作成するには分類の問題は避けられず、この問題の解決は非常に複雑であり、その中で最大の問題はデータベースの分類処理。データベースが適切に処理されないと、膨大な作業負荷が発生し、データベースの再計画も必要になるためです...
今回紹介する方法は、分類データベースを使って無限下位分類法を作成する方法です。Windowsを使用したことのある読者ならご存知の通り、Windowsフォルダーには無限下位分類ディレクトリが作成でき、その下にディレクトリを作り続けることができます。 , このように延々と続きますが、Linuxのディレクトリ作成にもこの機能があります
私が紹介した方法はこの形式と同じです。データベース計画
分類の複雑さについては先ほど説明しましたが、無制限の分類を実現するには、データベースをどのように計画するかが非常に重要なステップになります。私はかつてフォーラムのデータベース計画について紹介しました。はい、フォーラムは無制限のフォローアップを実現できます。分類は子供と親の間の関係でもあります。このような子供と親の関係を明確にするためには、いくつかの困難があります。
1) 各カテゴリーの情報保管の扱い方;
2) 分類の親族関係にどう対処するか;
親族関係のデータベース処理は、フォーラムのデータベース処理に似ています。ここでは、分類を処理するためのタイプ データベースを構築します。
フィールドの作成:
id(int): 各カテゴリの自然なシリアル番号を記録するために使用されます
uid(int): このカテゴリの親カテゴリの ID 番号を記録するために使用されます
roue_id (varchar): 親族関係を示すための親族ツリー、:0:2:10:20: の ID で接続します
roue_char (varchar): アフィニティ ツリー、次のようなもの: system: linux: 開発ツール: gcc: (このフィールドが存在するかどうかは関係ありません。各アフィニティをよりわかりやすく理解するために、もちろん文字表現はより直接的です数値表現よりも^o^ですが、このフィールドを追加するのが最適です)
このような無制限のカテゴリテーブルが確立されました。次に、情報を保存するためのデータベースを確立する必要があります。テーブルを処理してクエリするのが最も便利です。そのため、情報を保存するためのテーブル type_message:
id(int): メッセージのシリアル番号;
typeid(int): カテゴリの ID 番号;
title(varchar): メッセージのタイトル;
time: 情報が作成された時刻;
これら 2 つのデータ テーブルは、無制限の分類タスクを完了できます (2 つのテーブルの補助フィールドは追加されません。読者は独自に追加できます)。
残りのタスクはphpによって処理されます
プログラム制御
このステップは、無限分類関数を実装する上で最も複雑で手間がかかるものです。まず、プログラム内で完了する必要があるステップを見てみましょう。
2) アップロードする情報を作成します;
3) 各カテゴリとそれらの関係を明確に表示します。4) プロセスクエリ関数;
5) 編集および削除機能の処理方法;
カテゴリの編集と削除には均一性の問題が含まれるため、これら 5 つのステップの中で最も難しいのは 5 番目のステップです。
以下、phpのプログラム制御を一つ一つ説明していきます
1)カテゴリーを作成してアップロード
この関数を紹介する前に、まず、explode() 関数を紹介します。これは、文字列を分解するために使用される、次のような具体的な使用法です。
「0:1:2:3:4」の数字を分解します
$val="0:1:2:3:4";
$rid=explode(":",$val);
Expand() 関数によって処理された後、$val 内のすべての数値が $rid 配列に分解されます。引用したい場合は、単に echo “$rid[0],$rid[1],$rid” と出力します。 [2]… "; 以上です。explode() 関数は、分類プロセス全体において非常に重要な役割を果たします。次に、非現行分類のプログラム制御の導入を始めましょう。
合計分類が 0 であり、すべての分類がその子孫であると仮定できます。次に、最初の分類「システム」を確立し、それがデータベースにどのように保存されるかを見てみましょう。
id | ルート ID | 1 | 0 | システム次に、「Linux」を以下に分割しました:
上記はデータベース ストレージの形式です。これはフォーラム コードとよく似ています。必要なのは、カテゴリ ID を uid に入力し、親カテゴリの uid を 0 に入力することだけです。コード:
コードは次のとおりです
コードをコピー
…… //デフォルトページを設定します
if (empty($func)) $func=="showtype";
$values.=",$id"; if ($uid!="") { if ($type!="") { if ($route_id=="") { $route_id=mysql_result($result,0,"route_id"); } その他 {
$routr_id="0";
} その他 {
endif; /* 保存を終了 */
if ($func=="createtype"):
ID の説明");
$cat = mysql_result($result,0,"id");
} その他 { |
//显示分类********************************************* ***
if ($func=="showtype"):
エコー "";
//分別状態判断
if ($uid!=0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");
} その他 {
$type="父分类";
}
echo "
echo "
$result=mysql_query("select * from type where uid=$uid");
$num=mysql_numrows($result);
if (!empty($num)) {
for ($i=0;$i
$id=mysql_result($result,$i,"id");
$type=mysql_result($result,$i,"type");
エコー "
エコー "";
エンドイフ; /* ショータイプの終了 */
……
……
?>
以上の手順により、無制限の分別クラスの基本的な構築、保存、および表示が完了し、次に完全な分別クラスの構築機能の各部分が完了します。
経路跟追跡
前に分別の構築方法を説明しましたが、分別テーブルに rout_id と rout_char という 2 つの分別経路を保存する情報が記載されており、何も処理しない場合、プログラムは次の順序で最下層まで進むことができます。倒立退行 (もちろん、ブラウザのバック ボタンを利用することもできますが、このプロセスは不完全です)、したがって、 rout_id と rout_char の情報分解を完了する必要がある経路指示です。
具体的な実行法、假如データ库记これ么一条分类信息:
ID:4
uid:2
タイプ:开公開工具
ルートID:0:1:2:4
rout_char:系统:linux:开公開工具
当プログラムが分別クラス「公開ツール」に到達したとき、経路情報の表示を要求するほかに、パス上の任意の分クラスに移動できるようにする必要がありますか?ここでは、explode() 関数の使用が必要です。と rout_char は相互関係があるため、分解できます:
复制幣 | |
$path=explode(":",$rout_id); $path_gb=explode(":",$rout_char);
|
今回はすべての分別情報が分解されており、現在行われているのは接続された方法で経路情報です:
复制幣 | |||||||||
for ($i=0;;$i++) { $a=$i+1;
エコー「」
href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":"; |
コードをコピー | |
…… //分類のステータスを決定する
if ($uid!=0) {
$rout_id=mysql_result($result,0,"rout_id"); | |
"; for ($i=0;;$i++) { $a=$i+1; エコー「」 href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":"; if (empty($path_gb[$i])) { 休憩; } } echo " | |
创建分类 | |
$type | |
";
echo "$type"; |
エンドイフ; /* ショータイプの終了*/
……
……
?>