#author("2016-10-22T14:40:31+09:00","","")
*csv2newpage.inc.php [#pb6d2b91]

CSVページからレコードを読み込んでページを自動生成するプラグイン [#v30e7bcc]
-ページ:     [[カスタマイズ]]
-投稿者:     [[Web collaboration by Pukiwiki]]
-優先順位:   普通
-状態:       着手
-カテゴリー: 欲しいプラグイン
-投稿日:     2016-07-23 (土) 19:33:07
-バージョン: 1.5.1

** メッセージ [#e67ae668]
**csv2newpage.inc.php [#w327445d]
|RIGHT:100|LEFT:360|c
|~サマリ|CSVページからレコードを読み込んでページを自動生成するプラグイン|
|~リビジョン|0.14|
|~対応バージョン|1.4.3|
|~投稿者|[[sha]]|
|~投稿日|&new{2003-08-08 (FRI) 00:28:00};|
**背景 [#kf062c4e]
「質問箱/234」を受けて試しに作成。ユーザは若干1名以下かもしんないけど(^_^;)。という事情から、バージョンアップは、なるべくしない予定。。。需要があるなら考えますが。。。とか言ってるうちに、なかなか使い勝手の良いプラグインになってしまったようです。これで誰も使ってくれなかったらどうしよう。。。

***質問箱/234 から抜粋 [#m71a9d2b]
例えば、以下のようにデータが記録されているCSVファイルがあるとします。
 "商品名","価格","メーカー名","備考"
 "商品A","5000円","ABC","サンプル"
 ・
 ・
このCSVファイルを読み込み、
 ■ページ名:商品A
 ○価格:5000円
 ○メーカー名:ABC
 ○備考:サンプル
 ○コメント欄
といった新規ページを一括して作ることはできないでしょうか?
カード型データベースのためのプラグインでできないかと思ったのですが、ファイルから読み込むことができないようなので……。

-[[sha]] &new{2003-08-07 (THU) 02:35:08};
~なるほど、質問が分かりにくいと思ったらPukiWikiで書かれていなかったのですね。見やすくしておきました。あと、「カード型データベースのためのプラグイン」とは何のことでしょうか?と思って検索してみたら、[[FreeStyleWiki内>FreeStyleWiki:BugTrack-plugin/13]]にありました。Wiki違いですね。もし既にお使いのWikiがFreeStyleWikiなのだとしたら、ここはPukiWikiのサイトなので問い合わせ先が間違っています。また、もしこれから採用するWikiを選ぶのだとしたら、phpが使える環境ならこのPukiWikiは結構いいですよ。
-[[sha]] &new{2003-08-07 (THU) 02:46:24};
~定型ページを作成するなら「[[しろくろのへや:tracker.inc.php]]」が流用できそうです。CSVの各フィールドから引数を生成して、1行毎にplugin_tracker_action()を叩くようなプラグインを作ると可能かも!?


**概要 [#e2de0c8c]
-あるページの下層に、CSVファイルの各行に応じた新規ページを自動的に作成する。
-「[[しろくろのへや:tracker.inc.php]]」の「'':config/plugin/tracker/設定名{,/page}''」に準拠。
-内部で''tracker.inc.php(v1.15以後)''と''attach.inc.php''の関数を呼んでいる。
-XHTML1.1 validation check済み
-CSVファイルのダブルクオートに対応。Excel2000の仕様と(ほぼ)同じ。

#contents
**操作概要 [#z8781da9]
:【0】準備|
+「'':config/plugin/tracker/設定名/page''」に自動作成するページのテンプレートを用意。
+「'':config/plugin/tracker/設定名''」に、上のテンプレートで用いられるパラメータの定義を記述。同様に、「''.../list''」や「''.../form''」も用意しておく。

#hr
:【1】CSVをページに添付すると同時に実行する場合|
+上層となるページを''[新規]''で作成し、そこに、''#csv2newpage(設定名, upload, <スキップレコード数>, <フィールド順にパラメータ名を記述>)''を記入。
+「ページの更新」をすると、画面に#attachと同様の添付フィールドが出現するので、CSVファイルを指定して「添付&実行」ボタンを押す。
+そのページの各行が処理されて、そのページの下層に新規ページが自動生成される。

#hr
:【2】CSVをページに記載して実行する場合|
+上層となるページを''[新規]''で作成し、CSVファイルをコピー&ペーストする。
+そのすぐ上の行に、''#csv2newpage(設定名,<フィールド順にパラメータ名を記述>)''を記入。
+「ページの更新」をすると、画面に「実行」ボタンが表示されるので、それを押す。
+そのページの各行が処理されて、そのページの下層に新規ページが自動生成される。

**使用法 [#i9a6a7f4]
ブロック型プラグイン~
-引数の仕様
 #csv2newpage(設定名,[upload,<num_of_skiped_lines>],
 <CSV第1fieldのパラメータ名>,<CSV第2…>,...)
-引数の意味
 設定名:tracker.inc.php用に自分で用意する設定ページの名前
 upload: 「アップロード&実行」モードの指定。このとき、次の指定が必須。
 <num_of_skiped_lines>: CSVファイルのヘッダー飛ばし。先頭からのスキップ行数
 <CSV第1フィールドのパラメータ名>:tracker用に定義するパラメータ名
 <CSV第Nフィールドのパラメータ名>:上記と同様。フィールドの数だけ追記
-CSVファイルの読み取り仕様(Excel2000の読み取り仕様のうち下記に対応)
--行頭またはカンマ(,)の次の文字がダブルクオート(")の場合、改行とカンマ(,)を文字列として読み取り、2重ダブルクオート("")を1つのダブルクオート(")の文字列として読み取る。
--それ以外の場合は、カンマ区切りで、改行を除く全ての文字列を読み取る。
++カンマ(,)区切り。
 AAA,BBB,CCC → 「AAA」「BBB」「CCC」
++行頭やカンマ(,)の直後にダブルクオート(")。&color(red){ダブルクオート(")は特殊文字。カンマ(,)や2重ダブルクオート("")を取り込む。};
 "AAA,B"BB,"C""CC" →「AAA,BBB」「C"CC」「」
++行頭やカンマ(,)の直後に半角空白( )。&color(red){ダブルクオート(")は通常の文字で、通常のカンマ(,)区切り。};
  "AAA,B"BB, "C""CC" →「"AAA」「B"BB」「"C""CC"」
++ダブルクオート(")で改行を挟む。&color(red){1行として扱う。改行も取り込む。};
 AAA,"B               →「AAA」「B
 BB",CCC                         BB」「CCC」
++カンマ(,)の直後に半角空白( )。&color(red){2行として扱う。改行は行の区切り。};
 AAA, "B               →「AAA」「"B」
 BB",CCC               →「BB"」「CCC」
**使用例 [#j672612d]
:【0】準備|
-「&#x3a;config/plugin/tracker/設定名」などの設定方法については、「[[しろくろのへや:tracker.inc.php]]」をご参照のこと。ここでは、
 :config/plugin/tracker/製品テーブル
 :config/plugin/tracker/製品テーブル/form
 :config/plugin/tracker/製品テーブル/page
 :config/plugin/tracker/製品テーブル/list
とその中身を事前に用意したものとする。そこで定義したパラメータ名と、CSVの各フィールドを#csv2newpageの引数で対応付けする。

#hr
:【1】CSVをページに添付すると同時に実行する方法|
+今、下記のようなCSVファイルがあったとする。
 製品名,モデル名,販売価格,担当者,電話番号
 オレンジPC,3H0123P,100000,担当A,03-1111-xxxx
 パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx
 愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx
 ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
   ..... と続く .....
+このときに次のように「ページA」に記載する。
 #csv2newpage(製品テーブル, upload, 1, product, model, price, name, phone)
--''upload, 1,''で、アップロード用フォームの表示と、CSVを先頭から1行スキップする指定となる。
--第1レコードの例では、productが「オレンジPC」、modelが「3H0123P」、priceが「100000」以下同様、と対応付く。
--%%カンマや縦棒を、""で囲ってもフィールド区切りを避けることはできない。それらを含む文字列をCSVに用いてはいけない。面倒なので、これは仕様です。%%&color(red){→v0.11より対応しました。};
--もちろん、各パラメータ「product, model, price, name, phone」は前述の「&#x3a;config/plugin/tracker/製品テーブル{,/form,/page,/list}」にて定義されていなければならない。~
+すると、その場に、#attachと同様のファイルの添付フォームが出現するので、CSVファイルを指定して[添付&実行]ボタンを押す。
+すると、CSVファイルが「ページA」に添付されると同時に、CSVファイルの各行が処理されて、新規ページが「ページA」の下に生成される。
--同じCSVファイル名のファイルを実行しても、ファイル名が修正されて「ページA」に添付されます。この方法で実行したファイルは添付の形で残るので、どんな新規ファイルを生成したのかのログとして利用できます。

#hr
:【2】CSVをページに記載して実行する方法|
+今、「ページA」にて下記のように記載する。CSVファイルの部分はコピー&ペーストして記載する。
 #csv2newpage(製品テーブル, product, model, price, name, phone)
 ,オレンジPC,3H0123P,100000,担当A,03-1111-xxxx
 ,パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx
 ,愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx
 ,ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
   ..... と続く .....
--CSVの各レコード(行)を入力する場合、その行頭に、カンマ「'',''」か半角スペース「 」%%か半角縦棒「''|''」%%を挿入しておかなければならない。上の例はカンマ。
--%%また、CSVのレコード以外に、これらを行頭に置いた行を作ってはいけない。誤動作する。%%
--#csv2newpageの直後(子要素)のCSVを処理する。空行(半角空白行も含む)または次の#csv2newpageが来るまで、対象となるCSV行をサーチする。
--それ以外の注意点は、前述(【1】2.)と同じ。
+編集画面で[ページの更新]を押すと、「ページA」に[実行]ボタンが現れるので、それを押す。
+すると、CSVファイルの各行が処理されて、新規ページが「ページA」の下に生成される。

~【表示例】↓

#hr
新規ページ生成:[実行]
,オレンジPC,3H0123P,100000,担当A,03-1111-xxxx
,パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx
,愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx
,ごーやPC,3H0126P,100000,担当D,03-1111-xxxx

#hr
:【3】実行結果の表示|
--【1】【2】の両方の場合で実行すると、「ページA/1」〜「ページA/4」というページ名で「&#x3a;config/plugin/tracker/製品テーブル/page」のテンプレートに従って、新規生成され、新規されたページ名のリストを出力する。
 *Newpages under [[ページA]]
 + [[ページA/1]] --- オレンジPC,3H0123P,100000,担当A,03-1111-xxxx 
 + [[ページA/2]] --- パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx
 + [[ページA/3]] --- 愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx
 + [[ページA/4]] --- ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
--ちなみに、パラメータとして「''_page''」を用意しておくと、ページ名が数字ではない、CSVのフィールドの内容をページ名とする「ページA/ページ名」のページを生成する。&color(red){<==-もう少し詳しく書いていただけないでしょうか。どうしても、パラメータで渡したファイル名がうまく生成できません。連番のファイルはできるのですが。お願いします。};
--特に【2】の場合、「ページA」内は、CSVの行頭にコメント記号「//」が挿入され、結局下記のようになる。
 #csv2newpage(製品テーブル, product, model, price, name, phone)
 //,オレンジPC,3H0123P,100000,担当A,03-1111-xxxx
 //,パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx
 //,愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx
 //,ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
--こうして完了する。
--ちなみに、「ページA」内に''#tracker_list(製品テーブル)''を記述しておくと、生成されたページのリストが展開表示される。
**ダウンロード [#he3b3bd5]
-ここに添付しました。御利用下さい。
-&ref(csv2newpage.inc.php.14);←提供中。
|CENTER:||c
|バージョン|作成日|内容|h
|&ref(./csv2newpage.inc.php.14,v0.14);|2004/09/02|debug/行末空行で行が接続される。空フィールドでデフォルト値とならず前行の値となる。|
|&ref(./csv2newpage.inc.php.13,v0.13);|2004/08/29|debug/アップロード使用で最大ファイルサイズ表示が0KB|
|&ref(./csv2newpage.inc.php.12,v0.12);|2004/08/24|debug/空フィールドに対応|
|&ref(./csv2newpage.inc.php.11,v0.11);|2003/11/07|PukiWiki1.4final対応。CSVのダブルクオート対応|
|v0.10|2003/10/08|XHTML1.1 validation check済み|
|v0.9|2003/09/07|固有アンカーを削除しない|
|v0.8|2003/08/23|&#x3a;configのデフォルト値に対応|
|v0.7|2003/08/09|debug/アップロード時に空白行をスキップ|
|v0.6|2003/08/09|#csv2newpageの直後のCSVを処理。縦棒による処理は止め。細かいdebug|
|v0.5|2003/08/09|debug/添付出来てなかった。他|
|v0.4|2003/08/09|メッセージを一部修正|
|v0.3|2003/08/09|CSVファイルをアップロード&実行|
|v0.2|2003/08/08|debug/tracker.inc.php v1.7で動かなかった|
|v0.1|2003/08/08|tracker.inc.phpを利用して新規作成|

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS