コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2008年2月6日 >>> 2008年2月6日
link もっと後

2008年2月6日

PukiWikiのrelatedプラグインの謎

目次: 自宅サーバー

PukiWiki 1.4.7に関連するページへのリンクを表示するrelatedというプラグインがあります。リンクには二種類あって、

  • 対象となるページにあるリンク(以降、順リンク)
  • 対象となるページをリンクしたページへのリンク(以降、逆リンク)

が表示されるようになっています。

PukiWikiの編集時にブロック型プラグイン形式 #relatedか、index.php?plugin=related&page=PageNameのように(便宜的に直起動と呼ぶ)してpluginを呼び出すことで上記の機能が発動します。

どちらの起動方法でも機能は同じ……そんなふうに考えていた時期が俺にもありました。
バキネタはさておき、relatedプラグインってば直で起動するとブロック型とは別の処理が走ってしまいます。そのせいで順リンクが出ません。なんだこれ。

PukiWikiなんてそこら中で使われてるし、relatedの妙な動きにも誰か気づいていそうなもんですが…、そもそもどちらの動きが正しいんでしょう?それによっては以下のエントリが丸々無駄になる可能性があったりなかったり。

backlinksプラグイン

PukiWikiで「ひらメソッド」をやってみると、ある関数が誰を呼ぶか?という一覧の他に、ある関数が誰から呼ばれ得るか?ってのも知りたくなりませんか?

その手の情報は手動で管理すると死ねるので、逆リンクの一覧をページに埋め込むってのが欲しかったわけです。しかしながら #relatedでは、先述したように順リンクが混ざってうまくないです。

relatedを直すとあちこちに影響が出そうなので、今のところは、以下の図のような対象ページの逆リンクだけをすっぱ抜いてくるbacklinksプラグインを追加して凌いでいます。

backlinks.inc.php

<?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です。こんなんで良ければご自由にどうぞ。

編集者:すずき(2024/01/13 17:13)

コメント一覧

  • IKeJIさん(2008/02/08 10:58)
    related は他にもバグがあるんですが、Pukiwikiは死んでるんですかね?
    http://pukiwiki.sourceforge.jp/dev/?BugTrack%2F735
  • すずきさん(2008/02/08 18:22)
    >IKeJI さん
    PukiWiki は最近バージョンアップしてないようですし、開発が停滞しているのかも知れないですねえ。
    >他のバグ
    ありゃーこれはかなりだめな挙動ですね。直さないのかな。

    #backlinks は大丈夫かな…?ダメだったら直すのメンドクサイなあ。
open/close この記事にコメントする



link もっと前
2008年2月6日 >>> 2008年2月6日
link もっと後

管理用メニュー

link 記事を新規作成

<2008>
<<<02>>>
-----12
3456789
10111213141516
17181920212223
242526272829-

最近のコメント5件

  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」
  • link 24年1月24日
    KKKさん (02/19 02:30)
    「追伸です。\nネットで調べたらマイクロソ...」
  • link 24年1月24日
    KKKさん (02/19 02:25)
    「私もエラーで困ってます\n手動での回復パ...」

最近の記事3件

  • link 24年3月25日
    すずき (03/26 03:20)
    「[Might and Magic Book One TASのその後] 目次: Might and Magicファミコン版以前(...」
  • link 21年10月4日
    すずき (03/26 03:14)
    「[Might and Magicファミコン版 - まとめリンク] 目次: Might and Magicファミコン版TASに挑...」
  • link 24年3月19日
    すずき (03/20 02:52)
    「[モジュラージャックの規格] 古くは電話線で、今だとEthernetで良く見かけるモジュラージャックというコネクタとレセプタク...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 03/26 03:20