phpzipopencartopencart-moduleopencart-3

Opencart Product Page All Image Compression to Zip File For Download


Hi I want to show an image gallery on my site and then have a link that allows the user to download the whole image gallery

Like This :- enter image description here


Solution

  • Product.php

    Create new function

    public function downloadcatalog(){
    $this->load->model('catalog/product'); 
            $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
            
            $results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);
            
                foreach ($results as $result) {
                    $files[] = 'image/'.$result['image'];
                }
             
            $zip = new ZipArchive();
            
            # create a temp file & open it
            $tmp_file = tempnam('.', '');
            $zip->open($tmp_file, ZipArchive::CREATE);
            
            # loop through each file
            foreach ($files as $file) {
                # download file
                $download_file = file_get_contents($file);
            
                #add it to the zip
                $zip->addFromString(basename($file), $download_file);
            }
            
            # close zip
            $zip->close();
            $file_name = $product_info['name'].'.zip';
            # send the file to the browser as a download
            /*header('Content-disposition: attachment; filename="'.$product_info['name'].'"');
            header('Content-type: application/zip');*/
            header("HTTP/1.1 200 OK");
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Cache-Control: public");
            header("Content-Description: File Transfer");
            header("Content-type: application/zip");
            header('Content-Disposition: attachment; filename="'.$file_name.'"');
            header("Content-Transfer-Encoding: binary");
            header('Content-Length: ' . filesize($tmp_file));
    
            //$zip->close();
            //readfile($zipname);
                    readfile($tmp_file);
                    unlink($tmp_file);
                }
    

    ====================================================================

    Product.php

    (Index controller add before)

    $data['column_left'] = $this->load->controller('common/column_left');
    
    $data['download_catalog'] = $this->url->link('product/product/downloadcatalog', 'product_id=' . $this->request->get['product_id']);