Добрый день!
Прошу подсказку. Задача в /catalog/view/theme/mstore/template/account/order_list.tpl добавить вывод ссылки (или ссылок, купленных клиентом). Сейчас неудобно то, что файлы для скачивания и заказы в личном кабинете разведены по разным страницам. А я хочу сделать рядом с кнопкой просмотра заказа кнопку скачивания купленного файла.
Что делаю, в контроллер /catalog/controller/account/order.php добавляю:
$this->load->model('account/download');
$data['downloads'] = array();
$downloads = $this->model_account_download->getDownloads($result['order_id']);
foreach ($downloads as $download) {
if (file_exists(DIR_DOWNLOAD . $download['filename'])) {
$size = filesize(DIR_DOWNLOAD . $download['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(
'order_id' => $download['order_id'],
'date_added' => date($this->language->get('date_format_short'), strtotime($download['date_added'])),
'time_added' => date($this->language->get('time_format'), strtotime($download['date_added'])),
'name' => $download['name'],
'size' => round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i],
'href' => $this->url->link('account/download/download', 'download_id=' . $download['download_id'], true)
);
}
}
Ниже функцию download
public function download() {
if (!$this->customer->isLogged()) {
$this->session->data['redirect'] = $this->url->link('account/download', '', true);
$this->response->redirect($this->url->link('account/login', '', true));
}
$this->load->model('account/download');
if (isset($this->request->get['download_id'])) {
$download_id = $this->request->get['download_id'];
} else {
$download_id = 0;
}
$this->load->model('account/order');
if (isset($this->request->get['order_id'])) {
$order_id = $this->request->get['order_id'];
} else {
$order_id = 0;
}
$download_info = $this->model_account_download->getDownload($order_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-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');
exit();
} else {
exit('Error: Could not find file ' . $file . '!');
}
} else {
exit('Error: Headers already sent out!');
}
} else {
$this->response->redirect($this->url->link('account/download', '', true));
}
}
Вывод в шабе
<?php if($downloads){ ?>
<?php foreach($downloads as $download){ ?>
<a href="<?php echo $download['href']; ?>" title=""><?php echo $download['name']; ?><?php echo " (". $download['size'] .")";?></a>
<?php } ?>
<?php } ?>
На выходе имею ссылки на скачивание, однако ссылки зациклены и в заказах выводятся те ссылки, которые, собственно, не имеют к заказам отношения.
Готов получить решение на платной основе. Спасибо.