account/download - маска вместо скачивания файла

Тема в разделе "Opencart", создана пользователем bezzubtsev, 26 июл 2015.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    230
    Симпатии:
    65
    Доброй ночи!
    В разделе account/download, после того, как заказ был оплачен, становятся доступными для скачивания файлы. При этом, у каждого файла есть маска + при нажатии на скачивание, счётчик скачиваний уменьшается.

    Подскажите, как сделать, чтобы при нажатии на скачивание (ниже исходный код) :
    Код:
    <?php if ($download['remaining'] > 0) { ?>
                                    <div class="list-content">
                                        <a href="<?php echo $download['href']; ?>"><img src="catalog/view/theme/default/image/download.png" alt="<?php echo $button_download; ?>" title="<?php echo $button_download; ?>" /></a>
                                    </div>
                                <?php } ?>
    было не скачивание файла, а показ (т.е. echo) маски этого файла. При этом, чтобы счётчик также уменьшался (покупатель же увидел маску).

    Понимаю что за функцию отвечает этот код контроллера:
    Код:
    $this->data['downloads'][] = array(
                            'order_id'   => $result['order_id'],
                            'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
                            'name'       => $result['name'],
                            'remaining'  => $result['remaining'],
                            'size'       => round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i],
                            'href'       => $this->url->link('account/download/download', 'order_download_id=' . $result['order_download_id'], 'SSL')
                        );
    и этот за выплевывание файла (собственно там вызывается маска) :

    Код:
            $download_info = $this->model_account_download->getDownload($order_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-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                        header('Pragma: public');
                        header('Content-Length: ' . filesize($file));
    
                        if (ob_get_level()) ob_end_clean();
    
                        readfile($file, 'rb');
    
                        $this->model_account_download->updateRemaining($this->request->get['order_download_id']);
    
                        exit;
                    } else {
                        exit('Error: Could not find file ' . $file . '!');
                    }
                } else {
                    exit('Error: Headers already sent out!');
                }
            } else {
                $this->redirect($this->url->link('account/download', '', 'SSL'));
            }
    Заранее спасибо за любую помощь!
     
  2. 8Katalin8

    8Katalin8 Постоялец

    Регистр.:
    3 авг 2013
    Сообщения:
    76
    Симпатии:
    30
    Тебе нужно чтоб .TXT показался?
     
  3. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    230
    Симпатии:
    65
    Не совсем. Чтобы вместо (или после) ссылки <a> был вывод маски файла.
    Т.е. была ссылка "скачать". Нажали - ссылка исчезла, вместо неё название файла по маске, например "DJMKRNEW45K7.jpg".
    Сам файл не скачивается, и сработала функция счётчика скачиваний
    Код:
    $this->model_account_download->updateRemaining($this->request->get['order_download_id']);
     
  4. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    230
    Симпатии:
    65
    Часть задачи решена, маска файла выводится. Позже распишу всю процедуру.
    Осталось разобраться, как при клике на определенный DIV срабатывала функция
    Код:
    $this->model_account_download->updateRemaining($this->request->get['order_download_id']);
    Каждый DIV имеет ID вида
    Код:
    id="download_id_<?php echo $download['order_download_id']; ?>"