「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
フォルダの階層構造を部分的に出力する(その1)
あるページを閲覧中に、自分を含むTopLevelフォルダのみを表示し、そこに含まれるフォルダやページを階層的に表示できないものかと悩んでおります。
この質問に答えます。
今日は、テンプレートを組む前提として、使用するテンプレートタグをまとめます。
1.質問の概要
まず、この質問の概要をまとめます。
この質問では、以下のような出力をしたいということでした(詳しくは、元の質問の例を参照)。
- ウェブページが属するフォルダから見て、最上位のフォルダを基点に、フォルダのツリーを出力する
- ウェブページが属するフォルダと同じ階層のフォルダまで、ツリーで出力する
- ウェブページが属するフォルダでは、そのフォルダに属するウェブページと、その直下の階層のフォルダを出力する
2.使用するテンプレートタグ
この質問を解決するにあたって、いくつかのテンプレートタグを組み合わせます。
2-1.ウェブページが属するフォルダを得る
まず、ウェブページが属するフォルダを調べることが必要です。
これには、「MTPageFolder」というテンプレートタグを使います。
MTPageFolderタグはブロックタグで、その中でMTFolder系のテンプレートタグを使って、フォルダの情報を出力することができます。
2-2.最上位のフォルダを得る
ウェブページが属するフォルダから見て、最上位のフォルダを得ることも必要になります。
あるフォルダから見た最上位のフォルダは、「MTTopLevelFolder」というテンプレートタグ(ブロックタグ)で出力することができます。
2-3.特定のフォルダを基点にツリーを出力する
あるフォルダを基点にして、その下の階層にあるフォルダのツリーを出力するには、「MTSubFolders」というブロックタグを使います。
基本的には、以下のようにテンプレートを組みます。
<mt:SubFolders category="基点のフォルダ名" class_type="folder" include_current="1"> <mt:SubCatIsFirst> 同一階層の最初のフォルダの時の出力 </mt:SubCatIsFirst> フォルダの情報の出力 <$mt:SubCatsRecurse class_type="folder"$> <mt:SubCatIsLast> 同一階層の最後のフォルダの時の出力 </mt:SubCatIsLast> </mt:SubFolders>
上のようにテンプレートを組むと、基点のフォルダから、その下の階層にあるすべてのフォルダを出力することができます。
基点のフォルダ名として、ウェブページが属するフォルダから見た最上位のフォルダを指定すれば、その最上位のフォルダと、その下の階層のすべてのフォルダを出力することができます。
ただし、今回の質問では、ウェブページが属するフォルダと同じ階層まで出力して、そこで出力を止める必要があります。
それには、MTSubFoldersタグとMTSubCatsRecurseタグに、「max_depth="階層の深さ"」のモディファイアを付加します。
今回の質問の場合だと、max_depthモディファイアを指定するために、ウェブページが属するフォルダの階層の深さを調べることが必要になります。
階層の深さを調べるプラグインはありますが、今回はプラグインを使いたくないとのことなので、Movable Type標準のテンプレートタグで処理するようにします。