サポート » プラグイン » 生成したページをローカルに保存したい

  • 解決済 194sleep

    (@194sleep)


    フォーラムで検索したのですが、同じケースが見つからなかったので質問させていただきます。

    現在制作しているサイトが非常に不思議なサイトなのですが、同一ユーザーを複数人で運用するタイプのサイトで、記事を蓄積するのではなくプレビューの形でブラウザに表示させます。

    その表示したページをローカルに保存する機能をサイトに持たせたいのですが、いくら方法を探してもしっくり来るものが見つかりません。

    非常に稀なケースですが、皆様に何かお知恵をお借りできないでしょうか?

5件の返信を表示中 - 16 - 20件目 (全20件中)
  • 投稿データをデータベースに保存しないということですかね。
    という事は下書きにもならず、自動保存も無効でしょうか?
    であれば、プレビュー画面をブラウザで保存またはPDFに変換するかPCにワンクリックでPDFに変換可能なソフトを入れるしかおそらく方法は無いと思います。

    Honda

    (@rocketmartue)

    「決められた情報」に個人情報が含まれてくるので、
    ログインした方すべてがそれを閲覧できる状態は好ましく無いということです。

    であれば、npsslさんが指摘されているように同一のアカウントを使用するのはまずいですね。
    ユーザーロール(権限)で、他人の投稿が見れないようにすることは可能ですし、きちんとユーザーアカウントを分けて管理するべきではないでしょうか?

    なお先ほどのプラグインですが、マルチバイト文字に対応していないようで、PDFで表示すると日本語部分が文字化けしてしまいます。
    https://ja.wordpress.org/plugins/printfriendly/
    こちらの方は、日本語で表示されますが、PDFのボタンをクリックした際に広告のようなものが表示されますので、CSS等でカスタマイズが必要です。

    もう少し柔軟に考えてみたら方法はありました。
    前提は従来のプレビュー機能は使えない、構成が絶対パスでなければならない。
    ページを公開して見るわけではないようなので、これが一番簡単ではないかと思います。

    投稿を表示するテンプレートのget_header();より上に以下を追加。

    mb_http_output( 'sjis-win' );
    ob_start( 'mb_output_handler' );

    同じテンプレートのget_footer();より下に以下を追加

    $post_id = get_the_ID();
    $date = get_the_date( 'Ymd' );
    $file = $date . '_' . $post_id .'.html';
    file_put_contents( $file , ob_get_contents() );
    header( 'Content-Type: application/octet-stream' );
    header( 'Content-Disposition: attachment; filename="'.$file.'"' );
    header( 'Content-Length: '.filesize( $file ));
    readfile( $file );
    unlink( $file );

    これで管理画面の投稿ページでプレビューを押したらHTMLファイルをダウンロード出来ます。
    HTMLファイルはドキュメントルートに生成しますが、ダウンロードするしないに関わらず削除します。

    プレビュー機能は使えないので、HTMLファイルを保存してから開いて内容を確認するなりブラウザの挙動に合わせて対応する必要があります。
    ファイル名は投稿日と投稿IDにしてます。ファイル名に2バイト文字を含めた場合、MSのブラウザなんかはクソ面倒です。

    試してみて気付いたんですが、自動保存を止めてもプレビューを押した瞬間にその投稿は下書きになって保存されてますが、その辺りは何か対応してるんでしょうか?
    また、ブラウザによって保存の仕方や挙動が違うので、ページ自体を名前を付けて保存でも同じ気がしました。
    特にMSのブラウザの挙動がウザくて都度どのようにするのか訊いてきたり、また意図を無視した動きで非常にウザイですね。普段使わないのでそこまで気にしたこともありませんでした。SafariやChrome等はそれが無いですけど…

    クライアントがお年を召しておりまして、できればワンボタンでできないかと・・・
    また、使用者が複数おり同一環境で使用できないためブラウザに依存できない状況です

    結局、HTMLでもPDFでもファイルを圧縮でもしない限りブラウザ毎に操作方法が異なるので、質問者の意図した通りにはならないと思います。

    トピック投稿者 194sleep

    (@194sleep)

    Rocket Martue様、manbo様、npssl様

    色々と情報ありがとうございます。
    ご指摘やいただいた情報を元にお客様ともう一度打ち合わせてみたいと思います。

    今の状況ですと、同一アカウントでログインしつつ編集を引き継げない状況を作る(プライバシーを確保)方法を考えなければ先に進めそうに無いですし・・・

    manbo様のご提示いただいたソースも非常にありがたいです。ありがとうございます。
    ですがプレビュー機能が使えなくなってしまうのがネックですね・・・

    ブラウザ問題はある程度推奨ブラウザを限定してやってクリアできないかクライアントと相談してみます。

    皆様から色々とお話を伺いながら自分でも調べてみたところWPとは違ってきてしまいますが、
    Javascriptとかでも何かできそうでした。

    DOM?を使うとか何とか・・・

    今回ご質問させていただいた内容が一朝一夕でできるものではないという事がよく分かりました。
    何にせよ一端状況を整理したいと思います。

    トピック投稿者 194sleep

    (@194sleep)

    時間がたってのご報告をお許しください。
    今回質問させていただいた件について、私なりに解釈しお客様と協議した結果。
    概ね当初、皆様にお伺いしていたことが実現できましたのでこちらへご報告させていただきます。

    まず「同一アカウントでログインしつつ編集を引き継げない状況」これについては
    力技ではありますが、記事リストページの制作された記事についてCSS側から非表示にすることで後からログインしたユーザー(自分も含めて)は強制的に編集することができない状況を作りました。

    そして質問させていただいたいましたローカルへ保存(HTMLファイルをダウンロード)する方法についてはmanbo様にご教授いただいたソースを参考にテンプレートファイルへ組み込むことでプレビューボタンをクリックしてファイルをダウンロードさせるようにしました。
    プレビューが効かなくなる件はカスタムフィールドのチェックボックス「ダウンロードするorしない」で条件をつけプレビューさせるかダウンロードさせるかを切り替えました。

    ただ、manbo様にご教授いただいたソースをそのまま使わせていただくと、生成されたHTMLファイルの内容が重複して格納されてしまったので1箇所変更させていただきました。
    フッター側ソースのob_get_contents()ob_get_clean()にすることで解消できましたので合わせてご報告いたします。

    ブラウザの件についてはやは、り利用できるものとできないものを利用者へしっかりと明示することで快適な利用をしていただけるよう対応しております。
    現状IE11、Chrome、Firefox、Edgeで問題無く動いているようですので一先ず安心といったところでしょうか。

    兎にも角にもクライアントからの依頼内容を期日までに達成できました。
    ひとえに皆様のご助力があってこそだと感じております。
    ありがとうございました。

5件の返信を表示中 - 16 - 20件目 (全20件中)
  • トピック「生成したページをローカルに保存したい」には新たに返信することはできません。