**[[質問箱4/557]] [#f93456ee]
#author("2018-03-11T20:57:03+09:00;2010-02-13T00:31:04+09:00","","")
**[[質問箱/4557]] [#f93456ee]
|RIGHT:70|LEFT:410|c
|~カテゴリ||
|~サマリ|特定のプラグインを使用したページにだけ表示する文字列を追加したい|
|~バージョン|1.4.7|
|~投稿者||
|~状態|完了|
|~投稿日|&new{2010-02-05 (金) 04:27:45};|
***質問 [#oc15399a]
プラグインの○○.inc.phpを呼び出している(使っている)ページにだけ特定の文字列を追加するといった改造は可能でしょうか?&br;自分でも試してみたのですが
 <?php if ($プラグイン名 != '') { ?>
 追加したい文字列
 <?php } ?>
とした場合ではうまくいきませんでした。

***回答 [#hf7a89db]
- お手軽にすますのなら、[[自作プラグイン/nomenubar2.inc.php]] で使っているような方法が楽かな?&br;プラグイン初期化時に固有のグローバルフラグを立てて、それをスキンで呼び出して分岐条件に使う。 --  &new{2010-02-05 (金) 17:00:16};
- プラグインを使って編集内に記述しないと無理でしたか。
 <?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>
のように「メニューバーがあった場合」みたいに特定のプラグインがある場合という分岐ができるのではと思っていたのですが。 --  &new{2010-02-05 (金) 17:49:28};
- 「arg_check('プラグイン名')」が使えるのは、「cmd=プラグイン名」のような形のURL で直接呼び出した場合だけです。(「cmd=プラグイン名」も「plugin=プラグイン名」も省略した場合は、暗黙的に「cmd=read」で呼び出されますが)&br;それ以外で呼び出されたり使われたりしているプラグインを特定する方法は、デフォルトでは用意されていません。そのため、特定したいプラグインのファイル○○.inc.php の中でグローバルな変数か定数を定義しておいてそれを呼び出して使う、そのファイル○○.inc.php がすでに読み込まれているかを確認する、ぐらいしか方法がありません。 --  &new{2010-02-06 (土) 04:52:03};
- 例えばrefプラグインのサイズ変更をしている時に といった細かい設定も可能なのでしょうか?&br;他のプラグインをみて参考にしてやってみようと思ったのですがエラーページとなりました。
 function plugin_ref_action()
 {
     global $ref_size;
 
     if (PLUGIN_REF_SIZE) {
         $ref_size[] = '追加したい文字列';
     }
 }
をref.inc.phpの一番したに追記してスキンに
 <?php echo $ref_size ?>
といれた場所にrefプラグインを使っていてサイズ変更している場合&br;「追加したい文字列」が挿入されると考えたのですが、エラーでした。 --  &new{2010-02-06 (土) 22:36:07};
- エラーメッセージの内容が書かれていないので詳細がわからないですが、上のコメントに書かれているとおりに追記したのなら、「plugin_ref_action 関数を重複登録しようとした」、「PLUGIN_REF_SIZE という未定義の定数を使った」、「(スキン内でglobal $ref_size; をしていないので)ref_size という未定義の変数を使った」、のどれかのエラーは出ていたと思います。 --  &new{2010-02-06 (土) 23:44:24};
-- ref プラグインでサイズ指定を使っている時だと、
 	// 拡張パラメータをチェック
 	if (! empty($params['_args'])) {
 		$_title = array();
 		foreach ($params['_args'] as $arg) {
 			if (preg_match('/^([0-9]+)x([0-9]+)$/', $arg, $matches)) {
 				$params['_size'] = TRUE;
 				$params['_w'] = $matches[1];
 				$params['_h'] = $matches[2];
 
 			} else if (preg_match('/^([0-9.]+)%$/', $arg, $matches) && $matches[1] > 0) {
この部分のあたりでしょうか。 --  &new{2010-02-06 (土) 23:44:24};
- いつもならphpのエラーログに記載されているはずなんですが、なぜか真っ白のエラーだけでログが表示も記録もされませんでした。&br;エラーは出てると思うのですが、なぜログに記録もされてないのか謎です。&br;とりあえずまた少し試してみました。
 // lib/html.phpに下記を追加
 $ref_size = ! empty($ref_size) ? join("\n", $ref_size) ."\n" : '';
 
 -if (PLUGIN_REF_SIZE) {
 +if (PLUGIN_REF_ARGS_SIZE) {
としてみたのですがやはり真っ白いエラーでログにも記録がされませんでした。 --  &new{2010-02-07 (日) 02:18:34};
- [[Q. 設置後にアクセスすると画面が真っ白になって、エラーメッセージが何も表示されない>Q&A/インストール#x80b2883]] を参考にして、エラーレベルの閾値を変更するとか。 --  &new{2010-02-07 (日) 18:07:46};
- エラーが表示されるようになりましたが、関係無いエラーまで表示されるようになりました。&br;一応関係のありそうな箇所を。
 PHP Fatal error:  Cannot redeclare plugin_ref_action()
  (previously declared in /ref.inc.php:386) in /ref.inc.php on line 442
 
 // Output an image (fast, non-logging <==> attach plugin)
 function plugin_ref_action()
 { ←386
 .
 .
 .
 function plugin_ref_action()
 {
     global $ref_size;
 
     if (PLUGIN_REF_SIZE) {
         $ref_size[] = '追加したい文字列';
     } ←442
 }
 ?>
関係あるかわかりませんが、他のエラーも。
 PHP Notice:  Only variable references should be returned by reference in /convert_html.php on line 145
 return new Div($matches);
 PHP Notice:  Only variable references should be returned by reference in /convert_html.php on line 102
 return new Inline($text);
となっていました。&br;一応エラーが増えすぎると困るので、初期の段階ので試してみました。 --  &new{2010-02-07 (日) 22:00:47};
- すでに上のコメントで指摘されているようですが、
 PHP Fatal error:  Cannot redeclare plugin_ref_action()
は同じ名前の関数(ここではplugin_ref_action)を重複定義しようとした場合に出るエラーです。
&br;convert_html.php のエラーは、[[dev:BugTrack2/146]] の話題と同じだと思われます。 --  &new{2010-02-07 (日) 23:23:54};
- ということはconvert_html.phpはとりあえず無視してよさそうですね。&br;定義が同じだということでしたか。&br;自分でゼロから何かを作った事をないので、どういう定義にしたらよいか検討がつきませんでした。&br;plugin_ref_○○()というのは自分で適当につけちゃっていいものなんでしょうか? --  &new{2010-02-08 (月) 04:46:59};
- [[PHP の言語リファレンス>http://jp2.php.net/manual/ja/langref.php]]を守っていれば大丈夫と言いたいところですが、[[dev:PukiWiki/Plug-inの仕様]]で説明されている特別な役割の名前(plugin_<プラグイン名>_action() など)は理解してから使う方が無難です。&br;また、すでにある名前の関数の場合は(経験されたように)エラーになってしまうので、別の名前の関数を作るか、放り込もうとしている内容を既存の関数内にねじ込むか、する必要があります。&br;あと、適当な名前の関数を作った場合は、それを呼び出して実行するのを忘れないようにして下さい。改造前と同じ結果になってしまいますよ。 --  &new{2010-02-08 (月) 12:08:16};
- ありがとうございます。参照先URIを参考にして試してみました。&br;とりあえず動くのか試したかったのでサイズなどの細かいのは後回しにし、まずは元からある$head_tagsに追加してみようとしてみました。&br;ref.inc.phpのfunction plugin_ref_action()内の一番下に下記を追加。
 	global $head_tags;
 
 	if (PLUGIN_REF) {
 	$head_tags[] = '追加したい文字列';
 	}
とした場合、エラーは出ませんでしたが追加文字列もありませんでした。&br;もちろんスキンに<?php echo $head_tag ?>を追加した状態です。&br;自分としてこれで大丈夫だと思ったのですが、function plugin_ref_init()とかに記入するべきだったのでしょうか。  --  &new{2010-02-08 (月) 20:21:34};
- あれ?「[[Q. 添付ファイルが表示できない>Q&A/プラグイン/attachプラグイン#h577586a]]」のように画像が表示されない問題は発生しませんでしたか。&br;ref プラグインが生成する(?plugin=ref がついている)URL に直接アクセスして表示させてみればなんとなくわかると思いますが、plugin_ref_action 関数の役割は添付した画像ファイルへのアクセス代行です。画像データしか表示させませんので、この関数の中に記述してもスキンに影響を与えることはありません。 --  &new{2010-02-09 (火) 02:11:53};
- そうですね。画像は普通に表示されていました、悪く言えば何も変わってないという事になっていました。&br;そこで一番下に下記のように追加してみました。
 function plugin_ref_init()
 {
  	global $head_tags;
  
  	if (PLUGIN_REF) {
  	$head_tags[] = '追加したい文字列';
  	}
 }
すると<?php echo $head_tag ?>に追加したい文字列がちゃんと挿入されていましたがなぜか追加したい文字列が複数行にわたって追加される自体に。(たぶん画像の数だけ追加されています)&br;1つの画像を見つけた1個追加という動作してるんだなと考えたのですが、新たに関数を作ればいいと思い、&br;function plugin_ref_size()という関数を作ってみたのですが、これを呼び出す方法?がわからず、手詰まりになってしまいました。 --  &new{2010-02-09 (火) 03:46:09};
-- と思ったのですが$head_tags[] = '追加したい文字列'の下にreturn '';を追加したら1つだけになりました。&br;かなり手探りの状態なのですが、ここまではセキリティ関連とか、特に問題ないでしょうか?&br;大丈夫でしたら難しそうなサイズ変更している時など、細かい状態の場合で動くようにチャレンジしてみたいです。 --  &new{2010-02-09 (火) 04:45:49};
- さすがにまずいので、そろそろ忠告を。&br;$head_tags は本来、HTML のhead タグ内に追記するタグの内容そのものを放り込むために用意されたものです。そしてそれを実現するために、デフォルトのスキンには
 <?php echo $head_tag ?>
 </head>
 <body>
のようにもともと<?php echo $head_tag ?> が書かれているので、さらに追記する必要はないはずです。&br;$head_tags にただの文字列を入れたり、<?php echo $head_tag ?> をhead タグ内以外の場所に追記した場合は、不正なHTML 構文になるだけではなく、心配されているセキリティ関連の問題が発生する可能性がでてきます。 --  &new{2010-02-09 (火) 16:27:24};
-- 上に挙がっている「PHP の言語リファレンス」の中に関数に関する説明もあったんですが・・・、見てませんでしたか。&br;例としてスキン内で使われている関数呼び出しを1つ提示しておきます。
 if (! defined('UI_LANG')) die('UI_LANG is not set');
ここでは[[defined()>PHP関数:defined]] と[[die()>PHP関数:die]] を使っていますが、自分で定義した関数も同じように「関数名()」と書けば呼び出すことができます。 --  &new{2010-02-09 (火) 16:50:21};
- <?php echo $head_tag ?>では無く、新しく<?php echo $ref_size ?>を作ってみました。&br;lib/html.phpの
 -	global $nofollow;
 +	global $nofollow, $ref_size;
 .
 .
 .
 	// Tags will be inserted into <head></head>
 	$head_tag = ! empty($head_tags) ? join("\n", $head_tags) ."\n" : '';
 
 +	// ref_size
 +	$ref_size = ! empty($ref_size) ? join("\n", $ref_size) ."\n" : '';
 
 function plugin_ref_init()
 {
  	global $ref_size;
  
  	if (PLUGIN_REF) {
  	$ref_size[] = '追加したい文字列';
  	return '';
  	}
 }
として追加し、スキン内の任意の場所に<?php echo $ref_size ?>を置いたらどうやらちゃんと動いてくれるようでした。&br;これでしたら新しく関数を作らなくて、後は分岐させていくだけでもよいのでしょうか?&br;if (PLUGIN_REF) {←でrefプラグインがある場合という認識なのですが、これを同じref.inc.php内にあった
  			if (preg_match('/^([0-9]+)x([0-9]+)$/', $arg, $matches)) {
 				$params['_size'] = TRUE;
 				$params['_w'] = $matches[1];
 				$params['_h'] = $matches[2];
に変更してみましたが無効になっちゃいました。&br;ここがサイズ変更の部分だと思ったのですが。 --  &new{2010-02-09 (火) 18:00:29};
-- 関数についてのページは見てみたのですが、英語ばかりで中身がまったくわかりませんでした。&br;それでfunction plugin_ref_init()で大丈夫ならこれをこのままでやってみようかと思っちゃいまして。&br;新しくプラグイン内に関数を作った場合、関数を同じプラグイン内の関数を呼び出してからglobal $ref_size;で<?php echo $ref_size ?>に記載するのか、&br;それともスキン内の<?php echo $head_tag ?>新しく作った関数で直接呼び出すのかとか、&br;もしくは<?php echo $ref_size ?>では無く、スキン内にif (! function plugin_ref_size()) function plugin_ref_size(is not set');とすれば勝手に追加したい文字列が挿入してくれるのかなど、&br;色々考えたんですが混乱しちゃいました。&br;function plugin_ref_init()が使えるならこのままにしておこうかという考えでした。 --  &new{2010-02-09 (火) 18:57:52};
- ひょっとして、[[関数のヘルプの目次ページ>http://jp2.php.net/manual/ja/language.functions.php]]だけを見てましたか?目次ページに概要文が続くこともありますが、(現在のヘルプの構成ルールでは)目次の子ページ(ここでは[[ユーザー定義関数>http://jp2.php.net/manual/ja/functions.user-defined.php]]など)に説明の本文が存在します。子ページを見ていたのなら、「英語ばかりで~」という感想はないはずですし。それとも、表示言語を間違って変更したのかな。 --  &new{2010-02-10 (水) 03:51:49};
-- 「if (PLUGIN_REF) {←でrefプラグインがある場合」という認識は間違いです。事前にPLUGIN_REF という名前の定数を定義しない限り、PHP はNotice エラーを発行して
 if ('PLUGIN_REF') {
と読み替えて実行します。(エラーが表示されるのかは、設定に依存しますが) --  &new{2010-02-10 (水) 03:51:49};
-- plugin_<プラグイン名>_init() は、プラグイン''実行前''に1度だけ必ず呼び出される場所です。この関数には、プラグインにどんなパラメータを指定したのかなどの情報は一切送られてきません。つまり、この関数内で分岐を作っても希望している動作はしないでしょう。 --  &new{2010-02-10 (水) 03:51:49};
-- 「if (! function plugin_ref_size()) function plugin_ref_size(is not set');」を実際に実行させたらエラーになると思います。関数がすでに定義されているかを調べるには[[function_exists()>PHP関数:function_exists]] を使います。これを使ってスキン内に分岐を作る場合は、
 if (! function_exists('plugin_ref_inline')) {echo 'ref プラグインが呼び出されていません';}
や
 if (function_exists('plugin_ref_inline')) {echo 'ref プラグインが呼び出されました';}
のようにして、「ファイル(ここではref.inc.php)が読み込まれるまではそのファイルで定義されている関数が登録されない」という事を利用することになります。この場合も、指定したパラメータは分岐に関係しません。(ちなみに、function_exists('plugin_ref_inline') の代わりにexist_plugin_inline('ref') を使うとファイルを呼び出してから確認をしてしまうので、今回の用途には適しません) --  &new{2010-02-10 (水) 03:51:49};
- 関数のページはそこの目次のページをみていました。一番上にあったのでそこをまず見ないといけないのかなと思いまして。&br;大本の前提をみておかないと続きを見ても意味がないと思い、下層ページはみませんでしたすいません。&br;function plugin_ref_initは無理なのですね。そこでみたところfunction plugin_ref_convertの一番下にいれればいいのかなと思い次の様にしてみました。
  	global $ref_size;
 
 	if (function_exists('plugin_ref_inline')) {echo 'ref プラグインが呼び出されました';}
 	$ref_size[] = '追加したい文字列';
 	return '';
 	}
としたところ、色々とエラーがでてしまいました。&br;自分でもなんか間違ってそうだなとは思っていましたが、とりあえず試しました。 --  &new{2010-02-10 (水) 22:20:51};
-- 分岐させたい場合は、ref.inc.php内でそれを指定し、その結果をスキン内の<?php echo $ref_size ?>で表示するのか、&br;それともスキン内に分岐を作り、マッチした時だけ<?php echo $ref_size ?>が表示されるのかのどちらかの方法ですよね?&br;if (function_existsを直接スキンにいれた場合はそのままの文字が表示されてしまったので、global $ref_size;の下で問題ないと思ったのですが、convert内がダメだったのでしょうか。&br;定数の定義はrefプラグインの上の方に追加してみたのですが
 // ref size
 define('PLUGIN_REF_SIZE', '');
中に何をいれればいいのか結局わからずじまいでしたが、こうしておく事でfunction plugin_ref_sizeという関数(if (PLUGIN_REF_SIZE) {)が使えるという事なのでしょうか。 --  &new{2010-02-10 (水) 22:49:57};
-- 他に$head_tagsを使って表示しているプラグインを参考にしようと思ったところ、navi.inc.phpがconvert内に使っているのを見つけました。&br;そちらはif (PLUGIN_NAVI_LINK_TAGS) {となっていましたが、&br;定数の定義はdefine('PLUGIN_NAVI_LINK_TAGS', FALSE);となっていたので、REF_SIZEにもFALSEかTRUEのどちらかをいれればよさそうな気がしました。 --  &new{2010-02-10 (水) 23:50:01};
- すいません、説明が少し抜けていました。[[HTML からの脱出 - PHP Manual>http://jp2.php.net/manual/ja/language.basic-syntax.phpmode.php]] にもあるように、PHP の開始タグと終了タグの間に書かないとそのままの文字が出力されてしまいます。追記場所によってはタグが入れ子になってエラーが出るので、意図的に省略して例を書いていました。 --  &new{2010-02-11 (木) 02:52:03};
-- 30x40 のようなパラメータを読み取るには、ref.inc.php 内で処理する方がページのソースを解析するよりも楽です。あとは、分岐に応じてref.inc.php 内で追加したい文字列を先に指定してそれをスキンで呼び出すのか、それとも分岐に必要なデータ(1度でも指定されたかどうかなど)を指定してそれをスキン内での分岐条件に使うために呼び出すのか、という違いぐらいです。&br;
  	// 拡張パラメータをチェック
  	if (! empty($params['_args'])) {
  		$_title = array();
  		foreach ($params['_args'] as $arg) {
  			if (preg_match('/^([0-9]+)x([0-9]+)$/', $arg, $matches)) {
  				$params['_size'] = TRUE;
  				$params['_w'] = $matches[1];
  				$params['_h'] = $matches[2];
  
  			} else if (preg_match('/^([0-9.]+)%$/', $arg, $matches) && $matches[1] > 0) {
  				$params['_%'] = $matches[1];
  
  			} else {
  				$_title[] = $arg;
  			}
  		}
  
  		if (! empty($_title)) {
  			$title = htmlspecialchars(join(',', $_title));
  			if ($is_image) $title = make_line_rules($title);
  		}
  	}
 +	global $ref_size;
 +	if ($params['_size']) {
 +		$ref_size[] = '追加したい文字列';
 +	}
(たぶん<?php echo $ref_size ?> をスキンに書いたままだと思うので)$ref_size を使う一例を挙げておきますが、サイズ指定をしてref プラグインを呼び出した回数分「追加したい文字列」が表示されると思います。 --  &new{2010-02-11 (木) 02:52:03};
- なるほど、この下に置けばよかったのですね。&br;実際にやってみたら複数ですが表示されました。ありがとうございます。&br;前回の様に1個だけ表示させたいと思い、return;を追加したのですが今回はこれで1個だけにはなりませんでした。&br;原因を自分なりに考えてみたのですが、initの場合は最初の1回だけ読み込むと書いてあったので、return;で終了させたからその1回(1個)で終わりという解釈でしょうか。&br;それでreturn;で終了させても1回だけじゃ終わらない関数は 回数分調べる で複数個になってしまうという感じでしょうか。&br;一応調べてみて色々試してみました。
 return $ref_size[] = '追加したい文字列';
 
 exit($ref_size[] = '追加したい文字列');
 
 $ref_size[] = '追加したい文字列';
 exit;
 
 return $ref_size[] = '追加したい文字列';
 exit;
としたのですがどれも失敗となりました。&br;returnが関数を停止?でexitが1個表示した時点でref.inc.php自体を停止すると思ったのですが、複数表示に。&br;htmlと違って検索エンジンで検索してもなかなかヒットしないのですね。&br;というより検索の仕方がヘタなのかもしれないですが「php 関数 1回だけ」とかでしてみました。&br;require_onceというのかなとも思ったのですがこれはファイルを読み込む時のみなのですね。 --  &new{2010-02-11 (木) 06:52:50};
- 関数を呼び出した場所にreturn で指定した値を返してその関数の実行を終了するので、「returnが関数を停止」という認識は半分正解というところでしょうか。ただ、本来その関数が返すべきデータ(添付ファイルへのHTML リンクなど)を返さなくなるので、1番目と4番目は関数を呼び出した場所近辺でPHP エラーが発生してしまいます。&br;[[exit()>PHP関数:exit]] はリクエストを強制終了するので、2番目と3番目は本文の出力も実行されなかったはずです。 --  &new{2010-02-11 (木) 16:18:25};
-- 詳しい事はPHP マニュアルの配列に関する説明などを見てもらうとして、
	$ref_size = ! empty($ref_size) ? join("\n", $ref_size) ."\n" : '';
の[[join()>PHP関数:join]] は、配列を連結して文字列に変換するものです。array('追加したい文字列', '追加したい文字列', '追加したい文字列') を連結すると「追加したい文字列追加したい文字列追加したい文字列」のようになってしまいます。(実際は、連結する時に間に挟む文字しだいで変化しますが)&br;実行するごとにメッセージを変化させてそれをすべて表示させたいなら別ですが、そうでないのなら配列を使ってデータを保管するメリットはありません。メモリの無駄使いというデメリットの方が大きくなってしまいます。&br;とはいえ、変更箇所が多くなると大変でしょうからまずは
	$ref_size = ! empty($ref_size) ? '追加したい文字列' ."\n" : '';
で試してみては? --  &new{2010-02-11 (木) 16:18:25};
- プラグインの方ではなく、lib/htmlをいじるという方法もあったのですね。&br;プラグインの方をいじらないといけないと思っていましたが、色々柔軟に考えないと解決しないものなのですね。&br;head_tagsにはデフォルトでjoinとなっているのは、これは複数の使い道があるのでこうなってしまってるのでしょうか?&br;ref_sizeの様に目的が1つの場合はjoinは使わない方がいいという解釈に至ってしまいました。&br;上記の修正を試してみたのですが、当初描いていた動作となってくれました。ありがとうございます。&br;ref.in.phpの方は下記のように中を空にしています。
 		$ref_size[] = '';
変更箇所が多くなるということですが、一見完璧の様に感じるこの修正もまだいじっておくべき箇所があるということなのですね。 --  &new{2010-02-12 (金) 02:25:14};
-- 応用というわけでもないですが、他のプラグインをマネして新しいプラグインを作ってみました。
 free.inc.php
 <?php
 function plugin_free_convert()
 {
 	global $free;
 
 	$num = func_num_args();
 	if ($num == 0) { return 'Usage: #free(free)'; }
 	$args = func_get_args();
 	$content = htmlspecialchars($args[0]);
 
 	$free[] = ''.$content.'';
 	return '';
 }
 ?>
 
 free2.inc.php
 <?php
 function plugin_free2_convert()
 {
 	global $free2;
 
 	$num = func_num_args();
 	if ($num == 0) { return 'Usage: #free2(free2)'; }
 	$args = func_get_args();
 	$content = htmlspecialchars($args[0]);
 
 	$free2[] = '';
 	return '';
 }
 ?>
 
 lib/html.php
 +	$free = ! empty($free) ? join("\n", $free) ."\n" : '';
 +	$free2 = ! empty($free2) ? '追加したい文字列' ."\n" : '';
 
 スキン内の表示したい場所に下記を追加
 <?php echo $free ?>
 <?php echo $free2 ?>
として、#free(追加したい文字列)、#free2(なんでも適当な文字) で試してみたところ、&br;free2には追加したい文字列が挿入され、freeには(追加したい文字列)がそのまま直で表示されるのですね。&br;freeには正規表現で記入しないといけない?のか<>とかタグ系は出力できないので、free2を使ってみようかと思います。&br;こちらのマネして作ってみたプラグインは質問の内容とは関係ないので、これじゃあ危なかったりおかしいので使わない方がいいという場合、&br;その旨だけ言ってもらえるとありがたいです。 &br;もしかしたらこういう感じで使えるのかなと思ったぐらいですので。--  &new{2010-02-12 (金) 02:29:12};
- 変更箇所が多いというか、パターンが多いというだけだったり。[[empty()>PHP関数:empty]] をそのままにするのなら、$ref_size = TRUE; とか$ref_size = 1; にするというのでも、かまわないですし。(毎回、同じ内容を代入しようとはするけど、配列の要素が増え続けるよりはマシ) --  &new{2010-02-12 (金) 06:51:48};
-- head_tags 変数が追加されるきっかけが、[[dev:BugTrack/309]] ですからね。中身が違うものを複数登録する事を念頭に設計したようです。他の使い方の例としては、特定のプラグインを呼び出した場合だけcss ファイルを追加呼び出しするために使うとか。 --  &new{2010-02-12 (金) 06:51:48};
-- spam などを仕込まれないように、不特定多数のユーザーが書き込める場所でエスケープ(&lt; &rarr; &amp;lt; など)を実行したり、パラメータをチェックするしたりするのは基本です。[[dev:PukiWiki/Plug-inの仕様]]を確認してください。[[stationary プラグイン>PukiWiki/1.4/Manual/Plugin/S-U#ifad4486]]というサンプルも新しく作る場合の参考になると思います。 --  &new{2010-02-12 (金) 06:51:48};
- ()を外してTRUEか1にするのですね、それとサイズを%指定した場合は適用されてなかったので以下のようにしてみました。
 	global $ref_size;
	if ($params['_size']) {
		$ref_size[] = TRUE;
	}
	if ($params['_%']) {
		$ref_size[] = TRUE;
	}
head_tagは他のプラグインを呼び出した場合にですか。&br;分岐は無く、呼び出した場合でhrad内にいれるのなら新しくref_sizeみたいに作らなくてもhead_tagをそのまま使ってもよさそうですね。&br;エスケープは調べてみたのですが、htmlspecialchars辺りでなんとかしてくれてるのかと思いました。&br;stationaryなんて聞いた事もなかったのですが、そういう用途があったのですね。&br;このプラグインでactionやinlineなど全部試してみました。&br;自分が最初にaction内にいれようとしてましたが、まったく見当違いでしたね。URLから呼び出すのにその中にいれても。。。&br;free.inc.phpはそのままタグ使えないのは当たり前なのですね。スクリプトとか埋め込まれたら一大事という事を知りました。自分だけが編集する場合にはまだ大丈夫そうですが。&br;色々大変参考になりました。他のプラグインでも今回の事を参考に試してみようと思います。&br;とりあえず当初の質問の答えをいただたので、これにて完了にしておきますね。&br;長々とお付き合いいただき本当にありがとうございました。 --  &new{2010-02-12 (金) 14:45:16};

//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.043 sec.

OSDN