Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Добавить выгрузку файла в карточку товара


Recommended Posts

Доброго времени суток! В catalog/model/catalog/product.php 

 

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;
}
 
Далее добавлено в catalog/controller/product/product.php
$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'])
        );
    }
}

 

В этом же файле:

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');
    }
}
 
Не хватат мозгов как в твиг это всё реализовать :(  Естесно правлю файл product.twig, пытаюсь вызвать перед ценой.
Надіслати
Поділитися на інших сайтах


1 час назад, Cosmonaut сказал:

Не хватат мозгов как в твиг это всё реализовать :(  Естесно правлю файл product.twig, пытаюсь вызвать перед ценой.

{% for download in downloads %}
<a href="{{ download.href }}">{{ download.name }}<p>({{ download.date_added }} , {{ download.size }})</p></a>
{% endfor %}

Вы об этом?)

Пардон если что не так) Нет возможности проверить на тестовом)

Надіслати
Поділитися на інших сайтах

зачем эти танцы с бубном?

есть готовое OCMOD-расширение 

которое создаёт на странице товара вкладку "Документация" со списком прикреплённых к товару файлов для загрузки. Кроме того, позволяет работать с внешними ссылками. После установки расширения в поле "Имя файла" формы загрузки файла можно вставлять обычную ссылку, после чего прикрепить её к товару.

Возможности: 

  • поддержка Opencart 3.x (начиная с 1.3)
  • поддержка Journal2 (возможно, работает и на других шаблонах)
  • поддержка seopro
  • поддержка работы с внешними ссылками
  • лимит в 128 символов для поля имени файла увеличен до 255 (если вы используете префикс таблиц, отличный от 'oc_', отредактируйте файл install.sql)
  • по-возможности, файлы будут открыты в браузере
  • Файлы и ссылки открываются в новом окне

screen_journal-1280x1280.jpg

screen_1.2-admin-1280x1280 (1).jpg

screen_1.2-1280x1280.jpg

Надіслати
Поділитися на інших сайтах


1 час назад, flai0616 сказал:

{% for download in downloads %}
<a href="{{ download.href }}">{{ download.name }}<p>({{ download.date_added }} , {{ download.size }})</p></a>
{% endfor %}

Вы об этом?)

Пардон если что не так) Нет возможности проверить на тестовом)

Видимо всё так, ибо ошибок в консоли и лишнего кода в исходнике не выдаёт. Походу у меня косяк в движке где-то. Цепляю файл в связи к товару, и в ЛК в загрузках он не появляется даже. 

Надіслати
Поділитися на інших сайтах


18 минут назад, Zetx сказал:

зачем эти танцы с бубном?

есть готовое OCMOD-расширение 

которое создаёт на странице товара вкладку "Документация" со списком прикреплённых к товару файлов для загрузки. Кроме того, позволяет работать с внешними ссылками. После установки расширения в поле "Имя файла" формы загрузки файла можно вставлять обычную ссылку, после чего прикрепить её к товару.

Возможности: 

  • поддержка Opencart 3.x (начиная с 1.3)
  • поддержка Journal2 (возможно, работает и на других шаблонах)
  • поддержка seopro
  • поддержка работы с внешними ссылками
  • лимит в 128 символов для поля имени файла увеличен до 255 (если вы используете префикс таблиц, отличный от 'oc_', отредактируйте файл install.sql)
  • по-возможности, файлы будут открыты в браузере
  • Файлы и ссылки открываются в новом окне

screen_journal-1280x1280.jpg

screen_1.2-admin-1280x1280 (1).jpg

screen_1.2-1280x1280.jpg

Люблю танцы с бубном, т.к. учусь, до ужаса всё интересно запилить и оптимизировать самому, но пока мозгов не хватат, т.к. первый проект. Благодарю за совет, если он платный, то увы и ах, я буду дальше танцевать с бубном)

Надіслати
Поділитися на інших сайтах


38 минут назад, Cosmonaut сказал:

Люблю танцы с бубном, т.к. учусь, до ужаса всё интересно запилить и оптимизировать самому, но пока мозгов не хватат, т.к. первый проект. Благодарю за совет, если он платный, то увы и ах, я буду дальше танцевать с бубном)

бесплатный...

Надіслати
Поділитися на інших сайтах


В 15.05.2019 в 17:39, flai0616 сказал:

{% for download in downloads %}
<a href="{{ download.href }}">{{ download.name }}<p>({{ download.date_added }} , {{ download.size }})</p></a>
{% endfor %}

Вы об этом?)

Пардон если что не так) Нет возможности проверить на тестовом)

Не-а, не арбайтен, поставил чистый опен, в ЛК видит загрузки, а в карточке товара не выдаёт...

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.