カテゴリ | |
---|---|
サマリ | 特定のプラグインを使用したページにだけ表示する文字列を追加したい |
バージョン | 1.4.7 |
投稿者 | |
状態 | 完了 |
投稿日 | 2010-02-05 (金) 04:27:45 |
プラグインの○○.inc.phpを呼び出している(使っている)ページにだけ特定の文字列を追加するといった改造は可能でしょうか?
自分でも試してみたのですが
<?php if ($プラグイン名 != '') { ?> 追加したい文字列 <?php } ?>
とした場合ではうまくいきませんでした。
<?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>のように「メニューバーがあった場合」みたいに特定のプラグインがある場合という分岐ができるのではと思っていたのですが。 -- 2010-02-05 (金) 17:49:28
function plugin_ref_action() { global $ref_size; if (PLUGIN_REF_SIZE) { $ref_size[] = '追加したい文字列'; } }をref.inc.phpの一番したに追記してスキンに
<?php echo $ref_size ?>といれた場所に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) {この部分のあたりでしょうか。 -- 2010-02-06 (土) 23:44:24
// lib/html.phpに下記を追加 $ref_size = ! empty($ref_size) ? join("\n", $ref_size) ."\n" : ''; -if (PLUGIN_REF_SIZE) { +if (PLUGIN_REF_ARGS_SIZE) {としてみたのですがやはり真っ白いエラーでログにも記録がされませんでした。 -- 2010-02-07 (日) 02:18:34
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);となっていました。
PHP Fatal error: Cannot redeclare plugin_ref_action()は同じ名前の関数(ここではplugin_ref_action)を重複定義しようとした場合に出るエラーです。
global $head_tags; if (PLUGIN_REF) { $head_tags[] = '追加したい文字列'; }とした場合、エラーは出ませんでしたが追加文字列もありませんでした。
function plugin_ref_init() { global $head_tags; if (PLUGIN_REF) { $head_tags[] = '追加したい文字列'; } }すると<?php echo $head_tag ?>に追加したい文字列がちゃんと挿入されていましたがなぜか追加したい文字列が複数行にわたって追加される自体に。(たぶん画像の数だけ追加されています)
<?php echo $head_tag ?> </head> <body>のようにもともと<?php echo $head_tag ?> が書かれているので、さらに追記する必要はないはずです。
- 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 ?>を置いたらどうやらちゃんと動いてくれるようでした。
if (preg_match('/^([0-9]+)x([0-9]+)$/', $arg, $matches)) { $params['_size'] = TRUE; $params['_w'] = $matches[1]; $params['_h'] = $matches[2];に変更してみましたが無効になっちゃいました。
if ('PLUGIN_REF') {と読み替えて実行します。(エラーが表示されるのかは、設定に依存しますが) -- 2010-02-10 (水) 03:51:49
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') を使うとファイルを呼び出してから確認をしてしまうので、今回の用途には適しません) -- 2010-02-10 (水) 03:51:49
global $ref_size; if (function_exists('plugin_ref_inline')) {echo 'ref プラグインが呼び出されました';} $ref_size[] = '追加したい文字列'; return ''; }としたところ、色々とエラーがでてしまいました。
// ref size define('PLUGIN_REF_SIZE', '');中に何をいれればいいのか結局わからずじまいでしたが、こうしておく事でfunction plugin_ref_sizeという関数(if (PLUGIN_REF_SIZE) {)が使えるという事なのでしょうか。 -- 2010-02-10 (水) 22:49:57
// 拡張パラメータをチェック 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 プラグインを呼び出した回数分「追加したい文字列」が表示されると思います。 -- 2010-02-11 (木) 02:52:03
return $ref_size[] = '追加したい文字列'; exit($ref_size[] = '追加したい文字列'); $ref_size[] = '追加したい文字列'; exit; return $ref_size[] = '追加したい文字列'; exit;としたのですがどれも失敗となりました。
$ref_size = ! empty($ref_size) ? join("\n", $ref_size) ."\n" : '';のjoin() は、配列を連結して文字列に変換するものです。array('追加したい文字列', '追加したい文字列', '追加したい文字列') を連結すると「追加したい文字列追加したい文字列追加したい文字列」のようになってしまいます。(実際は、連結する時に間に挟む文字しだいで変化しますが)
$ref_size = ! empty($ref_size) ? '追加したい文字列' ."\n" : '';で試してみては? -- 2010-02-11 (木) 16:18:25
$ref_size[] = '';変更箇所が多くなるということですが、一見完璧の様に感じるこの修正もまだいじっておくべき箇所があるということなのですね。 -- 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(なんでも適当な文字) で試してみたところ、
global $ref_size; if ($params['_size']) { $ref_size[] = TRUE; } if ($params['_%']) { $ref_size[] = TRUE; }head_tagは他のプラグインを呼び出した場合にですか。