Выводим ссылку(и) на скачивание файла в карточке товара

  • Выводим ссылку(и) на скачивание файла в карточке товара

Нашел в интернете инструкцию для версии OpenCart 1.5.Х, но ее пришлось немного поправить.

По-этому предлагаю вариант для версии OpenCart 2.3.0.2 (подойдет и для 2.1).

1. Открываем файл catalog/ model/ catalog/ product.php и ищем строку

 

public function getTotalProductSpecials() {

 

Перед ней размещаем код:

 

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 и ищем строку

 

$this->model_catalog_product->updateViewed($this->request->get['product_id']);

 

Перед ней размещаем код:

 

 

$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++;

        }

 

        $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'])

        );

    }

}

 

 

3. В этом же файле, находим строку

 

public function review() {

 

И перед ней размещаем код:

 

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');

                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');

    }

}

 

4. Теперь, непосредственно в теме, открываем файл catalog /view /theme /default/ template/ product/ product.tpl и в любом месте (я выбрал место перед ценой), вставляем код:

 

<?php if($downloads){ ?>

            <li><i class="fa fa-download" aria-hidden="true"></i> Скачать: <?php foreach($downloads as $download){ ?><a href="<?php echo $download['href']; ?>" title=""><?php echo $download['name']; ?><?php echo " (". $download['size'] .")";?></a><?php } ?></li>

<?php } ?>

 

В итоге вот, что получилось

 

 

Для лентяев. 
 

Готовенькое от дяди Tom для v.2.3:

 Установить в админке Дополнения-Установка дополнений..
Обновить кеш модификаторов после установки.

Далее стандартно 

Каталог-Загрузки , загружаем нужные файлы.

Каталог-Товары во вкладке Связи указываем нужные файлы для скачивания.

Так же в шаблоне в панели настроек можно применить свои стили (Раздел Свои стили..." в поле CSS)

например так

/*Название файла*/
li.download strong{
    font-size:15px;
    font-weight:300;
    color:black;
}
/*Иконка*/
li.download .fa-download{
    font-size:px;
    font-weight:px;
    color:blue;
}
/*Размер файла*/
li.download .size{
    margin-left:5px;
    font-size:11px;
    font-weight:px;
    color:red;
}

Качаем ocmod по ссылке
 



p.s. Как прикрепить файл? 
загружаем файл тут

прикрепляем файл к товару




2 комментариев / Написать комментарий

Написать комментарий

Внимание: HTML не поддерживается! Используйте обычный текст!
    Бесполезно           Полезно
Captcha

Подпишитесь

Рассылаем только значимую информацию

Теги: Выводим ссылку(и) на скачивание файла в карточке товара