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

bezzubtsev

Гуру форума
Регистрация
14 Май 2015
Сообщения
274
Реакции
89
Доброй ночи!
В разделе 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'));
        }

Заранее спасибо за любую помощь!
 
Тебе нужно чтоб .TXT показался?
 
Тебе нужно чтоб .TXT показался?
Не совсем. Чтобы вместо (или после) ссылки <a> был вывод маски файла.
Т.е. была ссылка "скачать". Нажали - ссылка исчезла, вместо неё название файла по маске, например "DJMKRNEW45K7.jpg".
Сам файл не скачивается, и сработала функция счётчика скачиваний
Код:
$this->model_account_download->updateRemaining($this->request->get['order_download_id']);
 
Часть задачи решена, маска файла выводится. Позже распишу всю процедуру.
Осталось разобраться, как при клике на определенный DIV срабатывала функция
Код:
$this->model_account_download->updateRemaining($this->request->get['order_download_id']);

Каждый DIV имеет ID вида
Код:
id="download_id_<?php echo $download['order_download_id']; ?>"
 
Назад
Сверху