ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.
wikiってきれいさよりもいろいろな情報にアクセスしやすいかが大事なのかなーと思います。
なのでサイドバーも、もはやそのwikiのサイトマップといってもいいくらいぎっしりサイト内リンクを入れ込みたい…はず。
サイドバーを自動で作ってくれるプラグインを使っているなら必要ないのですが、自分でサイドバーを都度編集して新しく作ったページを登録とかしていると、サイドバーとフッターの両方を毎回自分で編集するのがおっくうに感じてしまいますよね。…というか私がそうでした。
という事でここではdokuwikiでサイドバーと同じ内容をフッターにも表示する方法を紹介したいと思います。
- 最初に注意:テンプレートファイルをいじります
- やり方
- main.phpを編集する
- コードの説明
- 4行目「tpl_include_page($conf['sidebar'], false, true)」
- 5行目「preg_replace('/\s+id\=".+?"/u', "", $my_footer_ori)」
- 6行目で出力
- まとめ
- おまけ
最初に注意:テンプレートファイルをいじります
通常、dokuwikiではfooter.htmlというファイルを用意すればそれが自動的にフッターとして読み込まれるんですが、今回はphpを使う必要があるので、直にテンプレートファイルをいじることになります。
ちなみにfooter.htmlを使ったdokuwikiのフッター作成方法はこちら。
やり方
まずFTPソフトか何かでdokuwikiのテンプレートファイルをローカル環境に取ってきます。ファイル名は「dokuwiki/lib/tpl/○○(テンプレート名)/main.php」です。
○○のところは、例えばデフォルトのdokuwikiテンプレートを使っているなら「dokuwiki」となります。
main.phpを編集する
このmain.phpがdokuwikiのHTMLの本体?となっていて、ここで例えばサイドバーを表示したり、HTMLヘッダーを出力したり、とワードプレスでいうとindex.phpみたいなことをやってます(ワードプレスをやってない方はかえって混乱させてしまってゴメンナサイ)。
で、このmain.phpの下の方、どこでもいいんですが自分がここにフッター表示したいなーっていう場所に、
main.php
<div id="my-footer">
<div id="my-footer-content">
<?php
$my_footer_ori = tpl_include_page($conf['sidebar'], false, true);
$my_footer = preg_replace('/\s+id\=".+?"/u', "", $my_footer_ori);
echo( $my_footer );
?>
</div>
</div>
をコピペしてください。
でこのmain.phpを再びftpソフトか何かでdokuwikiにアップロードすれば、フッターにサイドバーと同じ内容が表示されます。
あとはcssで見た目を整えて…、これでサイドバーを編集すれば自動で項目が増えるフッターの出来上がりです。
コードの説明
上記でもうカスタマイズは終了してるんで、ここから先は気になる人だけ読んでいただければと思います。
一応上記コピペしたコードを説明をサクッとしておきますね。
4行目「tpl_include_page($conf['sidebar'], false, true)」
1~3行目はただのHTMLなので省くとして、4行目。
この「tpl_include_page()」という関数が非常に優れモノのようで、この関数はdokuwiki内の任意のページをまるまる取得してページに貼り付けることができる関数みたい、なんです。
ようだ、とかみたい、とか断定できてないのがもどかしいんですが、ネットで調べてみてもあまりこの「tpl_include_page()」の情報が出てこなくて、けっこう適当に使ってしまってるんですよね。main.php内のサイドバーを読み込むところがこの関数を使っていたのでそのまま流用しただけというか。
とりあえず今回、この4行目では「$conf['sidebar']」に設定したページを読み込みますよー、って言ってます。で、「$conf['sidebar']」には通常「sidebar」っていう文字列が格納されています(この設定は「dokuwiki/conf/local.php」で変えられます)。
「tpl_include_page()」の引数がよくわかってなくて、試してみた感じ第一引数をtrueにするとそのまま出力(echo)までしちゃう…らしい。第二引数はtrue/falseの違いが判らなかったです。
今回次に説明する理由から、そのまま出力されると困るんで第一引数をfalseにし、いったん変数に格納しています。
5行目「preg_replace('/\s+id\=".+?"/u', "", $my_footer_ori)」
そのまま出力するのの何が問題化というと、サイドバーに「見出し」を使っている場合限定なんですが、dokuwikiって見出し行にidが自動付与されるんですよね。
なのでサイドバーとフッターで同じものを出力しちゃうとidが重複しちゃうんです。
たぶんdokuwikiが自動生成する目次機能のためのidなのかなーと思いますが、念のためフッターの方からはidを取り除いておきたかったのです。
それをやっているのがこの5行目。
preg_replaceというphpの文字置換関数を使って見出し行のidを削除しています。
6行目で出力
そして6行目のechoでidを消したHTMLをドバっと出力している、という具合です。
まとめ
ここではdokuwikiのフッターにサイドバーと同じ内容を表示する方法を紹介しました。
まとめると、テンプレートファイル(main.php)内の任意の場所でtpl_include_page()関数を呼び出せばOK、という感じ。
結構簡単なのでやってみてくださいね。
おまけ
で、このtpl_include_page()関数、今回はsidebarを読み込むのに使いましたが、任意のページを読み込めるみたいなので、例えばフッター用に「footer」っていうページを自分で作って、でtpl_include_page(‘footer’)ってやればフッターとして読み取ってくれるみたい。
sidebarみたいな、wikiの表側?の編集画面から編集できるパーツをどんどん組み込めるってことなんですよね。これ、地味に使いやすい気がしてて、例えば各ページに表示したい「おしらせ」みたいなのも「info」っていう名前のページを自分で作って、んでmain.phpの好きな場所で「tpl_include_page(‘info’)」ってやれば、wikiの全ページに表示され、かつ内容は自分でページ編集画面でいつでも変えられるようになるんです。
結構かゆいところに手が届きそうな、そんなtpl_include_page()関数でした。
【おしらせ、というか完全なる宣伝】
文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.
こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /

