**[[質問箱4/25]] [#m9413e54] #author("2018-03-11T19:18:01+09:00;2007-07-15T18:43:40+09:00","","") **[[質問箱/4025]] [#m9413e54] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|アクション型プラグインの値の返し方(return)について| |~バージョン|1.4.x| |~投稿者|[[kahata]]| |~状態|完了| |~投稿日|&new{2007-07-13 (金) 17:39:31};| ***質問 [#i9d1856b] 拙作、[[自作プラグイン/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を繰り返す%%してループする%%にはどのようにすればよいでしょうか?&br;(掲示板などの場合必要な場合があります)~ ヒントかサンプルを紹介して頂くとありがたいです。 よろしくお願いします。 - 少し補足説明・質問すると通常の方法でplugin埋め込みページを表示させたのではkey=valueをhoge_convert()に渡せません。#article、#commentのようにページに書き出すことでもしないと。 -- [[kahata]] &new{2007-07-13 (金) 18:02:27}; ***回答 [#t1aeac7e] - 何をしたいのか良く分かりませんが、convertの中で$script?plugin=hoge&key=valueをfsockopenするとか? -- &new{2007-07-13 (金) 22:45:14}; - やりたいことと実装案がズレている気がするので、PHPを知らないユーザーになったつもりで、そもそも期待している事を説明してもらったほうがいいかもしれない。 -- &new{2007-07-13 (金) 22:55:09}; -- 説明不足でした。例えば100行のテキストファイルを読み込んでwikiのページで部分的に表示する時、ボタン1(リンク1)を押すと1~20行が表示され、ボタン2(リンク2)を押すと21~40行が表示され・・というように表示を切り替えたいのです。 perl/cgiやphpは同じscriptに処理が戻ります%%のでループを組めます%%が、wikiのpluginではaction関数に処理が渡されますので実現の仕方がわかりません。-- [[kahata]] &new{2007-07-13 (金) 23:07:07}; - 何か大きく勘違いされているように見受けられますが、他のWebアプリもPukiWikiプラグインも大まかな仕組みは同じです。plugin_hoge_action() {で定義するページにindex.php?plugin=hogeのリンクを作れば、渡す内容によってページを切替える事ができます。 -- [[taru]] &new{2007-07-14 (土) 00:45:10}; -- actionで書き込みを行い通常ページのconvert表示を変更する動作は、別の閲覧者に上の例でいう21~30行を見せるという事ですよ。 -- [[taru]] &new{2007-07-14 (土) 01:09:37}; - ''解決しました。''皆様たいへんお騒がせしました。当方、あるたいへんな勘違いをしておりました。~ この勘違いは、[[自作プラグイン/include_module.inc.php]]で、post/getの処理をpostした関数と同じ関数にしたことから起こりました。以下のようにpluginがpostされているかどうかで、action型か、convert/(inline)型かを区別することにより解決しました。ヒントありがとうございました。 -- [[kahata]] &new{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]] &new{2007-07-14 (土) 05:52:22}; -- このページを見たプラグイン作成初心者は混乱するでしょう。post/getの処理はactionが実行され、wikiページに書き込まれた文中のplugin定義を処理するときはconvert,inlineです。また別途用意した同一のfunctionを利用する場合でも最後にaction、convertのどちらか実行元に戻るので、表示処理はaction、convertのそれぞれに作り表示内容をreturnで渡してやればよいと思います。 -- [[taru]] &new{2007-07-14 (土) 12:45:44}; -- 丁寧な説明ありがとうございます。正論はおっしゃるとおりで、一般向けな質問ではないようですので%%折をみて削除したいと思います。%%''上記訂正しました。'' wikiに入ればwikiに従えが教訓でした。 -- [[kahata]] &new{2007-07-14 (土) 12:57:58}; -- それじゃ教えて君と変わらないので、他に人にも役立つ話題に直して下さい・・・ -- &new{2007-07-14 (土) 13:37:16}; - さて…、プログラムは最終的に自分の目的通り動けば問題ないのですが、このページやたらと出てくるループという単語の使い方を間違えていませんか? -- [[taru]] &new{2007-07-14 (土) 20:49:53}; -- 自動的にぐるぐる回りませんのでプロプラミングで言うループではないですね・・何と表現すればよいか?,,,, 取り敢えず誤解を生じないよう訂正しておきました。-- [[kahata]] &new{2007-07-14 (土) 21:43:27}; #comment