- Saved searches
- Use saved searches to filter your results more quickly
- License
- sebastianbergmann/php-text-template
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Реализация шаблонов на PHP
- Использование шаблонов.
- За и против.
- Реализация шаблонов на PHP.
- Файл: file2compile.tpl
- Файл: template.php
- Функция: get_tpl
- Функция set_tpl
- Функция tpl_parse
- Использование класса.
- Заключение.
- Генерация word документа на php (шаблон .docx)
- Подготавливаем шаблон word документа
- Создаем word документ
- Синтаксис для замены переменных
- Подготовим пару переменных
- Подставляем, заменяем переменные в word документ
- Сохраняем сгенерированный word файл на сервер
- Функция перевода числа в прописной вид
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
License
sebastianbergmann/php-text-template
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
You can add this library as a local, per-project dependency to your project using Composer:
composer require phpunit/php-text-template
If you only need this library during development, for instance to run your project’s test suite, then you should add it as a development-time dependency:
composer require --dev phpunit/php-text-template
Реализация шаблонов на PHP
Добрый день уважаемые господа! В данной статье я хотел бы затронуть очень важную тему, а именно шаблоны в PHP. В этой статье я приведу простой, но работающий пример «шаблонов», также мы рассмотрим все за и против использования шаблонов.
Использование шаблонов.
Прежде чем использовать шаблоны, подумайте, действительно ли они вам так нужны? В данный момент существует огромное количество коммерческих вариантов шаблонов. Все они работают по одному принципу (значение, замена), но имеют огромное количество наворотов, таких как автоматическое изменения регистра переменных, поиск по регулярным выражениям и т.д., все это конечно хорошо и легко реализуемо. Когда я решил посмотреть «коммерческий» шаблон, я ужаснулся, один его класс весил 398 КБ. Это нормально? Также в сети можно найти множество бесплатных вариантов шаблонов (классы шаблонов в PHPBB, IPB:), но все они много весят и работают не слишком быстро. Я предлагаю вам простой каркас «шаблонов» на PHP, с его помощью можно сделать свой классный шаблонизатор, со всеми необходимыми вам функциями.
За и против.
Приведу вам жизненный пример, не так давно я занимался разработкой программы для одного человека, заранее было обговорено, что я пишу программу, а дизайн это его дело. Через некоторое время, мой заказчик пишет мне, что дизайн для моей программы сделать невозможно. Конечно, человек ничего не знающий в web-программировании будет испытывать огромные затруднения, при построении дизайна в PHP-программе. Главная задача ‘шаблонов’ — это облегчить жизнь дизайнеру. Безусловно, главным плюсом использования шаблонов можно считать то, что дизайнер без помощи программиста сможет изменять свой web-проект. Также мне нравится само разделение — программа и дизайн.
Я не использую шаблоны в своих личных проектах, т.к. они дают дополнительную «нагрузку». Шаблоны это хорошо, но использовать их надо только если пишешь какой, то публичный проект или выполняешь работу на заказ.
Реализация шаблонов на PHP.
И так приступим. Всего у нас будет 2 ключевых файла.
- 1) file2compile.tpl – файл который мы будем парсить
- 2) template.php – главный файл содержащий класс шаблонов
Листинг файла file2compile.tpl:
Листинг файла template.php:
else < $this->template = file_get_contents($tpl_name); > > function set_tpl($key,$var) < $this->vars[$key] = $var; > function tpl_parse() < foreach($this->vars as $find => $replace) < $this->template = str_replace($find, $replace, $this->template); > > > $parse = new parse_class; ?>
Теперь я подробно опишу содержание этих двух файлов.
Файл: file2compile.tpl
Тут приведен обычный HTML код. В данном файле можно найти переменные вида . Это как раз именно те переменные которые мы будем заменять на нужное нам значение.
Файл: template.php
Мы имеем PHP класс, разделенный на 3 функции. В самом начале файла мы объявляем классовые переменные.
- $vars – массив со значениями (переменная, замена).
- $template – файл который мы будем парсить.
Теперь перейдем к описанию функций.
Функция: get_tpl
В качестве аргумента функция принимает имя файла. В теле функции мы проверяем задан ли аргумент и существует ли файл. Если аргумент не задан и файл не существует мы возвращаем значение FALSE. В противном случае мы заполняем классовую переменную(template) содержанием файла.
Функция set_tpl
Функция принимает 2 значения, это переменная (напр.
Функция tpl_parse
Функция не принимает никаких значений. В теле функции мы считывает массив $vars и производим замену установленных переменных на заданные значения.
Использование класса.
Для вывода на экран используйте следующие команды:
get_tpl('template.tpl'); //Файл который мы будем парсить $parse->set_tpl('','Супер сайт'); //Установка переменной $parse->set_tpl('','#F2F2F2'); //Установка переменной < BGCOLOR >$parse->set_tpl('','Это текст обрамленый красным цветом'); //Установка переменной $parse->tpl_parse(); //Парсим print $parse->template; //Выводим нашу страничку ?>
Заключение.
Надеюсь, моя статья поможет вам лучше понять, что такое шаблоны.
Генерация word документа на php (шаблон .docx)
Первое с чего нужно начать, это создать .docx документ на своем ПК, например template.docx Для примера я взял куски из договора на создание сайта
Подготавливаем шаблон word документа
Открываем word файл и начинаем его шаблонизировать путем замены текста на переменные синтаксиса типа $ У нас будут следующие переменные, которые мы будем подставлять в документ: $ — номер догвоора
$ — город
$ — текущая дата
$ — ФИО
$ — Название Организации ООО
$ — Сумма
$ — Сумма, прописью
$ — Налог, 6% от суммы
$ — Налог, 6% от суммы (прописью)
$ — Юр. адрес
$ — Почтовый адрес
$ — ОГРН
$ — ОКПО
$ — КПП
$ — ИНН организации
$ — Название банка
$ — кор. счет
$ — р. счет
$ — ФИО директора Далее скачиваем библиотеку PhpWord
Создаем word документ
//Подключаем библиотеку require $_SERVER["DOCUMENT_ROOT"].'/lib/phpword/autoload.php'; //создаем класс $phpWord = new \PhpOffice\PhpWord\PhpWord(); $_doc = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
Синтаксис для замены переменных
Подготовим пару переменных
//запихиваем сумму в переменную, что бы далее с ней поработать $summa = 25550; // делаем красивый формат $summa_format = number_format($summa, 2, ',', ' '); // вычислим налог от суммы (6%) и так же определим в отдельную переменную красивый формат суммы $summa_nalog = $summa * 6 / 100; $summa_nalog_format = number_format($summa_nalog, 2, ',', ' ');
Подставляем, заменяем переменные в word документ
$_doc->setValue('num_dogovor', $number_document); $_doc->setValue('city', "г. Сочи"); $_doc->setValue('name', "Масков Илон Гениальнович"); $_doc->setValue('date', date("d.m.Y")); $_doc->setValue('company', "ООО НЕ ПРОХОДИТЕ МИМО"); $_doc->setValue('summa', $summa_format); $_doc->setValue('summa_str', num2str($summa)); $_doc->setValue('summa_nalog', $summa_nalog); $_doc->setValue('summa_nalog_str', num2str($summa_nalog)); $_doc->setValue('company_ogrn', "ОГРН компании"); $_doc->setValue('company_inn', "ИНН компании"); $_doc->setValue('company_kpp', "КПП компании"); $_doc->setValue('company_bank', "Какое то название банка"); $_doc->setValue('company_bik', "бик банка"); $_doc->setValue('company_ks', "12342352456235"); $_doc->setValue('company_rs', "66666666666"); $_doc->setValue('ur_address', "Юридический адрес, какой-нибудь"); $_doc->setValue('post_address', "Фактический адрес"); $_doc->setValue('direktor', "Альберт Енштейн"); $_doc->setValue('company_okpo', "4444444");
Сохраняем сгенерированный word файл на сервер
$img_Dir_Str = "/files/"; $img_Dir = $_SERVER['DOCUMENT_ROOT']."/". $img_Dir_Str; @mkdir($img_Dir, 0777); $file = str_replace("/","-", "Договор №".date("d-m-Y")).".docx"; $_doc->saveAs($img_Dir.$file);
Обратите внимание на строку: $_doc->setValue(‘summa_str’, num2str($summa)); и $_doc->setValue(‘summa_nalog_str’, num2str($summa_nalog)); В ней мы используем функцию перевода числа в прописной вид
Функция перевода числа в прописной вид
function num2str($num) < $nul='ноль'; $ten=array( array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'), array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять'), ); $a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'); $tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто'); $hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот'); $unit=array( // Units array('коп.' ,'коп.' ,'коп.', 1), array('рубль' ,'рубля' ,'рублей' ,0), array('тысяча' ,'тысячи' ,'тысяч' ,1), array('миллион' ,'миллиона','миллионов' ,0), array('миллиард','милиарда','миллиардов',0), ); // list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num))); $out = array(); if (intval($rub)>0) < foreach(str_split($rub,3) as $uk=>$v) < // by 3 symbols if (!intval($v)) continue; $uk = sizeof($unit)-$uk-1; // unit key $gender = $unit[$uk][3]; list($i1,$i2,$i3) = array_map('intval',str_split($v,1)); // mega-logic $out[] = $hundred[$i1]; # 1xx-9xx if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99 else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9 // units without rub & kop if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]); > //foreach > else $out[] = $nul; $out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub $out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop return trim(preg_replace('/ /', ' ', join(' ',$out))); > /** * Склоняем словоформу * @ author runcore */ function morph($n, $f1, $f2, $f5) < $n = abs(intval($n)) % 100; if ($n>10 && $n<20) return $f5; $n = $n % 10; if ($n>1 && $n