目次: 自宅サーバー
PukiWiki 1.4.7に関連するページへのリンクを表示するrelatedというプラグインがあります。リンクには二種類あって、
が表示されるようになっています。
PukiWikiの編集時にブロック型プラグイン形式 #relatedか、index.php?plugin=related&page=PageNameのように(便宜的に直起動と呼ぶ)してpluginを呼び出すことで上記の機能が発動します。
どちらの起動方法でも機能は同じ……そんなふうに考えていた時期が俺にもありました。
バキネタはさておき、relatedプラグインってば直で起動するとブロック型とは別の処理が走ってしまいます。そのせいで順リンクが出ません。なんだこれ。
PukiWikiなんてそこら中で使われてるし、relatedの妙な動きにも誰か気づいていそうなもんですが…、そもそもどちらの動きが正しいんでしょう?それによっては以下のエントリが丸々無駄になる可能性があったりなかったり。
PukiWikiで「ひらメソッド」をやってみると、ある関数が誰を呼ぶか?という一覧の他に、ある関数が誰から呼ばれ得るか?ってのも知りたくなりませんか?
その手の情報は手動で管理すると死ねるので、逆リンクの一覧をページに埋め込むってのが欲しかったわけです。しかしながら #relatedでは、先述したように順リンクが混ざってうまくないです。
relatedを直すとあちこちに影響が出そうなので、今のところは、以下の図のような対象ページの逆リンクだけをすっぱ抜いてくるbacklinksプラグインを追加して凌いでいます。
<?php
// PukiWiki - Yet another WikiWikiWeb clone
// Backlinks plugin: Show backlinks for the page
function plugin_backlinks_convert()
{
global $vars;
return make_backlinks($vars['page'], 'p');
}
function make_backlinks($page, $tag = '')
{
global $script, $vars, $rule_related_str, $related_str;
global $_ul_left_margin, $_ul_margin, $_list_pad_str;
$links = links_get_related_db($vars['page']);
if ($tag) {
ksort($links);
} else {
arsort($links);
}
$_links = array();
foreach ($links as $page=>$lastmod) {
if (check_non_list($page)) continue;
$r_page = rawurlencode($page);
$s_page = htmlspecialchars($page);
$passage = get_passage($lastmod);
$_links[] = $tag ?
'<a href="' . $script . '?' . $r_page . '" title="' .
$s_page . ' ' . $passage . '">' . $s_page . '</a>' :
'<a href="' . $script . '?' . $r_page . '">' .
$s_page . '</a>' . $passage;
}
if (empty($_links)) return ''; // Nothing
if ($tag == 'p') { // From the line-head
$margin = $_ul_left_margin + $_ul_margin;
$style = sprintf($_list_pad_str, 1, $margin, $margin);
$retval = "\n" . '<ul' . $style . '>' . "\n" .
'<li>' . join($rule_related_str, $_links) . '</li>' . "\n" .
'</ul>' . "\n";
} else if ($tag) {
$retval = join($rule_related_str, $_links);
} else {
$retval = join($related_str, $_links);
}
return $retval;
}
?>
PukiWikiのpluginディレクトリにbacklinks.inc.phpという名前で置いて、PukiWikiでページ編集するときに #backlinksと書けば動作するはずです。PukiWikiのコード(make_related関数)をそのままパクッてるんで、ライセンスはGPLです。こんなんで良ければご自由にどうぞ。
< | 2008 | > | ||||
<< | < | 02 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)