【freo】ページ一括表示プラグインにて、階層レベルで自動的に表示を1ファイルで振り分ける( 11/27修正)
なにがなんにゃらって感じのタイトルですが、自分メモがてら
11/27追記:ちょいちょい変えました。
呼び出し元 ページ。
<!--{if false} ■ページ一括表示プラグイン {/if}{if $page_alls|smarty:nodefaults}-->
<!--{assign var="pid" value=$page.id}-->
{include file='plugins/page_all/【ファイル名】.html'}
<!--{/if}{if false} □ページ一括表示プラグイン {/if}-->
呼び出し先 plugins/page_all/【ファイル名】.html
<!--{if false}
■page_allプラグイン用テンプレート
・階層レベルごとに、表示内容を分岐する
{/if}-->
<!--{math equation="x - 1" x=$pid|explode:'/'|@count assign='lv'}-->
<!--{foreach from=$page_alls|smarty:nodefaults item='page_all' }{if $page_all.pid == $pid}-->
<!--{if $lv == 0}{if false}◆分岐0:h4{/if}-->
<h4><a href="{$freo.core.http_file}/page/{$page_all.id}">{$page_all.title}</a></h4>
<!--{elseif $lv == 1}{if false}◆分岐1:h5{/if}-->
<h5><a href="{$freo.core.http_file}/page/{$page_all.id}">{$page_all.title}</a></h5>
<div><p>{$page_all.text|smarty:nodefaults}</p></div>
<!--{elseif $lv == 2}{if false}◆分岐2:dt {/if}-->
<!--{php}if (!$flag):{/php}--><dl><!--{php}endif; $flag=1;{/php}-->
<dt>{$page_all.title}</dt>
<!--{elseif $lv == 3}{if false}◆分岐3:li インデックス番号で{/if}-->
<!--{php}if (!$flag):{/php}--><dd><ul><!--{php}endif; $flag=1; $idx+=1;{/php}-->
<li><a href="{$freo.core.http_file}/page/{$page_all.id}">{php}echo sprintf('%02d',$idx);{/php}</a></li>
<!--{/if}--><!--{if false}◇分岐終了{/if}-->
<!--{if false}■分岐後処理 ――――――{/if}-->
<!--{assign var="pid" value=$page_all.id}-->{include file='plugins/page_all/【ファイル名】.html'}<!--{assign var="pid" value=$page_all.pid}-->
<!--{if false}□分岐後処理 ――――――{/if}-->
<!--{/if}{/foreach}-->
<!--{if false}■後始末(レベルが戻ってきたあとのタグとじ) ――――――――{/if}-->
<!--{ if $lv ==3}{php}if ($flag) :{/php}--></ul></dd><!--{php}endif;{/php}-->
<!--{elseif $lv ==2}{php}if ($flag) :{/php}--></dl><!--{php}endif;{/php}-->
<!--{/if}-->
で、何がしたかったのよ
だって再帰処理じゃん。
Smartyにselect caseがあればよかったのにね…。
使用用途はえーと、わたしの場合はTRPGのリプレイの章立てなんで、小説とかみたいなののドリルダウン?
あとは本文のチラ見せ機能。このへんは実運用時には「続きを読む(pagebreak)」を最大限活用して、実ページではデフォルト続きを読ませるも一緒表示にしてーとかナントカになる予定。事によったらtrancateも視野に入れるけど、あの手のは検索後にはいいけどそうじゃないときは個人的無駄機能なのでなー。
基本方針は元のpage_allプラグインの書き方に準じて、階層スタックとして lv てsmarty用変数を設けた程度。
タグ閉じでelseしてませんね。していいと思います。こんどやろう。
仰々しくzip配布とかするつもりはないので、使ってみたい場合はどうぞご自由に。
サポートはおそらくありませんが。
追記
…foreachの前に都度mathで階層取ったほうがシンプルな気がしてきた…
というわけで色々手を入れました。インデックスを自動で取ったりもしたので(foreachのindex使って「ですよね!」ってなったりしながら)、割と修正先の見える形でパターンが取れたかな、と。