read.inc.php
ページに別名をつける(Redirectする)
Table of Contents |
概要
ページに別名をつけ、リダイレクトできるようにする read.inc.php の改造です。
別名の定義を AutoAliasName ページで一括管理します。
このページは Pukiwiki の AutoAlias 機能用の設定ページで、それを再利用します。
書式例 Source:AutoAliasName
。
本体改造になりますが、autolink や [[]] リンクで、定義した別名を使用できるようにする改造も用意してあります。
インストール
Plus!
同じ別名を複数のページに付けた場合、選択ページが表示されます。
Pukiwiki Plus! に取り込んでもらいました。rev1498 以上で利用できます。plus:BugTrack/121
本家
同じ別名を複数のページに付けた場合、最初の設定だけが利用されます。 Plus! 用のように get_autoaliases をいじってません。
メイン
以下の内容を read.inc.php に上書きします。
<?php // PukiWiki - Yet another WikiWikiWeb clone. // $Id: read.inc.php,v 1.8 2005/01/15 13:57:07 henoheno Exp $ // // Read plugin: Show a page and InterWiki function plugin_read_action() { global $vars, $_title_invalidwn, $_msg_invalidiwn; $page = isset($vars['page']) ? $vars['page'] : ''; if (is_page($page)) { // ページを表示 check_readable($page, true, true); header_lastmod($page); return array('msg'=>'', 'body'=>''); } else if (! PKWK_SAFE_MODE && is_interwiki($page)) { return do_plugin_action('interwiki'); // InterWikiNameを処理 } else if (is_pagename($page)) { $real = get_autoaliases($page); if ($real != '') { if (is_page($real)) { header('HTTP/1.0 301 Moved Permanently'); header('Location: ' . get_script_uri() . '?' . rawurlencode($real)); return; } else { header('Location: ' . get_script_uri() . '?cmd=edit&page=' . rawurlencode($real)); return; } } $vars['cmd'] = 'edit'; return do_plugin_action('edit'); // 存在しないので、編集フォームを表示 } else { // 無効なページ名 return array( 'msg'=>$_title_invalidwn, 'body'=>str_replace('$1', htmlspecialchars($page), str_replace('$2', 'WikiName', $_msg_invalidiwn)) ); } } ?>
一応差分
--- org.orig/plugin/read.inc.php 2007-06-04 21:33:01.625000000 -0400 +++ org.dev/plugin/read.inc.php 2007-06-04 21:34:13.750000000 -0400 @@ -20,6 +20,13 @@ return do_plugin_action('interwiki'); // InterWikiNameを処理 } else if (is_pagename($page)) { + $real = get_autoaliases($page); + if ($real != '') { + if (is_page($real)) { + header('HTTP/1.0 301 Moved Permanently'); + header('Location: ' . get_script_uri() . '?' . rawurlencode($real)); + return; + } else { + header('Location: ' . get_script_uri() . '?cmd=edit&page=' . rawurlencode($real)); + return; + } + } $vars['cmd'] = 'edit'; return do_plugin_action('edit'); // 存在しないので、編集フォームを表示
おまけ
さらに autolink や [[]] リンクで定義した別名を使用できるようにします。
make_link.php
Link_autoalias クラス内 toString 関数 (get_autoaliases を検索すると楽)
function toString() { $this->alias = get_autoaliases($this->name); if ($this->alias != '') { - $link = '[[' . $this->name . '>' . $this->alias . ']]'; + $link = '[[' . $this->name . '>' . $this->name . ']]'; return make_link($link); } return ''; }
make_pagelink 関数内
function make_pagelink($page, $alias = '', $anchor = '', $refer = '', $isautolink = FALSE) { global $script, $vars, $link_compact, $related, $_symbol_noexists; - $s_page = htmlspecialchars(strip_bracket($page)); + if (! is_page($page) & ($real = get_autoaliases(strip_bracket($page))) != '') { + $autoalias = $page; + $page = $real; + $s_page = htmlspecialchars(strip_bracket($autoalias)); + $r_page = rawurlencode($autoalias); + } else { + $s_page = htmlspecialchars(strip_bracket($page)); + $r_page = rawurlencode($page); + } $s_alias = ($alias == '') ? $s_page : $alias; if ($page == '') return '<a href="' . $anchor . '">' . $s_alias . '</a>'; // if ($page == '') return open_uri_in_new_window('<a href="' . $anchor . '">' . $s_alias . '</a>', 'make_pagelink'); - $r_page = rawurlencode($page); $r_refer = ($refer == '') ? '' : '&refer=' . rawurlencode($refer); if (! isset($related[$page]) && $page != $vars['page'] && is_page($page))