В Opencart в стандартном функционале нет возможности прикреплять загружаемые файлы к страницам.
Чтобы не городить много кода я придумал что то типа шорт-кода. Вставляем [price=1], где price - это маска, а 1 - это номер элемента загруженного через админку
И так, создадим функцию, которая будет выводить название загруженного файла и поместим ее в /catalog/model/catalog/product.php
public function getDownload($download_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "download d LEFT JOIN " . DB_PREFIX . "download_description dd ON(d.download_id=dd.download_id) WHERE d.download_id=".(int)$download_id." AND dd.language_id = '" . (int)$this->config->get('config_language_id')."'");
if ($query->num_rows) {
return $query->row;
}
else{
return false;
}
}
Теперь перейдем в /catalog/controller/information/information.php и после $data['description'] вставим следующий код
preg_match_all("/\[price\=([0-9]+)\]/is", $data['description'], $math);
if($math[1]){
foreach($math[1] as $id){
$download_info = $this->model_catalog_product->getDownload($id);
if($download_info){
$price_download=$this->url->link('product/product/download', 'download_id=' . $id);
$data['description']=preg_replace("/\[price=".$id."\]/is", '<a href="'.$price_download.'"><img src="/image/pdf.jpg" width="50">'.$download_info['mask'].'</a>', $data['description']);
}
else{
$data['description']=preg_replace("/\[price=".$id."\]/is", ''.$download_info['mask'].'</a>', $data['description']);
}
}
}
Теперь, чтобы при клике открылся прайс открываем /catalog/controller/product/product.php и добавляем функцию
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;
}
$download_info = $this->model_catalog_product->getDownload($download_id);
if ($download_info) {
$file = DIR_DOWNLOAD . $download_info['filename'];
$mask = basename($download_info['mask']);
header('Content-Type: application/pdf');
readfile($file, 'rb');
}
}
Теперь после нажатия на ссылку будет открываться прайс в pdf в браузере.
Сама ссылка будет преобразована, Пример вставки такого кода
Для того, чтобы узнать какой код вставлять нужно сделать загрузку файла через стандартный загрузчик
Чтобы получить такой код изменим форму по адресу /admin/view/template/catalog/download_list.tpl.
Найти примерно 36 строку
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left"><?php if ($sort == 'dd.name') { ?>
<a href="<?php echo $sort_name; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_name; ?></a>
<?php } else { ?>
<a href="<?php echo $sort_name; ?>"><?php echo $column_name; ?></a>
<?php } ?></td> //вставляем тут тэг <td></td>
<td class="text-left">код вставки в контент</td> //
<td class="text-right"><?php if ($sort == 'd.date_added') { ?>
<a href="<?php echo $sort_date_added; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_date_added; ?></a>
<?php } else { ?>
<a href="<?php echo $sort_date_added; ?>"><?php echo $column_date_added; ?></a>
<?php } ?></td>
<td class="text-right"><?php echo $column_action; ?></td>
</tr>
</thead>
Ну и примерно в 52 строке
<tbody>
<?php if ($downloads) { ?>
<?php foreach ($downloads as $download) { ?>
<tr>
<td class="text-center"><?php if (in_array($download['download_id'], $selected)) { ?>
<input type="checkbox" name="selected[]" value="<?php echo $download['download_id']; ?>" checked="checked" />
<?php } else { ?>
<input type="checkbox" name="selected[]" value="<?php echo $download['download_id']; ?>" />
<?php } ?></td>
<td class="text-left"><?php echo $download['name']; ?></td> //тут ставим нужный нам тэг [price=*]
<td>[price=<?php echo $download['download_id']?>]</td> //----
<td class="text-right"><?php echo $download['date_added']; ?></td>
<td class="text-right"><a href="<?php echo $download['edit']; ?>" data-toggle="tooltip" title="<?php echo $button_edit; ?>" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
<?php } ?>
<?php } else { ?>
<tr>
<td class="text-center" colspan="6"><?php echo $text_no_results; ?></td>
</tr>
<?php } ?>
</tbody>