Добавить возможность прикрепить прайс в контенте opencart v.2

В 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>


Комментарии к статье
Защита от роботов