Jump to content
Cosmonaut

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

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, пытаюсь вызвать перед ценой.

Share this post


Link to post
Share on other sites
1 час назад, Cosmonaut сказал:

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

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

Вы об этом?)

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

Share this post


Link to post
Share on other sites

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

есть готовое 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

Share this post


Link to post
Share on other sites
1 час назад, flai0616 сказал:

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

Вы об этом?)

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

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

Share this post


Link to post
Share on other sites
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

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

Share this post


Link to post
Share on other sites
38 минут назад, Cosmonaut сказал:

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

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

Share this post


Link to post
Share on other sites
17 часов назад, Zetx сказал:

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

А можно ссылочку?) плез)

Share this post


Link to post
Share on other sites
В 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 %}

Вы об этом?)

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.