Как генерировать описание товара в pdf формате «на лету» на Opencart

Тестировал на OpencartPro 2.3

Что понадобится: библиотеку dompdf положить в директорию /catalog/model/catalog. Как установить и где взять описано здесь https://hqline.ru/sozdanie-pdf-s-detalyami-zakaza-v-piseme-k/

Результат: работающая кнопка «Скачать PDF». По нажатию — генерируется файл pdf описания и ссылка на него

 class=

Вьюшка

Внедряем код в файл /catalog/view/theme/default/template/product/product.tpl в любое место, где хотим выводить кнопку

            <div><?=$description_button; ?></div>

В конце этого же файла ставим javascript для отправки ajax-запроса контроллеру на генерацию pdf-файла. В запрос подсовываем описание товара и его heading_title(предварительно отранслитировав с помощью функции translit)

<script type="text/javascript">
    $(document).on('click','#genepdf',createPdfRel);
      
      function createPdfRel() {
        var heading_title='<?=$heading_title; ?>';
          $.ajax({
          url:'index.php?route=product/product/createPdfRel',
          dataType:'json',
          type:'post',
          data:{'description':$('#tab-description').html(),'name':translit(heading_title)},
          success: function (json) {
            $('#genepdf').parent().append('<br><a href="'+json+'">ссылка на скачивание</a>');
            // console.log(json);
          }
        });
      }
      function translit(varname){
// Символ, на который будут заменяться все спецсимволы
            var space = '-';
// Берем значение из нужного поля и переводим в нижний регистр
            var text = varname.toLowerCase();
// Массив для транслитерации
            var transl = {
                'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh',
                'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n',
                'о': 'o', 'п': 'p', 'р': 'r','с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h',
                'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh','ъ': space, 'ы': 'y', 'ь': space, 'э': 'e', 'ю': 'yu', 'я': 'ya',
                ' ': space, '_': space, '`': space, '~': space, '!': space, '@': space,
                '#': space, '$': space, '%': space, '^': space, '&': space, '*': space,
                '(': space, ')': space,'-': space, '=': space, '+': space, '[': space,
                ']': space, '\': space, '|': space, '/': space,'.': space, ',': space,
                '{': space, '}': space, ''': space, '"': space, ';': space, ':': space,
                '?': space, '<': space, '>': space, '№':space
            }
            var result = '';
            var curent_sim = '';
            for(i=0; i < text.length; i++) {
                // Если символ найден в массиве то меняем его
                if(transl[text[i]] != undefined) {
                    if(curent_sim != transl[text[i]] || curent_sim != space){
                        result += transl[text[i]];
                        curent_sim = transl[text[i]];
                    }
                }
                // Если нет, то оставляем так как есть
                else {
                    result += text[i];
                    curent_sim = text[i];
                }
            }
            result = TrimStr(result);
// Выводим результат
            return result;
        }
function TrimStr(s) {
            s = s.replace(/^-/, '');
            return s.replace(/-$/, '');
        }
</script>

Контроллер

Вносим код в файл /catalog/controller/product/product.php

	public function createPdfRel()
	{
		$this->load->model('catalog/product');
		$result=$this->model_catalog_product->generatePdf($_POST['description'],$_POST['name']);
		$this->response->setOutput(json_encode($result));
	}

и в функцию index в любое место

        $data['description_button']="<button id="genepdf">Скачать в PDF</button>";

Модель

Вносим правки в файл /catalog/model/catalog/product.tpl

	public function generatePdf($description,$name)
	{
		$dir = DIR_CACHE . '/download';
		if (!is_dir ($dir)) {
			mkdir ($dir);
		}
		$name=preg_replace('/[^A-z]/', '-', $name);
		$file_rel_name  = $name .'.pdf';
		$file_pdf 	= $dir .'/' .$file_rel_name;
		if(file_exists($file_pdf)) return '/system/storage/cache/download/'.$file_rel_name;
		$dompdf = new Dompdf();
		
$html = <<<EOF
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>Заказ</title>
</head>
<body>
<style type="text/css">
	body {font-family: DejaVu Sans, sans-serif;}
</style>
$description
</body>
</html>
EOF;
$dompdf->loadHtml($html);
				$dompdf->setPaper('A4', 'landscape');
				$dompdf->render();
				$output = $dompdf->output();
				file_put_contents($file_pdf, $output);
				return '/system/storage/cache/download/'.$file_rel_name;
	}
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

СТАТЬИ БЛОГА ПО РУБРИКЕ И МЕТКАМ

img

Какие включить доп. функции в плитку тегов

1. добавление тегов с автоподстановкой* через админку

*автоподстановкой названий товаров/категорий

см.видео

2. вывод плитки в любом месте шаблона через селекторы html(class или id)

см.видео

пояснения

подробная инструкция

3. замена дизайна плитки тегов с «карусели»(базовый дизайн) на «таблетки»

скрин (декстопная версия)

скрин (мобильная версия)


3а. замена изначального дизайна на «квадраты»

живой пример

скрины


3b. замена изначального дизайна на цепочку с кнопкой

живой пример

скрины


3c. замена изначального дизайна на дизайн с табами

скрин

живой пример_1

живой пример_2 (с картинками у тегов)

живой_пример_3 (с кнопкой <показать все>)


4. функция «упорядочивание тегов по полкам на витрине».

Подойдёт тем, у кого на одной странице очень много тегов и их нужно как-то упорядочить.

см.скриншот(декстоп)

см.скриншот(смартфон)

видео

живой пример

4а.Вывод плиток тегов в нескольких областях сразу

скриншот

инструкция

5. функция «отобразить плитку во всех товарах категории».

Допустим, у вас в магазине есть категория, в которой 500 товаров, а вам требуется добавить одну и туже плитку тегов в каждом из них. Если подключена данная функция, то достаточно добавить в эксель-файл для импорта только 1 строку и теги появятся на 500 страницах.


5_a. расширение функции №5 на подкатегории.


6. вывод плитки в листинге товаров

см.скрин

7. мультиязычность

с данной функцией отпадает необходимость создавать плитки под каждый язык отдельно

скриншот

8. Самостоятельный генератор тегов из товаров

см.статью


10. выгрузка всех тегов с сайта в эксель-файл

11. добавление тегов непосредственно в админке товара или категории

скрин

инструкция

12. Формирование посадочных страниц  к опциям/атрибутам стандартного фильтра

у страниц стандартного фильтра товаров появится ЧПУ(SEO URL), мета-теги (keywords,description), title (заголовок страницы) и h1.

видео


13. Ранжирование тегов по популярности

Какие включить доп. функции в плитку тегов

1. добавление тегов с автоподстановкой* через админку

*автоподстановкой названий товаров/категорий

см.видео

2. вывод плитки в любом месте шаблона через селекторы html(class или id)

см.видео

пояснения

подробная инструкция

3. замена дизайна плитки тегов с "карусели"(базовый дизайн) на "таблетки"

скрин (декстопная версия)

скрин (мобильная версия)


3а. замена изначального дизайна на "квадраты"

живой пример

скрины


3b. замена изначального дизайна на цепочку с кнопкой

живой пример

скрины


3c. замена изначального дизайна на дизайн с табами

скрин

живой пример_1

живой пример_2 (с картинками у тегов)

живой_пример_3 (с кнопкой <показать все>)


4. функция "упорядочивание тегов по полкам на витрине".

Подойдёт тем, у кого на одной странице очень много тегов и их нужно как-то упорядочить.

см.скриншот(декстоп)

см.скриншот(смартфон)

видео

живой пример

4а.Вывод плиток тегов в нескольких областях сразу

скриншот

инструкция

5. функция "отобразить плитку во всех товарах категории".

Допустим, у вас в магазине есть категория, в которой 500 товаров, а вам требуется добавить одну и туже плитку тегов в каждом из них. Если подключена данная функция, то достаточно добавить в эксель-файл для импорта только 1 строку и теги появятся на 500 страницах.


5_a. расширение функции №5 на подкатегории.


6. вывод плитки в листинге товаров

см.скрин

7. мультиязычность

с данной функцией отпадает необходимость создавать плитки под каждый язык отдельно

скриншот

8. Самостоятельный генератор тегов из товаров

см.статью


10. выгрузка всех тегов с сайта в эксель-файл

11. добавление тегов непосредственно в админке товара или категории

скрин

инструкция

12. Формирование посадочных страниц  к опциям/атрибутам стандартного фильтра

у страниц стандартного фильтра товаров появится ЧПУ(SEO URL), мета-теги (keywords,description), title (заголовок страницы) и h1.

видео


13. Ранжирование тегов по популярности

img

Создание мульти склада в opencart и получение остатков из 1С

  • Реализована возможность работать с несколькими складами в Opencart. Общий остаток товара складывается из остатков на складах.
  • Реализована передача остатков в интернет-магазин (ИМ) из выгрузки 1С.
  • Реализован вывод остатков по складам в карточке товара.

II. Подробное описание модуля

1.Передача остатков в ИМ настраивается с любых складов 1с, например, с основного склада и двух других.  Есть возможность использовать любые статусы наличия, например,

— если на «складе 1» товара нет, но на основном складе этот товар есть (или есть на складе 2), то в карточке на витрине будет показываться статус ожидание 1 день
— если нигде товара нет, то в карточке — статус нет в наличии
— если на выбранном складе товара менее Х штук, то статус — мало. (значение Х доступно для корректировки из админ-панели)

2. В модуле опенкарта реализована возможность добавлять/убирать склады и корректировать их настройки.  Чтобы работало обновление остатков из 1С, в настройках модуля требуется складам присвоить GUID из 1с.

3. Списание остатков производится в зависимости от способа доставки в заказе. Например, если выбрана курьерская доставка, то списание товара начнётся с основного склада, продолжится со склада 1 (при отсутствии на основном), далее со склада 2. Если в методе доставки заказа выбран самовывоз со склада 1 или со склада 2, то вначале списание произойдет с выбранного склада, затем с основного склада, и далее с последнего склада, где остались остатки. Приоритеты списания остатков настраиваются в админ-панели модуля.

Создание мульти склада в opencart и получение остатков из 1С

  • Реализована возможность работать с несколькими складами в Opencart. Общий остаток товара складывается из остатков на складах.
  • Реализована передача остатков в интернет-магазин (ИМ) из выгрузки 1С.
  • Реализован вывод остатков по складам в карточке товара.

II. Подробное описание модуля

1.Передача остатков в ИМ настраивается с любых складов 1с, например, с основного склада и двух других.  Есть возможность использовать любые статусы наличия, например,

-- если на "складе 1" товара нет, но на основном складе этот товар есть (или есть на складе 2), то в карточке на витрине будет показываться статус ожидание 1 день
-- если нигде товара нет, то в карточке - статус нет в наличии
-- если на выбранном складе товара менее Х штук, то статус - мало. (значение Х доступно для корректировки из админ-панели)

2. В модуле опенкарта реализована возможность добавлять/убирать склады и корректировать их настройки.  Чтобы работало обновление остатков из 1С, в настройках модуля требуется складам присвоить GUID из 1с.

3. Списание остатков производится в зависимости от способа доставки в заказе. Например, если выбрана курьерская доставка, то списание товара начнётся с основного склада, продолжится со склада 1 (при отсутствии на основном), далее со склада 2. Если в методе доставки заказа выбран самовывоз со склада 1 или со склада 2, то вначале списание произойдет с выбранного склада, затем с основного склада, и далее с последнего склада, где остались остатки. Приоритеты списания остатков настраиваются в админ-панели модуля.

img

Переход на https в opencart wordpress

Для wordpress

https://zen.yandex.ru/media/id/5b4ae96b3d0e9500a9a853c7/podkliuchenie-besplatnogo-sslsertifikata-na-hostinge-timeweb-5b5eb4e09bef9e00a82f7564

Для нулевых сайтов на opencart

Переход на https в opencart wordpress

Для wordpress https://zen.yandex.ru/media/id/5b4ae96b3d0e9500a9a853c7/podkliuchenie-besplatnogo-sslsertifikata-na-hostinge-timeweb-5b5eb4e09bef9e00a82f7564 Для нулевых сайтов на opencart
img

Переход на https в opencart wordpress

Для wordpress

https://zen.yandex.ru/media/id/5b4ae96b3d0e9500a9a853c7/podkliuchenie-besplatnogo-sslsertifikata-na-hostinge-timeweb-5b5eb4e09bef9e00a82f7564

Для нулевых сайтов на opencart

Переход на https в opencart wordpress

Для wordpress https://zen.yandex.ru/media/id/5b4ae96b3d0e9500a9a853c7/podkliuchenie-besplatnogo-sslsertifikata-na-hostinge-timeweb-5b5eb4e09bef9e00a82f7564 Для нулевых сайтов на opencart
img

Как наполнить opencart 2.3 fake-заказами

Подключиться к БД другого интернет-магазина и выкачать оттуда заказы с помощью запроса С помощью хранимой процедуры актуализируем заказы, на одну дату по пять заказов Если получились заказы из будущего, то запросом delete удаляем лишнии, в […]

Как наполнить opencart 2.3 fake-заказами

Подключиться к БД другого интернет-магазина и выкачать оттуда заказы с помощью запроса С помощью хранимой процедуры актуализируем заказы, на одну дату по пять заказов Если получились заказы из будущего, то запросом delete удаляем лишнии, в […]
img

Создание pdf с деталями заказа в письме клиенту. Opencart

Сделано в OPENCART 2.3. Скачать библиотеку, зайти в папку с ней через консоль команд и выполнить команды git clone https://github.com/dompdf/dompdf.git cd dompdf git clone https://github.com/PhenX/php-font-lib.git lib/php-font-lib cd lib/php-font-libgit checkout 0.5.1 cd .. git clone https://github.com/PhenX/php-svg-lib.git […]

Создание pdf с деталями заказа в письме клиенту. Opencart

Сделано в OPENCART 2.3. Скачать библиотеку, зайти в папку с ней через консоль команд и выполнить команды git clone https://github.com/dompdf/dompdf.git cd dompdf git clone https://github.com/PhenX/php-font-lib.git lib/php-font-lib cd lib/php-font-libgit checkout 0.5.1 cd .. git clone https://github.com/PhenX/php-svg-lib.git […]
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x