質問箱/4025

カテゴリ
サマリアクション型プラグインの値の返し方(return)について
バージョン1.4.x
投稿者kahata
状態完了
投稿日2007-07-13 (金) 17:39:31

質問

拙作、自作プラグイン/include_module.inc.phpの使い方を模索しているkahataです。

アククション型(コマンド型)プラグインの戻り値と値の返し方について質問します。
通常のコマンド型プラグイン、plugin_hoge_action()では、以下のようにmsgとbodyの連想配列で値を返して戻りますが、

$retvars['msg'] = $title;
$retvars['body'] = $body;
$post['page'] = $post['refer'];
$vars['page'] = $post['refer'];
return $retvars;

殆どの場合これで問題ないですが、例えば、以下のようなプラグインで・・・・

function plugin_hoge_ation() {
 ....... 処理1 .....
 return $retvars; //配列
}

function plugin_hoge_convert() {
 ....... 処理2 .....
 return $output; //文字列
}

処理2から $script?plugin=hoge&key=value をpostしてhoge_action()を呼び出したとしても、またhoge_convert()に戻って、処理2を繰り返すしてループするにはどのようにすればよいでしょうか?
(掲示板などの場合必要な場合があります)
ヒントかサンプルを紹介して頂くとありがたいです。 よろしくお願いします。

  • 少し補足説明・質問すると通常の方法でplugin埋め込みページを表示させたのではkey=valueをhoge_convert()に渡せません。#article、#commentのようにページに書き出すことでもしないと。 -- kahata 2007-07-13 (金) 18:02:27

回答

  • 何をしたいのか良く分かりませんが、convertの中で$script?plugin=hoge&key=valueをfsockopenするとか? -- 2007-07-13 (金) 22:45:14
  • やりたいことと実装案がズレている気がするので、PHPを知らないユーザーになったつもりで、そもそも期待している事を説明してもらったほうがいいかもしれない。 -- 2007-07-13 (金) 22:55:09
    • 説明不足でした。例えば100行のテキストファイルを読み込んでwikiのページで部分的に表示する時、ボタン1(リンク1)を押すと1~20行が表示され、ボタン2(リンク2)を押すと21~40行が表示され・・というように表示を切り替えたいのです。 perl/cgiやphpは同じscriptに処理が戻りますのでループを組めますが、wikiのpluginではaction関数に処理が渡されますので実現の仕方がわかりません。-- kahata 2007-07-13 (金) 23:07:07
  • 何か大きく勘違いされているように見受けられますが、他のWebアプリもPukiWikiプラグインも大まかな仕組みは同じです。plugin_hoge_action() {で定義するページにindex.php?plugin=hogeのリンクを作れば、渡す内容によってページを切替える事ができます。 -- taru 2007-07-14 (土) 00:45:10
    • actionで書き込みを行い通常ページのconvert表示を変更する動作は、別の閲覧者に上の例でいう21~30行を見せるという事ですよ。 -- taru 2007-07-14 (土) 01:09:37
  • 解決しました。皆様たいへんお騒がせしました。当方、あるたいへんな勘違いをしておりました。
    この勘違いは、自作プラグイン/include_module.inc.phpで、post/getの処理をpostした関数と同じ関数にしたことから起こりました。以下のようにpluginがpostされているかどうかで、action型か、convert/(inline)型かを区別することにより解決しました。ヒントありがとうございました。 -- kahata 2007-07-14 (土) 02:27:29
    if ($vars['plugin']) {
      $retvars['msg'] = $title;
      $retvars['body'] = $body;
      $post['page'] = $post['refer'];
      $vars['page'] = $post['refer'];
      return $retvars;  // 配列型
     }
     else {return $output;} //文字型
    • 蛇足ながら補足ですが、上記コードは自作プラグイン/include_module.inc.php利用した場合の特殊なコード例で、通常のpluginでこのようなループを組む場合ことを実現するには、最初convertから起動してもpostで呼び出されたactionの中で処理すれば可能と思います。 -- kahata 2007-07-14 (土) 05:52:22
    • このページを見たプラグイン作成初心者は混乱するでしょう。post/getの処理はactionが実行され、wikiページに書き込まれた文中のplugin定義を処理するときはconvert,inlineです。また別途用意した同一のfunctionを利用する場合でも最後にaction、convertのどちらか実行元に戻るので、表示処理はaction、convertのそれぞれに作り表示内容をreturnで渡してやればよいと思います。 -- taru 2007-07-14 (土) 12:45:44
    • 丁寧な説明ありがとうございます。正論はおっしゃるとおりで、一般向けな質問ではないようですので折をみて削除したいと思います。上記訂正しました。 wikiに入ればwikiに従えが教訓でした。 -- kahata 2007-07-14 (土) 12:57:58
    • それじゃ教えて君と変わらないので、他に人にも役立つ話題に直して下さい・・・ -- 2007-07-14 (土) 13:37:16
  • さて…、プログラムは最終的に自分の目的通り動けば問題ないのですが、このページやたらと出てくるループという単語の使い方を間違えていませんか? -- taru 2007-07-14 (土) 20:49:53
    • 自動的にぐるぐる回りませんのでプロプラミングで言うループではないですね・・何と表現すればよいか?,,,, 取り敢えず誤解を生じないよう訂正しておきました。-- kahata 2007-07-14 (土) 21:43:27


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-15 (日) 18:43:40
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.259 sec.

OSDN