【dokuwiki】パンくずリスト的なものを自作する方法

製作 プログラム

最終更新日:2025/12/30

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

dokuwikiにはデフォルトでパンくずリストがあるんですが、「トレース」とか書かれてるのとよくあるWEBサイトのパンくずリストとは違って閲覧履歴が表示されてるだけであんまりパンくず感がないんですよね。

また実はdokuwikiには私たちがイメージする、階層構造を表したパンくずリストもある(youarehere)んですが、wikiっていろんな人が編集するものなので階層構造がきちんと守られてページが作られていくかは結構難しいところがあるのかな、と思います。

という事でここではそんなかゆいところに手が届いていないdokuwikiのパンくずリストをいい感じに修正してみようと思います。

  1. テンプレートファイルを直接いじります
  2. パンくずリストの作り方
    1. sidebarとstartは各自の設定に変更!
  3. ソースコード説明
    1. 2行目「$my_backlinks = ft_backlinks($ID);」
    2. 3~8行目
    3. 15,17行目
    4. 20行目あたり
  4. まとめ

テンプレートファイルを直接いじります

今回行う編集はdowuwikiのテンプレートファイルを直接いじりますのでその点だけ注意を。

パンくずリストの作り方

dokuwiki/lib/tpl/○○/main.php内、パンくずリストを表示したいか所に以下をコピペ

<?php
	$my_backlinks = ft_backlinks($ID);
	$my_sidebarbl = array_search('sidebar', $my_backlinks);
	
	if( $my_sidebarbl !== false ){
		unset($my_backlinks[$my_sidebarbl]);
		$my_backlinks = array_values($my_backlinks);
	}
	if( count($my_backlinks) >= 1 ){
		$my_bl_output = '<div id="my-bl-wrapper" class="site-header"><div class="site-navigation"><div class="breadcrumbs"><span id="my-bl-title">関連ページ:</span>';
		
		$my_topbl = array_search('start', $my_backlinks);
		$my_breadbl = array_search($INFO['namespace'], $my_backlinks);
		
		if( $my_breadbl !== false ){
			$my_bl_output .= '<span class="my-bl-item">' . html_wikilink(':' . $my_backlinks[$my_breadbl]) . '</span>';
		}else if( $my_topbl !== false ){
			$my_bl_output .= '<span class="my-bl-item">' . html_wikilink(':' . $my_backlinks[$my_topbl], 'TOPページ') . '</span>';
		}else{
			foreach( array_slice($my_backlinks,0,3) as $bl ){
				$my_bl_output .= '<span class="my-bl-item">' . html_wikilink(':' . $bl) . '</span>';
			}
		}
		$my_bl_output .= '</div></div></div>';
		echo($my_bl_output);
	}
?>

これでいい感じにパンくずリストが表示されるようになります。ただ皆さんの環境にあわせて2点変更してもらう箇所があります。

sidebarとstartは各自の設定に変更!

上記コピペしてもらったソースコード内に「sidebar」と「start」でそれぞれarray_search()してる部分があります。

このsidebarとstartはご自身のwikiの設定に合わせて変えてください。sidebarはそのままの人が多いと思いますが、wikiのトップページのURLはstartからtopとかindexとかに変更している人も多いはずなので。

ソースコード説明

すでに編集は終わっているのでここから先は読みたい方だけ読んでくださいね。

ソースコードの説明をサクッと書いておきます。

2行目「$my_backlinks = ft_backlinks($ID);」

この「ft_backlinks($ID)」っていうのがdokuwiki自体の関数で、ここでバックリンクという、この記事へのリンクを持っている記事一覧を取得しています。

3~8行目

2~7行目でsidebarは関連ページとは言えないので、バックリンク一覧からsidebarを外しています。

15,17行目

もしバックリンク一覧に自身のいる名前空間のリンクがある(例:自身が「果物一覧:リンゴ」というURLで「果物一覧」という名前空間からのリンクがある)ならそのリンクのみを表示、次にTOPページからのリンクがあるならそのリンクのみを表示、という具合に、パンくずリスト感を高めているのがここら辺です。

20行目あたり

wikiなので名前空間というか階層構造をまったく気にせずページを作ることもあるかと思います。

そういう場合はバックリンク一覧から3つを取り出してそれを関連ページとして表示する、という処理をしているのがここらへんです。

3つじゃなくてもいいので例えば5とか7とかに変えてもらえれば表示されるパンくずリストの数が増えます。

まとめ

ここではdokuwikiにパンくずリスト風のものを自作する方法を紹介しました。

まとめるとft_backlinks()っていうdokuwiki独自関数でバックリンクを取得し、なんか処理をかませればパンくずリスト風のものができるよ、という感じ。

参考にしてみてくださいね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /