• [モジュール] Csv2Doc - CSVを使ってドキュメントやウェブリンクを一括登録#

  • kazuike Reply #1, 2 years, 11 months ago

    Reply

    [green]概要[/green] CSVファイルを使って、MODxのドキュメントやウェブリンクを一括で作成・更新するモジュールです。
    MODx標準のドキュメント変数はもちろん、ユーザが設定したテンプレート変数も使えます。
    ちなみに、実際に登録する前に、確認表示が出ますので、安心して更新できます。
    また、適用作業にあわせていくつでもモジュール実行画面を追加でき、
    モジュール実行時に入力するパラメータも個々に設定できます。

    ダウンロード
    モジュール実行画面(確認表示)例



    [green]インストールとアンインストール[green]
    インストール 下記の通り、一般的なMODxモジュールと同様にインストールします。
    1.ダウンロードしたファイルを全て展開します。
    2.展開した「Csv2Doc-****/assets/modules/」の中にある「csv2doc」を、
      サーバの「assets/mudules/」の中に、FTPでアップロードします。
      (「****」部分はバージョンによります)
    3.展開した中にある「module.Csv2Doc.ja.php」を、UTF-8が利用可能なテキストエディタで開きます。
    4.MODx管理画面のモジュール/モジュール管理から、モジュールの作成を行い、
      「module.Csv2Doc.ja.php」のソースコードをすべてコピーして、モジュールコード欄に貼り付けます。
      モジュール名は、「Csv2Doc」か、もしくは、適用作業にあわせて、たとえば「商品データ更新」などにします。
    5.デフォルトのままでも使えますが、適用作業にあわせる等必要に応じて「設定」タブのモジュール設定も入力します。

    アンインストール 下記の通り、一般的なMODxモジュールと同様にアンインストールします。
    1.MODx管理画面から作成したモジュールを削除します。
    2.FTPでアップロードしたファイルを削除します。



    [green]使い方[/green]
    1.Excel等を使って、CSVファイルを作成します。
    2.ファイルマネージャーやFTPを使って、CSVファイルをアップロードします。
    3.モジュール実行画面で「確認する」をクリックします。
    4.確認表示を見て、問題なければ「登録する」をクリックします。

    CSVファイル
    以下のようなCSVファイル(*1)を用意し、あらかじめ「assets/files/」にアップロードしておきます。
    1.1行目:フィールド名行(*2)(*3)
      フィールド名として、ドキュメント変数名やテンプレート変数名を入力します。
    2.2行目:コメント行(*4)
      後でわかる(再利用できる)ように、任意のコメント(説明文等)を記入します。
    3.3行目以降:データ行
      実際に登録するデータを入力します。

    *1:デフォルトでは、文字コード等は日本語版Excelで作成されたCSVファイルを想定しています。
    *2:設定により、フィールド名行を省略し、フィールドの並びを固定にすることもできます。
    *3:MODxで定義されていないフィールド名については、確認表示で警告が出ますが、そのまま登録することは可能です。
    *4:設定により、コメント行は省略可能です。

    更新に使う場合の注意
    新規作成だけにCSVを使う場合を除き、既存のドキュメントの更新にもCSVを使う場合、
    あらかじめ、各ドキュメントを識別するためのフィールドを用意しておく必要があります。

    例えば、メニューインデックスを特に使っていないのでしたら、CSVに「menuindex」フィールドを用意し、
    これに連番を振っておく等して、ドキュメントを一意に識別できるようにしておき、
    モジュール実行画面で「更新用一致判定フィールド」に「menuindex」を入力します。
    (もしくは、設定パラメータ「matching_fieldname」に「menuindex」を設定しておきます)

    CSVファイルの例

    設定パラメータ
    一般的なMODxモジュールと同様に、MODx管理画面(モジュール管理)で設定ができますが、
    それ以外にも、モジュール実行画面で、直接パラメータを入力することも可能になってます。

    デフォルトでは、以下のパラメータをモジュール実行画面で指定できるようになっています。(*5)
    ・ドキュメントを作成するフォルダのドキュメントID
    ・ドキュメントに使用するテンプレートID(プルダウンメニュー)
    ・更新用一致判定フィールド
    ・フォルダ内の不要なレコードを削除する(Yes/No)
    ・デフォルトで公開日時に現在時刻を設定する(Yes/No)
    ・アップロードされたCSVファイルのファイル名
    ・2行目からデータレコードまで読み飛ばす行数
    ・CSVファイルエンコーディング(プルダウンメニュー)
    ・確認表示列数

    *5:モジュール実行時に入力するパラメータは、モジュール設定で変更できます。

    主な設定パラメータ [table]
    [tr]
    [td]runparams[/td][td]実行時パラメータ[/td][td]モジュール実行画面で入力するパラメータ名を指定します。
    カンマ区切りで複数指定可能。
    デフォルトは「doc_parent,doc_template,matching_fieldname,delete_in_parent,
    set_pub_date,csv_fname,csv_skiplines,csv_encoding,num_verify_cols」です。[/td]
    [/tr]
    [tr]
    [td]matching_fieldname[/td][td]更新用一致判定フィールド[/td][td]既存のドキュメントを更新する際に使うレコード識別用フィールド名を指定します。
    詳しくは、前述の「更新に使う場合の注意」を参照してください。[/td]
    [/tr]
    [tr]
    [td]require_fieldnames[/td][td]必須フィールド名[/td][td]入力がなければエラーとするフィールド名を指定します。
    カンマ区切りで複数指定可能。[/td]
    [/tr]
    [tr]
    [td]num_verify_cols[/td][td]確認表示列数[/td][td]確認表示に表示する列の数を指定します。デフォルトは「8」です。[/td]
    [/tr]
    [tr]
    [td]verify_fieldnames[/td][td]確認表示フィールド名[/td][td]確認表示に表示するフィールド名を指定します。
    カンマ区切りで複数指定可能。num_verify_colsよりこちらの指定が優先されます。[/td]
    [/tr]
    [tr]
    [td]csv_only_data[/td][td]CSVファイルはヘッダ行を含まない[/td][td]1(Yes)を指定すると、1行目からデータとして処理します。[/td]
    [/tr]
    [tr]
    [td]csv_fieldnames[/td][td]フィールド名[/td][td]フィールド名の並びをカンマ区切りで指定します。[/td]
    [/tr]
    [tr]
    [td]doc_parent[/td][td]ドキュメントを作成するフォルダのドキュメントID[/td][td]どこにドキュメントを作成(どこのドキュメントを更新)するかを指定します。
    CSVのフィールドに「parent」か「byname_parent」で指定したフィールドがあれば、そちらが優先されます。
    ※このフォルダに対する、ドキュメント作成・編集・保存権限が必要です。
    (権限がなければエラーになります)[/td]
    [/tr]
    [tr]
    [td]doc_template[/td][td]ドキュメントに使用するテンプレートID[/td][td]使用するテンプレートを指定します。
    CSVのフィールドに「template」か「byname_template」で指定したフィールドがあれば、そちらが優先されます。
    デフォルトは、グローバル設定のデフォルトテンプレートに設定されているテンプレートです。[/td]
    [/tr]
    [tr]
    [td]csv_fname[/td][td]アップロードされたCSVファイルのファイル名[/td][td]ファイル名を指定します。
    デフォルトは「data.csv」です。[/td]
    [/tr]
    [tr]
    [td]csv_dname[/td][td]アップロードされたCSVファイルのディレクトリ名[/td][td]ディレクトリ名を指定します。
    デフォルトは「assets/files/」です。[/td]
    [/tr]
    [tr]
    [td]csv_skiplines[/td][td]2行目からデータレコードまで読み飛ばす行数[/td][td]コメント行として読み飛ばす行数を指定します。
    デフォルトは「1」です。[/td]
    [/tr]
    [tr]
    [td]csv_encoding[/td][td]CSVファイルエンコーディング[/td][td]CSVファイルに使用している文字コードを指定します。
    デフォルトは「SJIS(シフトJIS)」です。[/td]
    [/tr]
    [tr]
    [td]delete_in_parent[/td][td]フォルダ内の不要なレコードを削除する[/td][td]CSVのデータ中に無いドキュメントがあった場合、削除するかどうかを指定します。
    1(Yes)を指定すると、フォルダ内の不要なドキュメントが削除されます。[/td]
    [/tr]
    [tr]
    [td]nl2br_fieldnames[/td][td]改行時にbrタグを挿入するフィールド[/td][td]複数行にわたるデータ等、改行をウェブ上で再現したいフィールド名を指定します。
    カンマ区切りで複数指定可能。[/td]
    [/tr]
    [tr]
    [td]doc_published[/td][td]デフォルトで公開する[/td][td]デフォルトで公開するにチェックを入れるかどうかを指定します。
    1(Yes)を指定した場合、各ドキュメントの「公開する」にチェックを入れます。
    CSVのフィールドに「published」か「byname_published」で指定したフィールドがあれば、そちらが優先されます。[/td]
    [/tr]
    [tr]
    [td]set_pub_date[/td][td]デフォルトで公開日時に現在時刻を設定する[/td][td]デフォルトで公開開始日時に現在時刻を入れるかどうかを指定します。
    デフォルトは「0(No)」です。
    CSVのフィールドに「pub_date」か「byname_pub_date」で指定したフィールドがあれば、そちらが優先されます。[/td]
    [/tr]
    [/table]

    モジュール設定
    一般的なMODxモジュールと同様に、MODx管理画面(モジュール管理)で設定します。

    例えば、
    親フォルダ「1」、識別フィールド「menuindex」、不要レコードを削除する、実行時パラメータはCSVファイル名
    とするモジュール設定は、以下のようになります。
    &doc_parent=親ãã©ã«ãID;int;1 &matching_fieldname=è­å¥ãã£ã¼ã«ã;string;menuindex &delete_in_parent=ä¸è¦ã¬ã³ã¼ããåé¤ãã;int;1 &runparams=å®è¡æãã©ã¡ã¼ã¿;string;csv_fname
    




    [green]補足説明[/green]
    PHPのわかる人は、Csv2Docクラスを継承して、個別にカスタマイズする等は可能だと思います。

      [list]
    • 現バージョンでは、テンプレート変数とテンプレートの対応は考慮していません。(いずれ対応するつもりですが)
    • 現バージョンでは、モジュール実行画面でのファイルアップロードはできません。(いずれ対応するつもりですが)
    • トランザクション(InnoDB)には、現バージョンでは対応していません。(いずれ対応するつもりですが)
    • CSVデータのフィールド毎のバリデート機能等は、現バージョンではありません。これらチェック機能は今後の課題です。
    [/list]

    バグ報告や仕様の不備、その他機能のご要望等、いただけるとありがたいです。
    (どこまで対応できるかは確約できませんが、無理のない範囲でバージョンアップしていきたいと思っています。)



    [green]リソースの情報[/green]
    [table]
    [tr][td]作者[/td][td]Kazuyuki Ikeda (HIKIDAS Co.,Ltd)[/td][/tr]
    [tr][td]Webサイト[/td][td]http://www.hikidas.com/[/td][/tr]
    [tr][td]リソース名[/td][td]Csv2Doc[/td][/tr]
    [tr][td]バージョン[/td][td]0.9.2[/td][/tr]
    [tr][td]ライセンス[/td][td]GPL[/td][/tr]
    [tr][td]動作環境[/td][td]MODx 0.9.6.x[/td][/tr]
    [tr][td]リソースの種別[/td][td]モジュール[/td][/tr]
    [tr][td]タグ[/td][td]モジュール/CSV/一括作成/一括更新/一括登録/一括追加/module[/td][/tr]
    [/table]


  • yama Reply #2, 2 years, 11 months ago

    Reply

    面白そうなのでEvoリリース記念にデザインをカスタマイズしてみようかな?と開いてみたら、そのへんもきっちり考慮して作り込まれてますね。すごいです。

    tableタグに関しては$params->add('form_gen_param')メソッド?でclass="grid"を指定できるのはすぐ分かりましたが、tdにclass="gridItem"を振るのはどうやるといいでしょう?


  • sama55 Reply #3, 2 years, 11 months ago

    Reply
    があるってことはも?(本家extraにあり?)
    将来的にはphpMyAdminを使えない人向けの引越しセンターとか?


  • kazuike Reply #4, 2 years, 11 months ago

    Reply
    すみません。気持としてはあったのですが、ちょっと手を抜きました。 現状としては、Csv2Docを継承して、メソッドをオーバーライドしていただくのが近道かと思います。
    モジュールの222行目あたり、
    	$csv2doc = new Csv2Doc($params);
    

    を以下のようにすれば良いと思います。
    class MyCsv2Doc extends Csv2Doc {
    	function init_form_gen($gen_cols='') {
    		$gen_name = $this->paramV('form_gen_class');
    		$gen_param = $this->paramV('form_gen_param');
    		if ($gen_cols === '') {
    			$gen_cols = $this->paramV('form_gen_cols');
    		}
    		if ($gen_cols === '') {
    			$gen_cols = 2;
    		}
    		$this->form_gen = new $gen_name($gen_cols, $gen_param, NULL, 'class="gridItem"');
    	}
    }
    	$csv2doc = new MyCsv2Doc($params);
    

    newでオブジェクトを生成しているところ(1行分)のパラメータを増やすだけなんですが…
    ちなみに、3番目のパラメータ(上記「NULL」の箇所)で、trの属性を指定できます。

    Quote from: yama at Jun 18, 2009, 08:08 PM

    面白そうなのでEvoリリース記念にデザインをカスタマイズしてみようかな?と開いてみたら、そのへんもきっちり考慮して作り込まれてますね。すごいです。

    tableタグに関しては$params->add('form_gen_param')メソッド?でclass="grid"を指定できるのはすぐ分かりましたが、tdにclass="gridItem"を振るのはどうやるといいでしょう?


  • kazuike Reply #5, 2 years, 11 months ago

    Reply
    そのものズバリ(ドキュメントを丸ごとDL)ではありませんが、CSVでダウンロードする系のモジュールは、いくつか作ったりしています。

    たとえば、cfFormMailerを拡張して、送信された内容の控えをDBにためておき、後からまとめてCSVでダウンロードするモジュールも作っていて、複数フォーム対応、前回DL以降の差分か全件かを選んでDL可能、アンケート項目などでは集計しやすいようにフラグとして記録する設定ができる等、けっこう高機能なんですが、モジュールの設定がたいへんで、世に送り出すには、そのままでははばかるようなものだったりします。

    Quote from: sama55 at Jun 18, 2009, 09:17 PM
    があるってことはも?(本家extraにあり?)
    将来的にはphpMyAdminを使えない人向けの引越しセンターとか?


  • kazuike Reply #6, 2 years, 11 months ago

    Reply
    すみません。
    先の方法では、テーブル毎に設定が必要なので、HTMLtableを継承する方が早いですね。

    モジュールコードの30行目あたりに以下のコードを追加して、
    モジュールコード内の「HTMLtable」を全て「MyHTMLtable」に置換すれば良いと思います。
    class MyHTMLtable extends HTMLtable {
    	// initialize the properties for table block
    	function initSettings($num_cols, $block_attrs=NULL, $row_attrs=NULL, $col_attrs=NULL) {
    		$this->num_cols = $num_cols;
    		$this->begin_block_tags = $this->addAttrs("<table>", $block_attrs);
    		$this->end_block_tags = "</table>\n";
    		$this->begin_row_tags = $this->addAttrs("<tr>", $row_attrs);
    		$this->end_row_tags = "</tr>\n";
    		$this->begin_col_tags = $this->addAttrs("<td class="gridItem">", $col_attrs); // ââããâ
    		$this->end_col_tags = "</td>";
    		$this->empty_col_tags = "<br />";
    		return $this;
    	}
    }
    


    Quote from: kazuike at Jun 18, 2009, 10:46 PM
    すみません。気持としてはあったのですが、ちょっと手を抜きました。 現状としては、Csv2Docを継承して、メソッドをオーバーライドしていただくのが近道かと思います。

    Quote from: yama at Jun 18, 2009, 08:08 PM
    tableタグに関しては$params->add('form_gen_param')メソッド?でclass="grid"を指定できるのはすぐ分かりましたが、tdにclass="gridItem"を振るのはどうやるといいでしょう?


  • thr Reply #7, 2 years, 6 months ago

    Reply
    こんにちはthrです。

    このモジュールをちょっと使ってみたいとおもってインストールしてみたのですが、下記のようなエラーになってしまいました、、、

    Catchable fatal error: Object of class Csv2Doc could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/*****/assets/modules/csv2doc/Csv2Doc.class.inc.php on line 188

    テスト環境は
    modx0963 and modx1.0.2j
    サーバー:xampp Mac osx 1.0.1
    phpHP Version 5.2.9
    mysql: 5.1.33

    CSV作成はmac版エクセル2008

    お時間があれば少しおしえていただけるとありがたいです。


  • yama Reply #8, 2 years, 6 months ago

    Reply

    (一部伏せ字にしました)

    http://d.hatena.ne.jp/hikidas_ikeda/20090618/1245333783
    こちらコメント欄が参考になるかも。evoでうまく動かないらしい?コメントもありますが。


  • kazuike Reply #9, 2 years, 6 months ago

    Reply
    今、手元に環境が無く、本日はほとんど外なので、すぐには対応できないかもしれません。
    申し訳ないです。


  • thr Reply #10, 2 years, 6 months ago

    Reply
    すすいません。

    字ふせていただいて有り難うございます。


    URL参考に自分でも試してみます。

    0963でうごきましたっ!
    1.0.2jはどうかなぁ〜調査中。。。


    うっやはりリンク先のzeroさんのコメントと同じ状況に、、、
    しかし、一斉に登録される様は本当壮快ですね。良いモジュールです。