機能
ウェブページの一覧画面にボタンを配置して、ボタンをクリック後にZIP形式に圧縮したファイルをダウンロードする。
必要なもの
Archive::Zipは圧縮する上で必要
File::Pathも使います
動き
プラグインを配置するとウェブページ一覧にボタンを表示する
※「ウェブページダウンロード」を追加
押下すると確認画面を出して「はい」の場合にダウンロード
解凍したファイル
※ページタイトルとかだと重複するのでIDにしています。
困ったこと
そもそもCMSでのダウンロード処理とかどうやるのかわからなかった。
CMS用の出力ではなく、ちゃんとヘッダーを出力してごにょごにょする必要があるので、探したらなんかエクスポートの機能があったので拝借
# 圧縮したファイルを開き、出力する open my $fh, "<", $arcfile; binmode $fh; $app->{no_print_body} = 1; $app->set_header( "Content-Disposition" => "attachment; filename=$filename" ); $app->send_http_header( $arc_info->{mimetype} ); my $data; # 一定単位にデータを読み込み while ( read $fh, my ($chunk), 8192 ) { $data .= $chunk; } close $fh; $app->print($data);
CMSの構成が結構複雑で迷った
リファレンス
今回はハッシュ型のみで対応
# 全てのウェブページをダウンロード while(my $page = $iter->()){ # IDを取得 my $set_id = $page->id; my $id_name = sprintf( "%06d", $set_id ); # ディレクトリを作成 my $local_path = $wrk_path . "/" . $id_name; $fmgr->mkpath($local_path); # text my $text = $page->text; my $text_more = $page->text_more; # 出力 $fmgr->put_data($text, $local_path . '/text.txt'); $fmgr->put_data($text_more, $local_path . '/text_more.txt'); # ハッシュリファレンスに詳細を設定 my $page_info = {}; $page_info->{id} = $set_id; $page_info->{title} = $page->title; $page_info->{text} = ($page->text) ? "1": "0"; $page_info->{text_more} = ($page->text_more) ? "1": "0"; $page_info->{status} = $page->status; # ID別に追加 $webpage_hash->{pages}->{$id_name} = $page_info; }
慣れてきた
まだ、いくつかの処理はコピペだが、なんとなくやり方はわかってきたっぽい
プラグイン使用に関してやオブジェクトの制御に関してのマニュアルかなんかは欲しいところ
飽きてきた
プラグインばかり作ってきたのでちょっとモチベーションが低下気味、ちょっと別のことに手をつけてみる