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

BugTrack-plugin/238

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

リンク(アンカー)の開き方を少し拡張するパッチ

  • 投稿者: あき
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: リリース済
  • 日時: 2005年11月08日 19時17分07秒

 内容

ブラケット一つで囲って記述するリンク(下記のように記述するリンク)、現状では管理者メニューの環境設定画面で、「ウィンドウ内で開く」か「別ウィンドウで開く」かのいずれかが選択できます。

[ヤフージャパン|http://yahoo.co.jp]

しかし、同一サイト内へのリンク(例えばログイン画面へのリンクや編集画面へのリンク)をこのようなリンクで記述しようと思っても、外部URLとして扱われてしまい、この選択肢だけでは融通が利きません。これは、当初ブラケット一つで囲って記述できるリンクは外部URLのみだったことに起因しています。(だと私は思っています。後、作者の意図もあるかもしれませんが…)

ということで、URLの記述が「http://」や「https://」等で始まらない内部URLは内部URLとみなし、本当の外部URLとは区別できるよう、管理者メニューの環境設定画面を拡張してみました。

[ヤフージャパン|http://yahoo.co.jp] ←外部URLと判断
[ログイン|wiki.cgi?action=LOGIN] ←内部URLと判断
[ログイン|http://fs.wikicms.net/wiki/wiki.cgi?action=LOGIN] ←外部URLと判断(敢えて別ウィンドウで表示させたい場合等に指定)

本パッチを適用しない状態では、上記は全て外部URLという扱い。

これにより、内部URLか外部URLかで、別ウィンドウを開くか否か指定できるようになります。

 更新履歴

url_anchor.zip(480)
初版リリース。
url_anchor_rev01.zip(444)
外部URLの判定が「http://〜」又は「https://〜」で判定していたので、「〜://〜」で判定するようにした。(「ftp://〜」等も外部URLとして判定するようにした)

 インストール方法

パッチですので、下記に示す指示に従ってソースを修正して頂くことになります。もしくは、最新バージョンのFSWiki、又はそれに近いバージョンのFSWikiを設定運用されている方は、添付ファイルを解凍してそれぞれのファイルを対応するファイルに上書きする、という方法でも構いません。[1]

最後に、「管理者メニューはそのままでもいい」という方のために、1行パッチの方法についても次項で触れておきます。

lib/Wiki/HTMLParser.pmの406行目辺り(url_anchor関数内)を下記のように修正して下さい。

    if($self->{wiki}->config('open_new_window')==1){

    ↓

    if($self->{wiki}->config('open_new_window')==1 and 
       ($self->{wiki}->config('inside_same_window')==0 or 
        $self->{wiki}->config('inside_same_window')==1 and $url =~ /^:\/\//
       )
      ){

plugin/admin/AdminConfigHandler.pmの73行目辺り(config_form関数内)に下記のように1行追加して下さい。

    OPEN_NEW_WINDOW      => $config->{open_new_window},
    PART_EDIT            => $config->{partedit},

    ↓

    OPEN_NEW_WINDOW      => $config->{open_new_window},
    INSIDE_SAME_WINDOW   => $config->{inside_same_window},
    PART_EDIT            => $config->{partedit},

plugin/admin/AdminConfigHandler.pmの114行目辺り(save_config関数内)に下記のように1行追加して下さい。

  $config->{open_new_window}      = $cgi->param("open_new_window");
  $config->{partedit}             = $cgi->param("partedit");

    ↓

  $config->{open_new_window}      = $cgi->param("open_new_window");
  $config->{inside_same_window}   = $cgi->param("inside_same_window");
  $config->{partedit}             = $cgi->param("partedit");

deve/tmpl/admin_config.tmplの153行目辺り(「外部URLの処理」の固まりの最後)に下記のようにフォームを追加して下さい。

<h3>外部URLの処理</h3>
<p>
  <input type="radio" name="open_new_window" value="0" id="open_new_window_0"
         <!--TMPL_UNLESS NAME="OPEN_NEW_WINDOW"-->checked<!--/TMPL_UNLESS-->>
  <label for="open_new_window_0">ウィンドウ内で開く</label>
  <input type="radio" name="open_new_window" value="1" id="open_new_window_1"
         <!--TMPL_IF NAME="OPEN_NEW_WINDOW"-->checked<!--/TMPL_IF-->>
  <label for="open_new_window_1">別ウィンドウで開く</label>
</p>

    ↓

<h3>外部URLの処理</h3>
<p>
  <input type="radio" name="open_new_window" value="0" id="open_new_window_0"
         <!--TMPL_UNLESS NAME="OPEN_NEW_WINDOW"-->checked<!--/TMPL_UNLESS-->>
  <label for="open_new_window_0">ウィンドウ内で開く</label>
  <input type="radio" name="open_new_window" value="1" id="open_new_window_1"
         <!--TMPL_IF NAME="OPEN_NEW_WINDOW"-->checked<!--/TMPL_IF-->>
  <label for="open_new_window_1">別ウィンドウで開く</label>
</p>
<p>
  <input type="checkbox" name="inside_same_window" value="1" id="inside_same_window"
         <!--TMPL_IF NAME="INSIDE_SAME_WINDOW"-->checked<!--/TMPL_IF-->>
  <label for="INSIDE_SAME_WINDOW">別ウィンドウで開くを指定した場合でも、サイト内リンクなら別ウィンドウを開かない</label>
</p>

上記を行って頂くか、ファイルを上書きして頂けると、管理者メニューの環境設定画面の「外部URLの処理」の項目に、「別ウィンドウで開くを指定した場合でも、サイト内リンクなら別ウィンドウで開かない」というチェックボックスが追加されています。

外部URLへのリンク時は新しいウィンドウを開いてページを表示して欲しいけれど、サイト内の別URLへのリンク時には同じウィンドウ内でページを移動して欲しい、という方は、「別ウィンドウで開く」ラジオボタンと、このチェックボックスをチェックして設定を保存することで、要望どおりの動作が実現します。

 1行パッチ

「管理者メニューを拡張するまでもない」という方は下記のような方法でも対応できます。

lib/Wiki/HTMLParser.pmの406行目辺り(url_anchor関数内)を下記のように修正して下さい。

    if($self->{wiki}->config('open_new_window')==1){

   ↓

    if($self->{wiki}->config('open_new_window')==1 and $url =~ /^:\/\//){

 動作確認バージョン

  • 3.5.9

 コメント

  • CVSにコミットしました。3.5.10で取り込みます。 - たけぞう (2005年12月03日 12時26分10秒)
  • 3.5.10でリリースしました。 - たけぞう (2005年12月04日 16時23分18秒)
  • 3.6.2を使用していますが、上記maintenance.png に示す設定にしても、同一サイトへのリンクが新しいウィンドウにできてしまいます。 - せるま (2006年10月28日 23時54分52秒)
  • 当方例 何故かhtml:// 〜/.../が挿入されて、結果的に外部リンク扱いにされてしまう。ソースを追ってみたところ、Parse.pmのparse_line関数内、318行#任意のURLリンク辺りのelsifでこれが発生している様に見えます。ここを3.5.10相当に戻せば一応同一ウィンドウ内でサイト内リンクが開くようになりますが、正式にはどのように対処すべきでしょうか?なお、殆どのプラグイン無効にした環境でも発生しています。server_hostは空白でもサイト名入力しても同じ挙動。あと、書いてから思いましたが、これはサポート掲示板に書くべきだったかな?(^^;とりあえずこのまま置いておきます。 - せるま (2006年10月29日 01時20分52秒)
お名前: コメント:
  • [1]どのバージョンまで遡ってそれで動作するかは判りかねます。ご了承下さい。
maintenance.png url_anchor.zip url_anchor_rev01.zip

最終更新時間:2014年02月26日 05時22分34秒