OpenCart — добавляем возможность скачивания файлов без покупки товара


Вам могут понравиться и эти статьи...

Комментариев: 87

Если Вы хотите добавить код в свой комментарий, заключите его в теги <pre lang="php"></pre>

  1. Денис:

    Приветствую! Сделал всё как тут описано и при попытке оформления заказа в гостевом режиме выдаёт ошибку:

    Parse error: syntax error, unexpected T_PUBLIC in /public_html/catalog/controller/checkout/guest.php on line 364

    Как исправить не подскажете? Спасибо!

    • jul jul:

      Версия OpenCat 1.5.3.1?
      Действия четвертого пункта выполнили? Именно он отвечает за гостевое формление заказа, учитывая добавленную возможность.

  2. Борис:

    Спасибо большое) Долго искал как так сделать, в общем очень Вам благодарен.

  3. Супер! Как всегда РАБОТАЕТ!
    Спасибо за такой нужны пост!!!
    А где именно копать, чтоб подправить стили вывода ссылки?
    понимаю что в stylesheet.css но где именно — не пойму…
    Заранее спасибо!

    • jul jul:

      Здравствуйте, Андрей. Разобрались с вопросом? Если нет, то можете дать ссылку на реализацию данной функции, постараюсь помочь. У меня же на данный момент нет этой функции в действии, не на чем проверить код.

  4. Александр:

    Все сделал как написано, все отлично работает! настолько отлично, что добавленные файлы попали в индекс яндекса, но!
    Файл из поиска доступен по 2 быстрым ссылкам: посмотреть и загрузить, кликаем и вместо посмотреть и загрузить файл, получаем скачивание файла: -index.php.
    Подскажите пожалуйста, что можно сделать, чтобы все работало правильно, а в идеале, чтобы загруженный файл просто открывался в новом окне для просмотра.

    Заранее спасибо!

    • jul jul:

      Александр, Ваш коммент ко мне не дошел — возможно, Вы отправили какой-то код и движок его просто не передал. В любом случае, если еще интересует какой-то вопрос или имеется замечание, пишите заново, но учитывайте, что код в чистом виде не пересылается (заменяйте скобки звездочками, например).

  5. Виктор:

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

  6. Привет!
    Не первый раз на твоих страницах нахожу годные решения, обычно все без проблем, а с файлами малость проблема возникла.

    исходные данные:
    ocStore 1.5.5.1.1
    deadcow SEO 2.4

    Включен просто SEO, не SEO Pro,

    изменения в модель и контроллер внес, на странице товара все появилось, но не скачивается. При клике по ссылке, страница просто перегружается и все. Ошибок в логах системы не нашел.

    Ссылка на страницу товара.
    http://shop.egida-ross.ru/ppk-rif-op8

    Вероятно проблема в неправильном формировании адреса ссылки, но вот куда копать — не могу понять, со скачиванием файлов первый раз сталкиваюсь.

    wbr
    /Grizly

    • jul jul:

      Только начала писать Вам ответ, да решила пройти еще раз по ссылке, а у Вас уже все работает. Отлично! Не расскажите как решили проблему?

      • Алексей:

        Проблему решил переходом на SEO PRO.

        Очевидно для работы со стандартным SEO, необходимо править формирование url в нем, но там возник конфликт с beop_all_clean_urls модом, в итоге все решилось на SEO PRO.

        Изначально SEO PRO бал отключен в виду не совсем корректной работы.
        Очевидно это было связано с кэшем, в процессе прикручивания поискового модуля кэш несколько раз чистил, ошибка ушла :)

        wbr
        /Grizly

        • jul jul:

          Спасибо, что поделились решением. У меня, кстати, некогда была практически точь-в-точь такая же ситуация — не работала ссылка на скачивание файлов ил-за отсутствия seo pro. Удачной Вам торговли))

  7. Добрый день.
    У меня такая же проблема, как у Алексея и появилась она именно с переходом на Seo Pro.
    Ссылка на скачивание размещена тут http://mercury-mag.ru/filtry/masljanye-filtry/filtry-dlja-4-taktnyh-motorov/filtr-masljanyj-f8-f30.html, но файл не скачивается…
    Как думаете, в чем проблема?

    Заранее спасибо!

    • jul jul:

      Здравствуйте, Сергей. Заметьте, у Алексея проблема как раз разрешилась при переходе на seo pro, а вот когда стоял стандартный seo, то были проблемы со скачиванием файла. У Вас seo pro? Почистите кеш (часто именно в нем загвоздка). Кстати, какая версия движка?

  8. Сергей:

    Спасибо за быстрый ответ!
    Да, у меня точно SeoPro :)
    А какой файл в кэше отвечает за функцию скачивания файлов? Или можно вообще все файлы удалить из папки cache (кроме index.html)?
    Версия 1.5.5.1.1

    • jul jul:

      Да, смело чистите всю папку system/cache, только не трогайте index.html. Иногда не мешает и кеш браузера очистить. К сожалению, на 1.5.5.1.1 еще не приходилось доделывать данный функционал, но благодаря Алексею знаем, что и для этой версии метод подходит.

  9. Сергей:

    Проблема решена (забыл сделать пункт 5).

    Искренне прошу прощения у разработчика за глупый вопрос и отнятое время!
    Ваши доработки очень помогают. Творите еще!

    • jul jul:

      Ничего, никто не застрахован от подобного) — главное, что во всем разобрались. Удачи с магазином! И заходите еще!)

  10. Михаил:

    А как же вывести ссылки на файле в разделе категорий?

  11. Сергей:

    Здравствуйте, я все сделал, но не пойму как в опенкарте реализованная функция добавления товаров, как для каждого товара добавлять свои файлы?

    • jul jul:

      Чтобы добавить файл товару, необходимо зайти в админку, в карточку товара, перейти по вкладке «Связи» и ниже, под добавлением категорий, есть поле «Загрузки», в нем выбирайте нужный файл. Предварительно, естественно, необходимо загрузить нужные файлы в магазин через Каталог/Загрузки.

  12. Подскажите где мне искать проблему, если я не вижу на странице товара — ссылку на файл.
    ocStore Version 1.5.3.1
    Файл SEOPro в нужном месте был (catalog/controller/common/seo_pro.php), но не уверен, что модуль этот у меня установлен. В списке модулей его нет.

    • jul jul:

      Банальный вопрос, но Вы в Связях присоединили файл?
      Весь метод добавления файла для скачивания, рассмотренный в статье, тестировался именно на ocstore 1.5.3.1.

  13. Да присоединил файл, я понимаю, что ошибка у меня, вопрос у меня один в каком из шагов искать ошибку? может что то не так в моем шаблоне, может без SEO PRO это не работает (если так, то как понять, есть у меня SEO PRO или нет?)

    • jul jul:

      Даже если бы у Вас была проблема с seo pro, то ссылка все равно бы отобразилась, может быть не скачивалась, но появилась бы. Кстати, глядя на Ваши ссылки, видно, что seo Вы не настраивали, так что 5 шаг Вам делать не нужно. А, вообще, не мешало бы настроить ЧПУ.
      Вы третий шаг сделали верно — добавили код в свой шаблон?

  14. 3 шаг я сделал, проверю еще раз, могу я прислать Вам файл для проверки?

  15. Спасибо большое, все получилось все пошло, помогла найти ошибку статья из вашего соседнего поста. Можете подсказать http://arhimed.net/index.php?route=product/product&path=570_633&product_id=771 как сократить расстояние между картинкой и описанием, а то что то описание ушло вниз. Стало не читабельно.

    • jul jul:

      Как я и говорила, Вам надо сменить класс для этого блока, назовите его не «product-info», а «product-file», к примеру. Блоку product-info задана высота (min-height: 320px), соответственно он такой высокий. В общем, поправьте стили и все станет на свои места.

  16. Здравствуйте.Спасибо за ценные советы — многие использую, но с этим что-то пошло не так. Сделал, все как у вас написано — вот что выдало в шапке сайта Notice: Use of undefined constant ‘download_id’ — assumed ‘‘download_id’’ in /home/u151704/stelrad-spbru/www/catalog/controller/common/seo_pro.php on line 136. Убрал 136 строку «case ‘download_id’:» -все опять стало хорошо, появилась ссылка в карточке товара, но при клике просто обновляется страница. Не знаете, где копать?

    • Все, проблема решилась заменой ваших вариантов верхних запятых » ‘ «, на стандартные. Задам тогда уж еще вопрос, можно ли сделать не закачку файла по умолчанию, а открытие в новой вкладке? Буду признателен за ответ.

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

  18. Виталий:

    Изменяем пункт 3. Вставляем загрузки в табы
    catalog/view/theme/default/template/product/product.tpl и ищем строку с описанием товара (230 строка):

    После нее вставляем (вкладка будет отображаться после описания товара )
    Ваш текст
    опускаемся ниже и ищем строку и вставляем

    <a href="» title=»»>

    Все описанное работает на версии 1.5.5.1

  19. Даниил:

    Здравствуйте! А как сделать возможным добавления файла для скачивания в статью?

  20. Володька:

    Юля, добрый день! У меня чуть другая проблема, чем описана в этой статье, но где-то с ней пересекается. В описании товара использую табличку для расположения инфы. Мне надоело постоянно заниматься копипастом. Нельзя ли этот куда-нибудь в шаблон запихнуть, чтоб она при создании нового тоара по умолчанию там была?

    СкрЫн проблемы: http://i64.fastpic.ru/big/2014/0703/69/37d207aa52b0990cfcfde06b4a99b969.png

    Код самой таблицы:

    ИНФОРМАЦИЯ О ТОВАРЕ

     

    О БРЕНДЕ

     

    ОБЩИЕ ХАРАКТЕРИСТИКИ

    Возраст: от лет

    Артикул: 0000

    Бренд: бренд

    Страна-производитель: Китай

    Размеры: 00 х 00 х 00 см.

    Вес: 0 кг.

    • jul jul:

      Можно просто в admin/view/template/catalog/product_form.tpl, на строках 53-56 дефолтного шаблона, найти следующий код

      Вместо EXAMPLE — EXAMPLE разместите то, что Вам необходимо.

  21. Степан:

    День добрый.
    Замечательное решение! Но как быть, если хочется не только непосредственно в карточке товара ссылку давать, но и на странице категории?
    Рядом с кратким описанием товара еще и ссылку на полное описание.

  22. Алексей:

    Все работает!!! Подскажите как сделать, чтобы без регистрации ссылка на файл была неактивна!?

  23. Подскажите пожалуйста как убрать ошибку, уже всё пересмотрела нигде не нашла решение
    Notice: Undefined index: ean in /home/mikolina/domains/parfum-kosmetik.in.ua/public_html/catalog/model/catalog/product.php on line 29Notice: Undefined index: jan in /home/mikolina/domains/parfum-kosmetik.in.ua/public_html/catalog/model/catalog/product.php on line 30Notice: Undefined index: isbn in /home/mikolina/domains/parfum-kosmetik.in.ua/public_html/catalog/model/catalog/product.php on line 31Notice: Undefined index: mpn in /home/mikolina/domains/parfum-kosmetik.in.ua/public_html/catalog/model/catalog/product.php on line 32

    Заранее спасибо

    • jul jul:

      У Вас в файле темы (product.tpl) указfys ean, jan, isbn, mpn, а в файле контроллера (product.php) — нет, поэтому движок сообщает об ошибке.

  24. Владимир:

    Вопрос может и туповат но все же актуален для меня! Все сделал как написано выше — но я не понял каким образом и откуда с админки вообще добавлять эти файлы которые потом можно скачивать со страницы товара? )

    • jul jul:

      Файлы загружать через Каталог/Файлы для скачивания. К товару добавлять файлы через карточку товара в админке/Ссылки/Загрузки, начинаете вписывать название файла в поле и автоподбор Вам его отобразит, выбираете его и данный файл будет прикреплен к товару.

  25. Добрый день.
    Использовал Вашу инструкцию для rubber_ocshop_1_5_6_4.
    Спасибо, загрузка работает для страницы товаров.
    Правда, у меня задача загружать файлы со страницы категорий по каждому товару.
    Это должен быть каталог производителей по брендам (бренд как товар).
    Если можете, подскажите, пожалуйста, как применить Вашу инструкцию для загрузки файлов со страницы категорий.

    С уважением. Сергей.

  26. artem:

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

    2)как до так и после коррекции файлы не доступны для скачивания. вроде загружен,в папке донлоад есть.оформляю заказ как в платном варианте так и в бесплатном. все проходит ок.в конце сообщение
    (Ваш заказ успешно сформирован!

    Вы можете просматривать все ваши заказы в Личном кабинете в разделе История заказов.

    Если в вашей покупке есть товары с файлами для скачивания, тогда вам нужно перейти в раздел «Файлы для скачивания» и скачать купленный товар.)

    но после перехода в раздел «Файлы для скачивания» их там нет.так как не силен в этом движке,прошу помощи решения проблемы.так как на форуме не достучаться
    у меня MaxyStore v.1.5.5.1 если что.
    заранее спасибо

    • jul jul:

      Для того, чтобы закачивались различные расширения, то в системе/настройки добавьте нужные.
      Что же касается недоступности файлов после внесенных изменений, могу сделать вывод, что либо Вы допустили ошибку(и) при изменении кода, либо это Maxystore «рулит» (я с ним не работаю — ничего подсказать не могу).
      Если на 100% убеждены в правильности своего кода, то можете написать автору данного метода — ссылка есть в записи.

  27. Alex:

    Хм очень даже хорошее решение но!!!! Возникла проблема) а если на сайте есть файлы которые реально продаются?? они становятся доступны для скачивания без оплаты(( как сделать так, что бы устанавливался статус какие файлы можно скачивать без оплаты а какие нет

  28. Алекс:

    Здравствуйте, Юлия!

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

    Уже что только не делал… Пробовал оформлять тестовые заказы через Onpay, Nextpay и «покупка бесплатного товара» через Free_checkout — оплата проходит, но ссылки на файлы так и не появляются… (все стандартные действия по настройкам в админке исполнены и проверены уже не раз..)

    Спасибо!

    • jul jul:

      Здравствуйте, Алекс,
      по идее, эти ссылки и должны быть доступны покупателю в личном кабинете. Не появляются ссылки на файлы тех товаров, к которым они прикреплены? Странно, это стандартный функционал opencart. Не производили никаких правок кода в этом направлении? В админке/Система/Настройки/Опции отмечен пункт «Разрешить скачивание файлов»?

      • Алекс:

        С настройками-то всё ок.)

        После долгих плясок, вопрос решился удалением вкмода easy uploader

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

        Благодарю вас, Юлия за отклик!

  29. Сергей:

    Здравствуйте, Юлия!
    Всё получилось с загрузкой файлов на версии OC1.5.6, спасибо вам!

  30. Дмитрий:

    Здравствуйте . Не могу понять у меня вылетает ошибка: fError: Headers already sent out! .
    Магазин ocstore 1.5.5.1.2 .

    • jul jul:

      Проверьте свои файлы, которые правили, на кодировку, должна быть utf-8 без BOM. Также проверьте, чтобы в начале файла не было пробелов, отступов или посторонних знаков, кода.

    • не разобрались с ошибкой? у меня такая же, что то не пойму, кодировка вроде везде utf-8

  31. Дмитрий:

    http://rusjcam.ru/index.php?route=product/product&path=59&product_id=35
    ссылка на товар с файлом скачивания

  32. Здравствуйте хочу добавить такую возможность подскажите как
    http://tiande-sklad.ru/
    очень нужно выложить прайс на главную чтоб могли скачивать.

    • jul jul:

      Здесь все просто, но не автоматизированно, конечно. Через загруженные файлы этого не сделать, данный функционал задуман для загружаемых файлов к товарам. Для того же, чтобы дать ссылку на скачивание прайса или любого другого файла, необходимо по ftp залить искомый файл в архиве, затем в нужном тексте или блоке (через админку, само собой) дать ссылку на этот файл, архивы браузерами не открывается, а скачиваются, таким образом прайс будет доступен для скачивания.

  33. Добрый день!

    Сделал все по инструкции, но ссылки не отображаются…

    http://joxi.ru/D2PBOlQHBM4ar3

    В чем может быть проблема?

  34. Александр:

    Здравствуйте! Помогла ваша статья, на ее основе сделал скачивание файлов в opencart 2.x может кому пригодится)
    1. В конец файла catalog/model/catalog/product.php
    вставляем эти 2 функции:

    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
    ищем строчку и перед ней вставляем следующий код:

    $data[‘downloads’] = array();

    $results = $this->model_catalog_product->getDownloads($this->request->get[‘product_id’]);
    // preType(DIR_DOWNLOAD);
    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 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’);

    //$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/default/template/product/product.tpl
    ищем строчку:

    после нее вставляем следующий код:
    Файлы для скачивания

    4. Перед строчкой

    вставляем следующий код:

    <a href="» title=»» download >

    5. Ну и на последок: заходим admin/controller/catalog/download.php
    и изменяем следующую строчку:
    $file = $filename . ‘.’ . md5(mt_rand());
    на
    $file = $filename; //. ‘.’ . md5(mt_rand());

    И будет вас счастье)

  35. Спасибо большое! А можно ли как то сделать чтоб ссылка на файл была видна только для определенной группы пользователей?

  36. почему вы удалили мой вопрос?

  37. Спасибо элегантное решение. Уже на двух сайтах использую.

  38. Ян:

    Прошу вас, напишите как сделать тоже самое на opencart 2.x. Описанный в комментариях способ не совсем понятен. Спасибо за вашу работу.

  39. Низкий поклон за данный материал.

    У меня была задача продавать выкройки и отдавать бесплатно.
    С помощью этого материала задачу выполнила.
    Бесплатные товары имеют цену ноль.
    В catalog/view/theme/default/template/product/product.tpl
    после строки

    добавила проверку цены
    и в самом конце
    Теперь товары с нулевой ценой доступны для скачивания, а товары с реальной ценой нет

  40. Екатерина:

    Спасибо за статью! Все работает.
    Подскажите, пожалуйста, как вывести эти же файлы для скачивания в инвойсе.
    Пытаюсь сделать по аналогии, но не получается.

  41. Игорь:

    у меня есть похожая проблемка, вот я хочу сделать так чтобы функционал покупки стандартный остался, и сделать страницу еще с бесплатным контентом, но вопрос в том, что нужно при этом на страницах бесплатных продуктов скрыть кнопку покупки и добавить кнопку скачивания, просто загвоздка в том что модуль покупки и описания товара единый, может сможете подсказать как решить мне эту проблему?)
    спасибо заранее

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">