** switchcontents.inc.php [#x52ebb4e] |RIGHT:100|LEFT:360|c |~サマリ|表示コンテンツ切り替えプラグイン| |~リビジョン|0.9| |~対応バージョン|1.4.7| |~投稿者|[[jidaikobo]]| |~投稿日|&new{2007-02-11 (日) 17:42:03};| #contents *このプラグインは? [#oa23a790] こんな言語切り替えはどうかなと思って作ってみました。言語切り替え以外にもコメントだけ分けるとかもできると思います。ご意見いただけると幸いです。書式は下記の通りです。 #switchcontents(属性値){{ コンテンツをここに書く }} *関連 [#f6e41304] -[[自作プラグイン/nego.inc.php]] -[[pukiwiki plus! Plugin/multilang.inc.php>plus:Plugin/multilang.inc.php]] *インストールの仕方 [#p11f5bd4] v 0.9 からは厳密には PukiWiki のプラグインの仕様に則っていません。skin ファイルを直に編集します。 skin ファイルの冒頭箇所((どこでもいいですが、悩むなら10行目あたりでもいいです))に下記スクリプト片を貼付けます。 include_once( PLUGIN_DIR . 'switchcontents.inc.php' ) ; list( $title,$page,$body,$swc_ctrl ) = switchcontents( $title,$page,$body ) ; $body = $swc_ctrl . $body ; すると、コンテンツ内に switchcontents プラグインがあると、処理をするようになります。 $swc_ctrl には、スイッチ用のコントロールが入っているので、上記スクリプト片の、三行目をコメントアウトして、$swc_ctrl をたとえばメニュー部分などにおくこともできると思います。 include_once( PLUGIN_DIR . 'switchcontents.inc.php' ) ; list( $title,$page,$body,$swc_ctrl ) = switchcontents( $title,$page,$body ) ; //$body = $swc_ctrl . $body ; *属性値(0.8までの属性値と異なっています) [#wc36206e] **switch='' [#c4f03326] ここにコンテンツの切り替え用の名称を入れます。たとえば english などです。 **title='' [#kf11cc6d] 切り替えられるコンテンツのタイトルです。要注意なのは、コンテンツを切り替えた状態で「編集」しようとすると、新規ページになることです。 *文例 [#w36683eb] *テストページ これはテストページ #switchcontents(switch='english',title='Test page'){{ *Test page this is Test page. }} * 0.9 での実験 [#t7e1722a] - 0.8 では、アクション型プラグインでなんとかしようとしていたので、メニューがなくなったりしていましたが、ちょっと考え方を変えてみました。0.9ではメニュー部分はなくなりません。 - なるべく get で引き回すように目指してみました。たとえば下記のようなコンテンツからのリンクは、目標ページに同じスイッチを探そうとします。 #switchcontents(switch='english',title='Test page'){{ *Test page this is Test page. [[targetpage]]. <- このリンクは targetpage 中の english コンテンツを目指します。 }} 目標ページに目標スイッチがなくても無視されるだけです。 なお、目標ページに目標スイッチがあるけど、リンク時は別のスイッチ、あるいはオリジナルにリンクしたいときは、下記のようにそれを明示しないといけません。 #switchcontents(switch='english',title='Test page'){{ *Test page this is Test page. [[targetpage:http://example.com/index.php?cmd=read&page=targetpage]]. }} - 現状のスイッチは $vars['switch'] にあるので、スイッチごとにメニューを替えるようなこともできるとは思います。 *ダウンロード [#jbcd2eb2] UTF-8 版のみです。EUC には各自変換してお使いください。 -%%switchcontents ver.0.8.0(http://www.jidaikobo.com/pukiwiki/switchcontents08.zip )%% -%%switchcontents ver.0.8.1(http://www.jidaikobo.com/pukiwiki/switchcontents081.zip )%% -%%switchcontents ver.0.8.2(http://www.jidaikobo.com/pukiwiki/switchcontents082.zip )%% -%%switchcontents ver.0.9.0(http://www.jidaikobo.com/pukiwiki/switchcontents090.zip )%% -switchcontents ver.0.9.0(http://www.jidaikobo.com/pukiwiki/switchcontents090.zip ) *おねがい [#s4bb8301] いちおう勉強してセキュリティにも配慮しているつもりですが、穴などあったら教えてもらえると幸いです。 *ライセンス [#cacf5767] -PukiWiki と同じライセンスで。 *履歴 [#g2563b52] |2007年2月11日|人柱版公開|ver 0.8| |2007年2月23日|Safari では、location 先を $script まで明示せずにクエリストリングスから書くときちんとリダイレクトしてくれなかったので修正。|ver 0.8.1| |2007年2月27日|編集 → プレビュー時にもリダイレクトが発生してしまって、プレビューできなかったのを修正。|ver 0.8.2| |2007年9月16日|いろいろ改造|ver 0.9.0| *コメント [#d35024d5] //- この説明だけでは、一体どういうプラグインなのかわかりませんでしたが、ソースコードをちらっと見たところ、実質ブロック型プラグインとしての意味はなくただのマークアップ記法で、アクション型でアクセスした際に、grep 的にフィルタするようですね。おそらくアクション型でアクセスした際にグローバル変数 $language かなにかをセットして、return do_action_plugin('read'); とだけしてブロック型でそのグローバル変数を使用して $language != $swtich なら return ''; だけ。のようにしたほうが楽なんじゃないでしょうか? -- &new{2007-02-15 (木) 02:27:24}; //- もしくは、index.php のコピー、en.php, ja.php などを作ってそこでそのグローバル変数 $language をセットして、切り替える、というのがもっと楽かもしれません。 -- &new{2007-02-15 (木) 02:28:34}; //-気づいてなかったんですが、コメントいただいていたようですね。でも、ご自分で消されたんでしょうか……。というわけでなんとなくコメントアウトで残してみていますが、お嫌でしたら消してください。 [[jidaikobo]] -- &new{2007-02-15 (木) 02:27:24}; // もっとうまい方法があるような気がしたのですが、考えるのが面倒くさくなって消してしまいました。そんな感じです。申し訳ない。 //-あ、お返事ありがとうございます。コメントをいただけたのもうれしかったですし、お気になさらず。 - 便利そうだから使おうかと思ったんですけど、これ使うとメニューバーがなくなってしまうのですが -- &new{2007-05-24 (木) 03:47:44}; - あと > 記号で引用使おうとすると > 記号がそのまま表示されてその行はWIKI文法が通用しません -- &new{2007-05-24 (木) 03:48:57}; -- ご試用、コメントをありがとうございます……が、このプラグイン、「こんなのがあるといいな」と思い、ほとんど最初に作ったもので、いろいろ不具合が分かってきております。もうちょっと勉強したら作り直そうとも思っておりますので、気長にお待ちいただけると幸いですm(..)m [[jidaikobo]] -- &new{2007-05-24 (木) 06:02:22}; - こんな時間にレスがつくとは・・・ありがとうございます 気長に待ってます -- &new{2007-05-24 (木) 06:33:24}; - 実はこれを改造して携帯でアクセスしたら携帯用のコンテンツに自動で切り替えるものを作ろうとしたのですが、メニューバーが出ないのが問題だったので断念しました -- &new{2007-05-24 (木) 06:35:01}; function plugin_keitai_redirect_convert() { global $agent, $script; //ユーザーエージェントが携帯だったら if( $agent[ 'profile' ] == 'keitai' ) { $option = array_pop( func_get_args() ); $redirection = 'Location:'.$script."?".rawurlencode($option); header( $redirection ); } } -- とりあえずこのような簡単なプラグインを自分で作って、携帯用のページへ飛ばすようにしたのですが、これだと、携帯用に別にページを作らないといけないので、switchcontents.inc.phpでできるとありがたいと思います。 -- &new{2007-05-24 (木) 06:39:35}; -- 自分で作ってとかいって plugin_switchcontents_convertをちょこっといじっただけです 汗 -- &new{2007-05-24 (木) 06:42:51}; - わー、すんません。フィードバック見落としていました。このプラグイン、いろいろクダクダなんで、また時間を取って確認してみます。ごめんなさい。 -- [[jidaikobo]] &new{2007-07-13 (金) 09:13:58}; //#comment