lfTreeは、木構造に関する表示に必要なデータを取得するためのpl/pgsqlストアドプロージャを使ったfunctionです。
---
$1・・・処理を行うID番号。sql上で扱うデータをそのまま渡す。
$2・・・テーブル名。
$3・・・実行コマンド名。
$4・・・当該ソース名。
※ID番号とは、lfアプリケーション上で採用している共通の考え方で、個別の登録番号のことを指します。
---
実行コマンド別の解説
■group
SELECT id,pid,lfTree(id,'table_name','group','') FROM table_name;
例) 10 | 8 | 2,6,7,8,10
指定されたIDを含む番号配下にある、すべてのカテゴリを算出します。木構造の根本となる番号を指定します。このとき、0番はこのコマンドの性格上、含まれませんが、これはコードが汚染されていないことが前提となります。値は、1つ以上、複数の値がコンマで区切られて返されます。例では、8をpidに持った10というid番号のgroupを算出しています。2が親記事となり、6,7,8,10という子記事があることになります。
■topicid
SELECT id,pid,lfTree(id,'table_name','topicid','') FROM table_name;
例) 10 | 8 | 2
指定されたIDの親IDを求め、最終的な木構造であるID番号0の直前となる番号を求めます。掲示板などの書き込みを扱うとき、pidが0番と指定されているものが、主な書き込みとして扱うのが適切ですが、孫記事やさらにその配下となる記事中ではそういったトピックスの先頭となりえる番号が分かりません。このため、親IDを追っていくことで記事の先頭のIDが算出できます。値は、先頭となる番号は必ず1つですので、1つで返されます。例では、10番の記事の先頭となる書き込みが2番であることを示しています。
■dir
SELECT id,pid,lfTree(id,'table_name','dir','') FROM table_name;
例) 10 | 8 | 0,2,6,10
木構造を持った記事へのリンク生成を行う際に、当該のID番号がID0番からどのように関係しているかを表示します。値は階層数に応じて、1つ以上の番号を返します。例では、あらゆる記事の先頭となる0番から順に、2番、6番、10番と階層構造を持っていることを示しています。区切りは、「,」を使用しており、そのままSQLに使うことを意識しています。
■dirname
SELECT id,pid,lfTree(id,'table_name','dirname','name') FROM table_name;
例) 10 | 8 | HOME > 大項目 > 中項目 > 小項目
基本的な考え方はdirと変わりありませんが、番号ではなくフィールド名が返される点が異なります。文字列として見たときにそのまま扱えるように、いわゆるパンくずリストのように表示します。「 > 」で区切っているので、そのままsplitやexplodeにかけることも意識しています。このとき、項目名として引き出すものを$4に指定します。
■dirhtml
SELECT id,pid,lfTree(id,'table_name','dirhtml','name') FROM table_name;
例) 10 | 8 | HOME > 大項目 > 中項目 > 小項目
※上はHTMLを省略していますが、Aタグが含まれます。
基本的な考え方はdirと変わりありませんが、ロジックファクトリーの標準的なHTMLが出力されます。ほとんどの場合、category値が必要となる場面なので、リンク先には「./?category=番号」のような指定が入ります。文字列として見たときにそのまま扱えるように、いわゆるパンくずリストのように表示します。「 > 」で区切っているので、そのままsplitやexplodeにかけることも意識しています。このとき、項目名として引き出すものを$4に指定します。
■depth
SELECT id,pid,lfTree(id,'table_name','depth','') FROM table_name WHERE state!=0;
例) 10 | 8 | 3
階層構造を何階層持っているのかを取り出せます。例えば、ID0番の直下にあるID1番があるときは、1段上ということで2階層のため1を返します。上の例では、4階層を持つことになり3を返します。
※state=0のような値を含めると、その値が求めることができず、異なる値が返ってくることがあります。通常のコード上でそのような汚染されたコーディングは行わないので、このfunctionでそういったことを考慮することはありません。
|