**forのループを実現するプラグイン [#ufb9859c]
**コメント付きのアップロード(添付)プラグイン [#i4e71839]
|RIGHT:70|LEFT:410|c
|~バージョン|全て|
|~投稿者|[[kahata]]|
|~状態|着手|
|~投稿日|&new{2007-06-17 (日) 09:15:24};|
***メッセージ [#x26e0031]

#br
#include(:remark/alpha)
#br

forのループで繰り返し処理を行って表示するプラグイン

たとえば
 |名前|郵便番号|住所|電話番号|h
 #forloop(1,3,1){{
 |名前$n$|郵便番号$n$|住所$n$|電話番号$n$|
 }}
 |>|>|>|CENTER:フッター|f
  
  書式:
    #forloop(繰り返し開始値, 繰り返し終了値, 繰り返し増分){{
       繰り返す内容
    }}
       ここで内容中に$n$を記入すると繰り返し変数に置換される。
とすると
|名前|郵便番号|住所|電話番号|h
|名前1|郵便番号1|住所1|電話番号1|
|名前2|郵便番号2|住所2|電話番号2|
|名前3|郵便番号3|住所3|電話番号3|
|>|>|>|CENTER:フッター|f

と表示されるプラグイン(例のようにヘッダーとフッターが繋がった表にしたい)
***コメント [#t3796977]
- Pukiwikiのテンプレート機能の開発を行っている[[kahata]]です。(([[自作プラグイン/include_template.inc.php]]、[[自作プラグイン/expr.inc.php]]、[[自作プラグイン/if.inc.php]] 、[[自作プラグイン/mathfunc.inc.php]]、[[自作プラグイン/include_template.inc.php/活用例1]] で開発を行っています。)) &new{2007-06-17 (日) 09:17:08};~
将来的には、phpのsmarty、htmlのスタイルシートやxmlのように、スタイル定義部分とコンテンツを分離した機能を実現することを目標にしています。((xoopsのようにpukiwikiでsmartyが使えると申し分ないのですが・・・・))~
以下のような骨子を作成したのですが、行が繋がった一行の表になってしまいます。~
$bodyをget_source()で他のページから取ってくると何となくうまくいくようです。マルチライン引数の処理にからくりがあるようですがよく分りません。開発に詳しい方、ヒントを頂けるとありがたいです。

 <?php
 function plugin_forloop_convert()
 {
    $args = func_get_args();
    $body = array_pop($args);
|~バージョン|1.4以降|
|~投稿者|[[Yoshi]]|
|~状態|提案|
|~投稿日|&new{2007-06-26 (火) 22:53:37};|
***メッセージ [#c7e8e46f]
標準のattachプラグインでは、ファイルをアップロードできるだけのようなので、
コメント付きでアップロードできるとうれしいな、
と思いました。
 
    $start = $args[0]; $end = $args[1]; $incr = $args[2]; 
    $result = '';
 
    for ($i = $start; $i <= $end; $i += $incr) {
	$tmpstr = str_replace('$n$',$i, $body);
        $result .= $tmpstr;
    }
     return convert_html($result);
 }
 ?>
- 複数行の引数の場合、改行コードは \r に変換されて渡されるので、それが原因かもしれません。$body = str_replace("\r", "\n", $body); するとどうなります? -- [[revulo]] &new{2007-06-17 (日) 10:04:55};
-- 早速ありがとうございます。これも試みましたがダメでした。やはり一行になります。~
それと現状ではまだフッターとヘッダーが分離された表になります。array_pop()せずにargs[3]で取得した場合も同じです。 -- [[kahata]] &new{2007-06-17 (日) 10:23:45};
- $body = str_replace('\r','', $body); 、$body .= '\n';、$body .= '\r';も試みましたがダメでした。\n,\rを付加した場合は\n,\rがそのまま元の列の最後に表示されて一列に繋がってしまいます。 ~
さらに『内容』を複数行の引数にせずに第4引数にした場合も同様でした。???-- [[kahata]] &new{2007-06-17 (日) 10:33:53};
- さらに通常の文字列、例えば"今日はよいお天気です$n$"などは上記で問題なく作動しますが、
 #forloop(1,3,1){{
  -今日はよいお天気です$n$
  }}
とすると
-今日はよいお天気です1~
-(実際は半角)今日はよいお天気です2~
-(実際は半角)今日はよいお天気です3~
のようになって第一回目のみpukiwkiの構文変換が作動します。-- [[kahata]] &new{2007-06-17 (日) 11:04:07};
- さらに分りました。 -- [[kahata]] &new{2007-06-17 (日) 11:32:29};~
 #forloop(1,1,1){{
  -今日はよいお天気です
  -今日はよいお天気です
  -今日はよいお天気です
  }}
としても上と同じ結果になり、どうやら複数行引数の中での文は通常ページの文と同等に処理されないようです。何かよいアイデアはありませんか?
- 「$bodyをget_source()で他のページから取ってくると」ってtracker(tracker_list) プラグインですけど。 --  &new{2007-06-17 (日) 12:08:50};
-- 趣旨は
 |名前$n$|郵便番号$n$|住所$n$|電話番号$n$|
のみ書いた独立ページをget_soourceで取得するということです。
***コメント [#e7f8a4f4]
- コメント付きの意味がわかりませんが、画像ファイルに内蔵するという意味であればexif画像を、画像とコメントを分離するなら、#commentと#attach、&attacgref;を組み合わせたページを作成しては如何?(画像と文字はファイル形式が違うので同じに議論できません。それとも画像ファイルとテキストファイルを入れたフォルダを圧縮してアップするという意味?) --  &new{2007-06-27 (水) 21:18:38};
- 説明が下手で申し訳ありません。意図としては、ファイル内にコメントを書き込むのではなく、後者の方です。ファイルの形式は特に気にせず、ちょっとしたファイルをどんどんページに添付していけたらと思っていました。コメントは、添付されたファイルへのリンクの横に注釈のように表示できたらと思っています。#commentと#attachの組み合わせですと、添付ファイルごとにコメントがつけられないかな、、、と思っていたのですがこれは不理解でしょうか?(PukiWikiはまだ初心者ですので、間違いは指摘していただけると助かります。 -- [[Yoshi]] &new{2007-06-27 (水) 22:38:30};
- 追記です。教えていただいた&attachrefですが、もしかするとイメージしていたものに近いかもしれません。試用させていただきます。 -- [[Yoshi]] &new{2007-06-27 (水) 22:42:54};
- &attachrefを試用してみました。細かいことなのですが、"コメント"はリンクへマウスを置いたときではなく、テキストとして画面上に表示されているといいかなぁ,,,と思いました。 -- [[Yoshi]] &new{2007-06-27 (水) 22:46:02};
-- &amp;attachref(); コメント: ~~~~~~~ (難しいpluginを要求するよりまず既存品で工夫すること)  --  &new{2007-06-28 (木) 02:57:05};
- PukiWikiではないですが、"http://snippets.libspark.org/trac/wiki"のページの末尾付近にある添付のようなものがイメージに近いです。このような機能は、PukiWikiで実現可能でしょうか? -- [[Yoshi]] &new{2007-06-27 (水) 22:50:35};
- わきにただの文章として書けばいいんじゃないの?それとも添付ファイル一覧のところにそのコメントがでてほしいの? --  &new{2007-06-28 (木) 05:38:03};
- おっしゃるとおり、添付ファイル一覧のところに、ファイルごとのコメントが出たらなー、と思っていました。。。 -- [[Yoshi]] &new{2007-06-28 (木) 22:32:44};
- 要するに、よくある「あぷろだ」が欲しいんじゃね?PukiWikiでやることに意義が見出せないが。 --  &new{2007-06-28 (木) 22:34:19};
- 以下の既存機能との互換はどう考えますか? --  &new{2007-06-29 (金) 08:33:57};
--?plugin=attach&pcmd=list

- 引数をこう使えば少しは変わるかもしれません。
 #forloop(繰り返し開始値, 繰り返し終了値, 繰り返し増分, 繰り返す内容(1行目), 繰り返す内容(2行目), ..., 繰り返す内容(n行目))
として、
 <?php
 function plugin_forloop_convert()
 {
   $args = func_get_args();
   $start = array_shift($args); $end = array_shift($args); $incr = array_shift($args); 
   $body = implode("\n", $args) . "\n"; 
   $result = '';
 
   for ($i = $start; $i <= $end; $i += $incr) {
     $tmpstr = str_replace('$n$',$i, $body);
     $result .= $tmpstr;
   }
   return convert_html($result);
 }
 ?>
ソースをこうすれば、プラグインの中はうまくいくと思います。~
ただ、最初の例のようにプラグインの中と外を引っ付けるのはこれでは無理です。 --  &new{2007-06-17 (日) 12:50:50};
- とりあえず繰り返すだけなら、最初のコードでも array_pop() の直後に改行コードを変換すれば動きました。でもヘッダやフッタをくっつけるのは難しいですね。 -- [[revulo]] &new{2007-06-17 (日) 13:24:35};
- 複数行引数の利用については[[submenu.inc.php>http://note.sonots.com/?PukiWiki%2Fsubmenu.inc.php]]を参考にしては如何でしょう?。ヘッダ、フッタは複数行引数に入れるようにした方が良いですよ。その方がスマートですよね?。 -- [[taru]] &new{2007-06-17 (日) 13:33:24};
- ヘッダ、フッタ行と、その他の行を切り離して繰り返す部分は、tracker.inc.php のTracker_list->toString() が参考になるかも。 --  &new{2007-06-17 (日) 16:30:03};
- 多くの有益なヒントとガイドをありがとうございます。なんとか行き詰まりが打開できそうな明かりが見えてきました。検討して拙作をまた自作プラグインでご披露します。 -- [[kahata]] &new{2007-06-17 (日) 20:46:07};
- とりあえず技術的に可能かどうか以前に危険なかほりがします。ループ回数10000000000000000000 とでもいたずらされるときびしいのではないでしょうか?最大値を設定すればいいという程度の話でもなく、if プラグインなども含め、根本的に危険性を考慮する思考過程をもって頂いたほうがよさそうです。 --  &new{2007-06-18 (月) 01:53:25};
--- 公開サーバ上で利用しなけりゃだいじょぶぽ --  &new{2007-06-18 (月) 09:09:45};
--- 心得ておきます。あくまで開発過程ということで。。 -- [[kahata]] &new{2007-06-18 (月) 10:15:12};~
余談ですがxoopsにはTemplatesがあって各種モジュールのスタイルが設定できます。ただ使いにくい。~
wikiの自由奔放性を活かしながら機能が実現できないかと・・・・~
pukiwikiのskinで全体の見栄えが変えられますが、ニュースのページ、掲示板のページ、写真集など~
各ページ毎に独自のスタイルを設計して見栄えを良くすることができないかと思っています。~
wiki本体を改造する能力がないもので・・・

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.147 sec.

OSDN