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

BugTrack-plugin/237

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

Wikiページのラベル(別名)がイメージのURLの場合でもイメージを表示する改造

  • 投稿者: ZON
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: 提案
  • 日時: 2005年11月08日 13時22分18秒

 内容

※2006年3月1日 追記

この改造は最新の BugTrack-plugin/160に含まれる a_img プラグインによって充分に達成することが出来ます。

この改造の利点はプラグインに依らず標準のFSWiki書式でイメージがラベルになるという部分で、かつ既にサイト上に使いまわしたい画像がアップロードされている場合のみです。

これから利用するという方は、上記プラグインの利用をお薦めします。

 改造の目的など

WikiでないサイトからWikiへとサイト管理を変更した場合に、既にアップロード済みのコンテンツをそのまま利用したいケースも少しはあるかと思います。特にイメージデータをもう一度ページに合わせて再アップロード&登録が、数が多すぎて手間である場合とか、一つのイメージを複数のページから参照して表示したい場合とか。

(僕の場合がそうでした)

これまで IFrame プラグインなども作ってみましたが、イメージを扱っていて wiki のページとケースによって混ぜて使いたい事も出てきまして、改造に手を出すことにしました。

既出の BugTrack-plugin/91 に「リンクの別名にイメージのURLが指定されたときはイメージを表示する」改造があります。これはURLアンカのラベルに画像URLなら画像を表示する、バナー表示に便利な改造です。

これを参考にしまして、wikiページへのリンクの場合でも、ラベルが画像URLなら画像を表示してリンクを貼るような改造をしてみました。

とりあえず欲しい機能を書き加えただけで細かい判定をしていませんので、この改造には十分注意して下さい。……不十分ですが、自サイトの画像に限る方法として、特定のディレクトリに含まれるもののみ判定をするようにしてみました。一ヶ所だけです。

※※Wikiページに添付された画像を使ってリンクを作成するのでであれば BugTrack-plugin/160 の「装飾用HTMLタグプラグイン」に含まれる a_img プラグインを使用する方が作法に則った利用になると思います。

使用説明と例

まず、ラベル付きのURLはこのようになります。

A.ラベルは任意

[ラベルは任意|./wiki.cgi?page=%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%C5%EA%B9%C6]

これに対して、ラベル付きのWikiページへのリンクはこのようになります

B.ラベルは任意-wiki

[[ラベルは任意-wiki|プラグイン投稿]]

BugTrack-plugin/91 の改造は、上記 A. のケースでラベルに任意のURLで与える画像を表示するものでした。この場合、リンク先にwikiページを指定するためにはエンコードされた文字列を扱う必要があり、数が増えると記述ミスにつながります。

そこで、上記 B. のケースでラベルに任意のURLで与える画像を表示するようにしたものが今回の改造です。

改造後の使いかたは次のようになります。(※空白が含まれるとダメです)

[[ http://で始まりjpeg、gif、png等の拡張子で終わるURL | Wikiページ名 ]]

これで画像リンクが作成されます。一つの画像を複数のページからボタンとして何度も使いたい時などは有用でしょう。

再改造によって、次のパターンでも認識します。

[[ ./image/で始まりjpeg、gif、png等の拡張子で終わるURL | Wikiページ名 ]]

imageの部分は改造時に変更できます。ここを任意にするのはさすがに恐いので止めた方がよいでしょう。

繰り返しになりますが、用の無い人には無用の改造ですので注意してください。wikiを使うのであれば画像もページ添付で管理する方が理にかなっておりますので。

利用について

自己責任でご利用下さい。それから僕は場当たり的な改造は得意ですが、それほど能力が高いわけではありませんので改造リクエストには応じられません。ごめんなさい。

改造部分 …… lib/wiki/HTMLParser.pm

※以下はオリジナル
#==============================================================================
# Wikiページへのアンカ-org
#==============================================================================
sub wiki_anchor {
	my $self = shift;
	my $page = shift;
	my $name = shift;
	
	if(!defined($name) || $name eq ""){
		$name = $page;
	}
	if($self->{wiki}->page_exists($page)){
		return "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\" class=\"wikipage\">".
		       &Util::escapeHTML($name)."</a>";
	} else {
		return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
		       "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\">?</a>";
	}
}
※以下は改造後(再改造)
sub wiki_anchor {
	my $self = shift;
	my $page = shift;
	my $name = shift;
	
	if(!defined($name) || $name eq ""){
		$name = $page;
	}

	my $label = "";
	# ファイル名に画像の拡張子が含まれていることの判定
	if($name =~/\.(gif|jpg|jpeg|bmp|png)$/i){
		# httpで始まり画像の拡張子で終る値の判定
		if($name =~ /(http|https):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*.(gif|jpg|jpeg|bmp|png)$/){
			# URLで画像指定の場合の返し
			$label = "<img src=\"".$name."\" border=0>";
		} elsif($name =~ /\.\/image\/[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*.(gif|jpg|jpeg|bmp|png)$/){
		# ./image/で始まり画像の拡張子で終る値の判定
			# ディレクトリ指定で画像指定の場合の返し
			$label = "<img src=\"".$name."\" border=0>";
		}
	}else{
	# 拡張子が画像のものでないものは全てただのテキスト扱い
	        $label = Util::escapeHTML($name);
	}

	if($self->{wiki}->page_exists($page)){
		return "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\" class=\"wikipage\">".
		       $label."</a>";
	} else {
		return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
		       "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\">".$label."?</a>";
	}
}

 コメント

お名前: コメント:

最終更新時間:2006年03月03日 09時15分35秒