Đã test trên OpenCart 1.5.6.1, nếu các bạn test thành công trên phiên bản khác thì comment nhé.
Trong bài viết này mình hướng dẫn các bạn show file pdf tập tin trong trang chi tiết sản phẩm. Khách hàng có thể download không cần đăng ký mua như mặc định của OpenCart.
OpenCart là một mã nguồn phong phú chức năng. Nó cho phép bạn upload nhiều file và bán chúng như là một sản phẩm thông thường. Đó là người mua được mua cùng một tập tin này trong tài khoản cá nhân của họ có thể tải về tập tin đó sau khi đã thanh toán. Nhưng đôi khi bạn cần phải thực hiện một cái gì đó khác. Ví dụ, các file tập tin không phải là hàng hóa buôn bán, nó chỉ là tài liệu hướng dẫn, chú thích, … Làm thế nào có thể cho phép người mua trước khi thực hiện mua hàng, tải về các hướng dẫn sử dụng?Những gì để nói về danh sách giá, các tài liệu pdf và các tài liệu thông tin khác …
Tìm file: catalog/model/catalog/product.php
public function getTotalProductSpecials() {
Thêm code
public function getDownloads($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_download pd LEFT JOIN " . DB_PREFIX . "download d ON(pd.download_id=d.download_id) LEFT JOIN " . DB_PREFIX . "download_description dd ON(pd.download_id=dd.download_id) WHERE product_id = '" . (int)$product_id . "' AND dd.language_id = '" . (int)$this->config->get('config_language_id')."'"); return $query->rows; } public function getDownload($product_id, $download_id) { $download=""; if($download_id!=0)$download=" AND d.download_id=".(int)$download_id; $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_download pd LEFT JOIN " . DB_PREFIX . "download d ON(pd.download_id=d.download_id) LEFT JOIN " . DB_PREFIX . "download_description dd ON(pd.download_id=dd.download_id) WHERE product_id = '" . (int)$product_id . "' ".$download." AND dd.language_id = '" . (int)$this->config->get('config_language_id')."'"); return $query->row; }
Tìm file: catalog/controller/product/product.php
$this->model_catalog_product->updateViewed($this->request->get['product_id']);
Thêm code:
$this->data['downloads'] = array(); $results = $this->model_catalog_product->getDownloads($this->request->get['product_id']); foreach ($results as $result) { if (file_exists(DIR_DOWNLOAD . $result['filename'])) { $size = filesize(DIR_DOWNLOAD . $result['filename']); $i = 0; $suffix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' ); while (($size / 1024) > 1) { $size = $size / 1024; $i++; } $this->data['downloads'][] = array( 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])), 'name' => $result['name'], 'size' => round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i], 'href' => $this->url->link('product/product/download', 'product_id='. $this->request->get['product_id']. '&download_id=' . $result['download_id']) ); } }
Sau code
public function upload() {
Thêm code:
public function download() { $this->load->model('catalog/product'); if (isset($this->request->get['download_id'])) { $download_id = $this->request->get['download_id']; } else { $download_id = 0; } if (isset($this->request->get['product_id'])) { $product_id = $this->request->get['product_id']; } else { $product_id = 0; } $download_info = $this->model_catalog_product->getDownload($product_id, $download_id); if ($download_info) { $file = DIR_DOWNLOAD . $download_info['filename']; $mask = basename($download_info['mask']); if (!headers_sent()) { if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file, 'rb'); //$this->model_account_download->updateRemaining($this->request->get['download_id']); exit; } else { exit('Error: Could not find file ' . $file . '!'); } } else { exit('Error: Headers already sent out!'); } } else { $this->redirect(HTTP_SERVER . 'index.php?route=account/download'); } }
Tìm file: catalog/view/theme/*/template/product/product.tpl, * là bất kỳ theme nào, bạn có thể đúng đường dẫn theme đang dùng.Sau code:
<a href="#tab-tags"><?php echo $text_tags; ?></a>
Thêm code:
<?php } ?> <?php if($downloads){ ?> <a href="#tab-downloads"><?php echo "Downloads"; ?></a>
Sau code:
<?php if ($products) { ?>
Thêm code:
<?php if($downloads){ ?> <div id="tab-downloads" class="tab-content"> <?php foreach($downloads as $download){ ?> <a href="<?php echo $download['href']; ?>" title=""><?php echo $download['name']; ?><?php echo " (". $download['size'] .")";?></a><br> <?php } ?> </div> <?php } ?>
Vào file: catalog/controller/checkout/login.php.Thay code:
$this->data['guest_checkout'] = ($this->config->get('config_guest_checkout') && !$this->config->get('config_customer_price') && !$this->cart->hasDownload());
Thành code:
$this->data['guest_checkout'] = ($this->config->get('config_guest_checkout') && !$this->config->get('config_customer_price') );
Tìm file: catalog/controller/checkout/guest.phpThay code:
if (!$this->config->get('config_guest_checkout') || $this->config->get('config_customer_price') || $this->cart->hasDownload()) {
Thành code:
if (!$this->config->get('config_guest_checkout') ) {
Nguồn từ sacmauweb.com. Mình đã chỉnh sửa một chút để phù hợp với bản OpenCart 1.5.6.1
Muốn download luôn module dạng Vqmod thì bơi vào đây nhé! 😀
Cài đặt cho phép download
Có thể bạn hiển thị được link download nhưng không tải được vì bạn chưa cho phép tải, các bạn cấu hình lại như sau
- Đăng nhập vào trang quản trị
- Trên menu chọn SYSTEM » SETTINGS
- Sau đó chọn edit tại STORE bạn muốn cấu hình.
- Nhấn vào tab OPTION, sau đó tìm đến mục ALLOW DOWNLOADS
Tích hợp vào vqmod luôn 😀
(y) Đúng rồi đó bạn.
Cảm ơn bạn đã chia sẻ,
mình đã làm theo hướng dẫn tới đoạn tìm dòng này nhưng không thấy :
Hy vọng bạn giúp đỡ, site mình là http://vken.com.vn
Dòng: catalog/view/theme/*/template/product/product.tpl
À, sorry bạn, mình làm được rồi, nhưng nó chỉ hiển thị lên thôi chứ click vào thì không download được, bạn xem giúp mình cái link này nhé, tks http://vken.com.vn/thiet-bi-kiem-soat-bang-the-tu-soyal-ar-725e
Bạn xem lại hướng dẫn, phần cuối nhé, mình vừa cập nhật lại đó. Mình thấy bạn cũng hay làm opencart, có kinh nghiệm gì hay chia sẻ nha ^^
cảm ơn bạn, mình vào xem lại phần cài đặt thì đã tích chọn cho phép download rồi.
Hiện tại vẫn chưa được , hic 🙁
Bạn thử kiểm tra log xem sao, ngoài ra tìm đến đường dẫn của file xem phân quyền của nó cũng như các thư mục chứa nó như thế nào ha.
Thư mục chứa file của mình là http://vken.com.vn/download/
và chmod đang là 755
Link down thì là : http://vken.com.vn/product/product/download&product_id=91&download_id=1
Không hiểu sai chỗ nào nhỉ, mình mới vọc về opencart nên gà quá, hy vọng bạn có thể giúp mình đc, tks nhiều !
Bạn vào system -> mục lỗi, xem phần hệ thống có báo lỗi gì không nhé. Ngoài ra xem thêm coi có lỗi gì bên Vqmod không? Giờ chắc chỉ có đọc log thôi.
Mò mẫm một hồi mà vẫn không được admin à, hic chán quá 🙁 , admin có dùng sky ko cho mình xin rồi khi nào rảnh teamview giúp mình được ko ?
Mình thấy hình như bạn dùng modules gì đó chặn chọn và click phải hay sao nhỉ? Bạn thử tắt nó đi, nếu vẫn chưa được, bạn thử tắt các module khác xem thế nào nhé.
Bạn làm được rồi mà không thấy chia sẻ gì hết 🙁 🙂
à, hi, mình kiếm cái modul khác 🙂 ai chưa làm đc tham khảo link này nha http://davidpeach.co.uk/plugins/opencart-product-attachments/
và kết quả của mình đây 🙂 http://vken.com.vn/may-cham-cong-van-tay-the-tu-ronald-jack-x628c-id
Hehe, thank bạn đã chia sẻ ^^
Nhưng cái này chỉ up được file pdf, admin có thể fix giúp mình là có thể up được nhiều loại file như .rar , word …..
Tks !
Chào Trung, để mình tìm hiểu xem thế nào đã nhé ^^