signupモジュールを使ってイベントの申込管理をしようとしています。申し込み者のリストをエクセルなどで出力したいのですが、いい方法をご存知でしたら教えてください。webformのCSV形式でダウンロードのようなイメージです。
詳細はコメントでの議論をご参照下さい。
とてもわかりやすい解説ありがとうございました。おかげさまでCSV形式でダウンロードできるようになりました。さらに質問なのですが、教えていただいた方法でダウンロードすると文字コードがUTF8なのですが、sjisにしてダウンロードした場合はどうすればよいのでしょうか?また、node.tpl.phpに埋め込む、というのがよくわからなかったのですが、動作としてはどのようになるのでしょうか?
回答の前に……。申し訳ございませんが、よりスマートな方法があるかとは思いますが私には思いつきませんでした。
私は文字コードには以下のように対応しております。
1.sites/all/modules/views_bonus/export/views-bonus-export-csv.tpl.phpを開きます。 2.こんな感じに書き換えます。
// Print out header row, if option was selected.if ($options['header']) { $temphead = mb_convert_encoding(implode($seperator, $header) . "\r\n", "SJIS", "UTF-8"); print $temphead;}// Print out exported items.foreach ($themed_rows as $count => $item_row): $tempbody = mb_convert_encoding(implode($seperator, $item_row) . "\r\n", "SJIS", "UTF-8"); print $tempbody;endforeach;
つまり、CSVを作成する時にUTF-8からSJISに文字コードを変換してやっているだけです。 モジュール内をいじってしまうので、どうかと思いますが、私はこれしか思いつきませんでした。
誰かのフォローを待ちます。
とりあえず、これで文字コード問題には対応できます。SJISにすればExcelでも問題なく開けるでしょう。
-------------------------- oumiya_s http://geeeek.crz.jp/
views-bonus-export-csv.tpl.php はテーマ出力用のテンプレートファイルなので、そのファイルをサイトで使用しているテーマのディレクトリにコピーしてから変更すれば、モジュール内のファイルを変更する必要はないと思います。 試してみた所、問題なくSJISで出力されました。
Views Bonus Packでこんなに簡単にCSVファイル出力が出来るとは知りませんでした。有用な情報有難うございます。
ご回答ありがとうございました。日本語でエクセルで出力することができました。 何度も申し訳ないのですが、質問させていただきます。 サインアップで複数の項目を作成している時、ヘッダには「追加のサインアップ情報」という項目が表示され、内容部分には複数の項目が" "で囲まれた状態で出力されます。今はエディタで " を消去し、エクセルに取り込んで列を分割して表にしているのですが、CSV出力するときにこの " を消去する方法はありますか? また、項目にテキストエリアを設定している時、改行が使われていると、表に取り込んだ時にも別の行になってしまい、項目ごとの集計ができません。これもエディタで改行をなくしてからエクセルに取り込んでいるのですが、自動化する方法はありますでしょうか? 自分で扱うだけならこの処理をエディタでやっても全く問題がないのですが、別の人がダウンロードしたときにスムーズに表が作成できるようにしたいのです。よろしくお願いします。
signupモジュールを有効にすると自動的に関連ビューが出来るので、 そのビューをCSV形式でダウンロードできれば良いんじゃないでしょうか。 以下はsignupモジュールが有効になっていることを前提に記述します。
必要モジュール ・Views http://drupal.org/project/views ・Views Bonus Pack http://drupal.org/project/views_bonus
1.上記のURLからそれぞれ必要なモジュールをダウンロードしてきてください。 ※既にインストールされている場合はいらないです。 2.sites/all/modules にモジュールをアップロードします。 3.管理 > サイトの構築 > モジュール を開いて以下のモジュールを有効にします。 ・Bonus Views Export ・Views ・Views UI 4.管理 > サイトの構築 > ビュー を開いて、signup_user_listビューの編集をクリックします。 (ここでは仮にsignup_user_listビューを対象としますが、他のビューでも手順は一緒です) 5.ディスプレイで“フィード”(Feed)を選んで、ディスプレイの追加をクリックします。 6.基本設定のスタイルを CSV file に設定します。 7.フィード設定のパスに適切な文字列を設定します。 ※signup_user_listなど 8.引数の (Signup node) ノード: NID をクリックして、設定を開き、「引数が存在しない場合の動作」の項目を すべての値を表示に設定します。 9.保存ボタンを押してsignup_user_listビューを保存します。 10.7で設定したパスにアクセスすると、CSVファイルがダウンロードできます。 ※signup_user_listビューは引数を要求するので、パスの後ろにノードIDを指定してください。
http://example.com/signup_user_list/1
これで対象のノードにサインアップしたユーザーのリストを得ることが出来ます。 リンクを貼る時に、引数(ノードID)を指定しないと、すべてのサインアップユーザーリストが ダウンロードできます。
すべてのサインアップユーザーリストをダウンロードすると、どのページでサインアップしたユーザーなのかが 分からないので、signup_user_listビューのフィールドに「ノード: タイトル」を増やしたほうが良いかもしれません。
ちなみにダウンロードリンクはノードIDが必要なので、node.tpl.phpに埋め込むのも手だと思います。 ↓こんな感じで
<?php if ($is_admin): ?> <h2><a href="<?php print $base_path; ?>signup_user_list/<?php print $node->nid; ?>">Download</a></h2><?php endif; ?>
コメント
ありがとうございました
とてもわかりやすい解説ありがとうございました。おかげさまでCSV形式でダウンロードできるようになりました。さらに質問なのですが、教えていただいた方法でダウンロードすると文字コードがUTF8なのですが、sjisにしてダウンロードした場合はどうすればよいのでしょうか?また、node.tpl.phpに埋め込む、というのがよくわからなかったのですが、動作としてはどのようになるのでしょうか?
文字コードの変換をモジュール内で行います。
回答の前に……。申し訳ございませんが、よりスマートな方法があるかとは思いますが私には思いつきませんでした。
私は文字コードには以下のように対応しております。
1.sites/all/modules/views_bonus/export/views-bonus-export-csv.tpl.phpを開きます。
2.こんな感じに書き換えます。
// Print out header row, if option was selected.
if ($options['header']) {
$temphead = mb_convert_encoding(implode($seperator, $header) . "\r\n", "SJIS", "UTF-8");
print $temphead;
}
// Print out exported items.
foreach ($themed_rows as $count => $item_row):
$tempbody = mb_convert_encoding(implode($seperator, $item_row) . "\r\n", "SJIS", "UTF-8");
print $tempbody;
endforeach;
つまり、CSVを作成する時にUTF-8からSJISに文字コードを変換してやっているだけです。
モジュール内をいじってしまうので、どうかと思いますが、私はこれしか思いつきませんでした。
誰かのフォローを待ちます。
とりあえず、これで文字コード問題には対応できます。SJISにすればExcelでも問題なく開けるでしょう。
--------------------------
oumiya_s
http://geeeek.crz.jp/
有用な情報有難うございます。
views-bonus-export-csv.tpl.php はテーマ出力用のテンプレートファイルなので、そのファイルをサイトで使用しているテーマのディレクトリにコピーしてから変更すれば、モジュール内のファイルを変更する必要はないと思います。
試してみた所、問題なくSJISで出力されました。
Views Bonus Packでこんなに簡単にCSVファイル出力が出来るとは知りませんでした。有用な情報有難うございます。
CSV形式での出力に関して
ご回答ありがとうございました。日本語でエクセルで出力することができました。
何度も申し訳ないのですが、質問させていただきます。
サインアップで複数の項目を作成している時、ヘッダには「追加のサインアップ情報」という項目が表示され、内容部分には複数の項目が" "で囲まれた状態で出力されます。今はエディタで " を消去し、エクセルに取り込んで列を分割して表にしているのですが、CSV出力するときにこの " を消去する方法はありますか?
また、項目にテキストエリアを設定している時、改行が使われていると、表に取り込んだ時にも別の行になってしまい、項目ごとの集計ができません。これもエディタで改行をなくしてからエクセルに取り込んでいるのですが、自動化する方法はありますでしょうか?
自分で扱うだけならこの処理をエディタでやっても全く問題がないのですが、別の人がダウンロードしたときにスムーズに表が作成できるようにしたいのです。よろしくお願いします。
ビューのダウンロード機能を付与して対応する
signupモジュールを有効にすると自動的に関連ビューが出来るので、
そのビューをCSV形式でダウンロードできれば良いんじゃないでしょうか。
以下はsignupモジュールが有効になっていることを前提に記述します。
必要モジュール
・Views
http://drupal.org/project/views
・Views Bonus Pack
http://drupal.org/project/views_bonus
1.上記のURLからそれぞれ必要なモジュールをダウンロードしてきてください。
※既にインストールされている場合はいらないです。
2.sites/all/modules にモジュールをアップロードします。
3.管理 > サイトの構築 > モジュール を開いて以下のモジュールを有効にします。
・Bonus Views Export
・Views
・Views UI
4.管理 > サイトの構築 > ビュー を開いて、signup_user_listビューの編集をクリックします。
(ここでは仮にsignup_user_listビューを対象としますが、他のビューでも手順は一緒です)
5.ディスプレイで“フィード”(Feed)を選んで、ディスプレイの追加をクリックします。
6.基本設定のスタイルを CSV file に設定します。
7.フィード設定のパスに適切な文字列を設定します。
※signup_user_listなど
8.引数の (Signup node) ノード: NID をクリックして、設定を開き、「引数が存在しない場合の動作」の項目を
すべての値を表示に設定します。
9.保存ボタンを押してsignup_user_listビューを保存します。
10.7で設定したパスにアクセスすると、CSVファイルがダウンロードできます。
※signup_user_listビューは引数を要求するので、パスの後ろにノードIDを指定してください。
http://example.com/signup_user_list/1これで対象のノードにサインアップしたユーザーのリストを得ることが出来ます。
リンクを貼る時に、引数(ノードID)を指定しないと、すべてのサインアップユーザーリストが
ダウンロードできます。
すべてのサインアップユーザーリストをダウンロードすると、どのページでサインアップしたユーザーなのかが
分からないので、signup_user_listビューのフィールドに「ノード: タイトル」を増やしたほうが良いかもしれません。
ちなみにダウンロードリンクはノードIDが必要なので、node.tpl.phpに埋め込むのも手だと思います。
↓こんな感じで
<?php if ($is_admin): ?><h2><a href="<?php print $base_path; ?>signup_user_list/<?php print $node->nid; ?>">Download</a></h2>
<?php endif; ?>
--------------------------
oumiya_s
http://geeeek.crz.jp/