FineSites.ru – все о CMS OpenCart — Как добавить загрузки к товару в opencart 1.5.1.3




Как добавить загрузки к товару в opencart 1.5.1.3

Published on 30 Июль 2012, by serg
in OpenCart.

Зачастую появляется необходимость добавить загружаемые файлы к товару в магазине. Это могут быть различные инструкции, схемы, какие-то дополнительные материалы и т.д.

В OpenCart механизм привязки загрузок к товару в админке уже реализован. Вот только смысл его в том что работает это дело только из личного кабинета и загрузка сама по себе и является товаром.

Для того, чтобы загрузки работали так как нам нужно, а нам нужно, чтобы можно было скачать привязанные к товару файлы со страницы товара. Для этого мы будем модифицировать 3 файла.

1. В файле модели catalog/model/catalog/product.php находим строку

1
public function getTotalProductSpecials() {

и перед ней вставляем две функции

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}

2. В файле контроллера catalog/controller/product/product.php находим

1
$this->model_catalog_product->updateViewed($this->request->get[‘product_id’]);

и перед этой строкой вставляем

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/////////////////////////////////////
$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’])
);
}
}
///////////////////////////////////////

в этом же файле ищем строчку

1
public function upload() {

и перед ней добавляем публичную функцию

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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’);
}
}

3. Ну и наконец в файле темплейта catalog/view/theme/ВАША_ТЕМА/template/product/product.tpl ищем

1
<div id="tabs" class="htabs"><a href="#tab-description"><?php echo $tab_description; ?></a>

и перед этой строчкой вставляем

1
2
3
4
5
6
7
8
9
10
11
<div class="product-info">
<?php if($downloads){ ?>
<br>
<?php foreach($downloads as $download){ ?>
<a href="<?php echo $download[‘href’]; ?>" title=""><?php echo $download[‘name’]; ?><?php echo " (". $download[‘size’] .")";?></a><br>
<?php } ?>
<?php } ?>
</div>

Для того, чтобы можно было купить товары с привязанными к ним файлами без регистрации, делаем следующее:

В файле catalog/controller/checkout/login.php ищем строку

1
$this->data[‘guest_checkout’] = ($this->config->get(‘config_guest_checkout’) && !$this->config->get(‘config_customer_price’) && !$this->cart->hasDownload());

и заменяем ее на

1
$this->data[‘guest_checkout’] = ($this->config->get(‘config_guest_checkout’) && !$this->config->get(‘config_customer_price’) );

далее в файле catalog/controller/checkout/guest.php ищем строку

1
if (!$this->config->get(‘config_guest_checkout’) || $this->cart->hasDownload()) {

и заменяем ее на

1
if (!$this->config->get(‘config_guest_checkout’) ) {

Вот собственно и все. Для большего понимания смысла смотрим видео

Прошу извинить за временами замучанный голос или если где туплю немножко Еще не совсем отоспался после рыбалки. Кстати, нами был пойман хороший такой толстолобик весом в 20 кг

PS: Вы также можете скачать готовый файл для VQMOD.


http://finesites.ru/opencart/kak-dobavit-zagruzki-k-tovaru-v-opencart-1-5-1-3

Губарь Маргарита Александровна