cakephp2.doc_080
R e i - D r e a m
for Laravel
TOP > CakePHP2 > CakePHP2 Sample関連
Guest
login

最終投稿日:2019年11月20日

目次
○ サーバの保存とダウンロード
モデルを検索し内容をCSV出力します。
Batch
Batch処理のサンプルを紹介.
画像処理
画像処理のサンプルコードを紹介.
PDF出力
PDF出力のサンプルコードを紹介.
ファイルの生成
CMSシステム等で使われる「ファイルの生成」サンプルです.
CakePHP2 Sample関連
CakePHP2.x
【概要】

    モデルを検索し、内容をCSV出力します。
    サーバ保存・ダウンロードどちらにも対応しています。


[ Controller ]

    public function index() {

        //ダウンロードの場合は描画を止める
        $this->autoRender = false;
        $this->User->recursive = 0;
        $datas = $this->User->find("all",array("conditions"=>array()));

        $cavPrams = array();
        $cavPrams["jp"] = array(
            "ID","アカウント名","パスワード","氏名","フリガナ","有効フラグ","登録日","更新日");
        $cavPrams["title"] = true;
        $cavPrams["path"] = array("C:/xampp/htdocs/cakephp258/app/tmp/","hoge");
        $cavPrams["quart"] = true;
        $cavPrams["encode"] = "SJIS";
        
        /********************************************************************************************
        * 第1引数
        *   通常のfind all で取得したテーブルデータ       $data[0]["User"]["id"]
        * 第2引数 連想配列
        * ["jp"] = array() 存在する場合は、1行目に日本語タイトルを使用する
        * ["title"] = bool  false で1行目からデータ行とする(デフォルト true)
        * ["path"] = ファイル保存先(第1 = / で終わる,第2 = 拡張子なし)  第1="" の場合はダウンロードとなる
        * ["quart"] = bool  ture で項目を『"』で囲う(デフォルト true)
        * ["encode"] = string UTF8から変換したい文字コード指定(例:SJIS)
        *
        * 【注意】
        *   ダウンロードの場合は、Controller 側で『$this->autoRender = false;』する事
        *********************************************************************************************/
        $this->MyCsvCreate->createCsv($datas,$cavPrams);
        
    }




[ Component ]

    class MyCsvCreateComponent extends Component {

        //csv1行目タイトル
        private $title    = "";
        //csvデータ部分
        private $csvData  = "";
        
        public function initialize(Controller $controller) {
            $this->controller = $controller;
        }

        /******************************************************************************************
        * CSVデータを作成する(テーブル結合しても大丈夫!)
        *
        * 第1引数
        *   通常のfind all で取得したテーブルデータ       $data[0]["User"]["id"]
        * 第2引数 連想配列
        * ["jp"]    = array()   存在する場合は、1行目に日本語タイトルを使用する
        * ["title"] = bool      false で1行目からデータ行とする(デフォルト true)
        * ["path"]  = ファイル保存先(第1 = / で終わる,第2 = 拡張子なし)  
        *               ※ 第1が存在しない場合はダウンロードとなる
        * ["quart"] = bool      ture で項目を『"』で囲う(デフォルト true)
        * ["encode"]= string    UTF8から変換したい文字コード指定(例:SJIS)
        *
        * 【注意】
        *   ダウンロードの場合は、Controller 側で『$this->autoRender = false;』する事
        ********************************************************************************************/

        function createCsv($datas = array(),$cavPrams = array()){

           ########################
           # ファイルポインタ生成
           
            if(!empty($cavPrams["path"][0]) && !empty($cavPrams["path"][1])){
                $buf = fopen($cavPrams["path"][0].$cavPrams["path"][1].".csv","w");
            }else{
                //書き込み可のモード (w+) でユニークな名前を有するテンポラリファイルを作成
                $buf = tmpfile();
            }

           ########################
           # 1行目タイトル作成
           
            //1行目はタイトル
            if(!isset($cavPrams["title"]) || $cavPrams["title"] == true){
                //タイトルは日本語
                if(isset($cavPrams["jp"])){
                    foreach($cavPrams["jp"] as $val){
                        if(!isset($cavPrams["quart"]) || $cavPrams["quart"] == true){
                            //『"』で囲う
                            $val = $this->quartPlus($val);
                        }
                        $this->title .= $val.",";
                    }
                //タイトルは英語
                }else{
                    foreach($datas[0] as $line){
                        foreach($line as $key => $val){
                            if(!isset($cavPrams["quart"]) || $cavPrams["quart"] == true){
                                $key = $this->quartPlus($key);
                            }
                            $this->title .= $key.",";
                        }
                    }
                }
                $this->title = substr($this->title,0,-1);
                if(isset($cavPrams["encode"])){
                    fputs($buf,mb_convert_encoding($this->title,$cavPrams["encode"],"UTF-8")."\n");
                }else{
                    fputs($buf,$this->title."\n");
                }
            }
            
           ########################
           # 1行目以降データ作成
            
            foreach($datas as $lines){
                foreach($lines as $line){
                    foreach($line as $val){
                        if(!isset($cavPrams["quart"]) || $cavPrams["quart"] == true){
                            //『"』で囲う
                            $val = $this->quartPlus($val);
                        }
                        $this->csvData .= $val.",";
                    }
                }
                $this->csvData = substr($this->csvData,0,-1);
                if(isset($cavPrams["encode"])){
                    fputs($buf,mb_convert_encoding($this->csvData,$cavPrams["encode"],"UTF-8")."\n");
                }else{
                    fputs($buf,$this->csvData."\n");
                }
                $this->csvData = "";
            }
            
           #########################
           # ダウンロードの場合処理
           
            if(empty($cavPrams["path"][0]) && !empty($cavPrams["path"][1])){
                //オープンしたファイルポインタからファイルに関する情報を得ます
                $stat = fstat($buf);
                $this->layout = false;
                configure::write('debug', 0);
                header("Cache-Control:private");
                header("Pragma:private");
                header("Content-Type: " . 'application/x-csv');
                header("Content-length: " . $stat['size']);
                header("Content-Disposition: attachment; filename=" . $cavPrams["path"][1].'.csv');
                
                //引数で指定したファイルポインタの位置を先頭に戻します
                rewind($buf);
                //fopen()関数 で開いたファイルの全部を出力します
                fpassthru($buf);
            }
            
            //ファイルクローズ
            fclose($buf);
        }

        /**********************************
        * 『"』で囲う
        **********************************/
        function quartPlus($val){
            return "\"".$val."\"";
        }
    }


[ View ]

    <?php echo $this->Form->create("User",array("controller"=>"users","action"=>"index")); ?>
    <?php echo $this->Form->end("CSV"); ?>

    ※ダウンロードの場合は、他のアクションから SUBMIT してやればOK!
            
レンズモード 【新規購入限定用】
ログインしてコメントを残そう!!


きっぷる