トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/299

ページの作成や編集にはユーザ登録が必要です。

Media Wiki の リダイレクトに似たプラグイン

  • 投稿者: Custom
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: 提案
  • 日時: 2006年06月20日 13時54分23秒

 内容

Media Wiki のリダイレクト(別のページを表示する)機能と似たことを実現させるプラグインです。

対応バージョン

不明。

開発環境は

  • MS-Win XP Pro(SP2)
  • 04WebServer 1.82
  • FreeStyleWiki3.6.1
  • ActivePerl v5.8.8 build 817 for Win32

です。

使い方

{{redirect ページ名}}

とすることでページ名で指定したページを転送表示します。ページ名を省略すると FrontPage を表示します。

殆どテストしていませんので不具合とかたくさんあると思います。でも、これ以上修正する実力がないので修正できる人は修正お願いします。←放棄(^_^;

 サンプル

サンプルを置けるサーバを持っていないのでありません。

代わりに公開していただける方がいらっしゃいましたらお願いします。

動作としては具体的にページ全体を置き換えるかどうか以外は { {include} } プラグインと似ています。

このプラグインでは編集をする場合、直接転送先のページを編集できます。

その為、冒頭に転送元のページ名とリンクを表示します。

転送元のページを編集したい場合はそのリンク先を表示してください。

 現在確認済み問題

  • 無限ループを防ぐため二重/多重転送はできません
    • 転送先のページに redirect プラグインが記述されていた場合、ページが表示できません
  • 実装仕様上
    • 全体的に多少遅い(使用していない他のページの表示まで遅くなる)かも
    • 安定性も悪いかも
    • plugin::core::ShowPage 必須
  • あまり使い物にならない
  • その他?

 内部の実装

  1. initialize フックでフック
  2. $wiki->process_wiki でリクエストページを一度、パース
    1. redirect プラグインが実行されると action パラメータが REDIRECT に変更される
  3. action が実行される
    1. REDIRECT アクションが実行されたら
    2. do_action で plugin::core::ShowPage->do_action 実行[1]
    3. 結果を返す

 インストール

  1. ファイルを解凍する
  2. redirect ディレクトリを FSWiki の plugin ディレクトリに置く
  3. プラグインの設定で redirect プラグインを有効にする

 ダウンロード

初版

ダウンロード(666)

 ライセンス

ライセンスについてよく分からないので、自由に使用・改変などしてください。使用は自己責任です。

 コメント

  • 3.4.6環境で、このプラグインをインストールすると、footnoteプラグインによる脚注の数字のカウントがおかしくなります。具体的にはfootnoteを1個だけ置いた場合[1]と表示されるはずが[2]と表示され、footnoteを2個置くと[1][2]ではなく[3][4]という数字になってしまいます。redirectプラグインをOFFにすると数字は正しくカウントされます。素人の浅知恵で内部実装の2のあたりで何か起きているのでは…と推測したのですが、自力で解決することが出来ず、こちらのプラグインを止めて手動でリダイレクト用ページを作っています。プラグインを正しく両立させる解決法があれば教えて下さい。 - Spex (2016年11月01日 05時14分24秒)
  • 制約はあるが、下記の修正にて対応できる。(制約:プラグイン行がブロックプラグイン内に存在する場合は意図した動作にならない。) - KG (2016年11月09日 14時42分11秒)
--- ./redirect.org/Redirect.pm    Tue Jun 20 00:00:00 2006
+++ ./redirect/Redirect.pm    Wed Nov 09 14:39:02 2016
@@ -34,7 +34,11 @@
     my $page   = $cgi->param('page');
 
     if($name eq 'initialize') {
-        $wiki->process_wiki($wiki->get_page($page));
+        my $contents = $wiki->get_page($page);
+        while ($contents =~ /^{{redirect +(.+)}}$/gm) {
+            paragraph($self, $wiki, $1);
+            $contents = $';
+        }
         return;
     }
     return;
  • process_wiki はページ全体を解析し、プラグイン呼び出し等が行われる。 initialize処理でこれを行うと、後続処理で wiki.cgi が process_wiki でページ解析する為、2回ページ解析することになる。各プラグイン内で情報をキャッシュしたりカウントしたり更新したりする場合には複数回のページ解析によって今回のようなケースも発生する。 - KG (2016年11月09日 14時47分21秒)
  • ちなみに、当プラグインはちょっと面白い実装をしているw - KG (2016年11月09日 14時48分30秒)
  • ありがとうございます!脚注の数字を正しく維持しつつリダイレクト出来るようになりました。 - Spex (2016年11月12日 20時23分02秒)
お名前: コメント:
  • [1]実は 「$wiki->call_handler('');」 でよかったかも
redirect.lzh

最終更新時間:2016年11月12日 20時23分02秒