Download the PHP package ksnk/text without Composer

On this page you can find all versions of the php package ksnk/text. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package text

Текстовые утилиты

Все утилиты выполнены в виде функций единственного класса tpl. Класс, непосредственно реализующий функционал - Model_tpl, однако для удобства применения каждая функция может быть вызвана как статическая функция tpl. Вызов статического синонима, как правило, более компактен и не требует предварительного создания класса, однако в классическом виде можно настроить поведение более гибко. И с наследованием все значительно более правильно. Впрочем, обычно это не нужно.

Несомненной пользой класса является тот факт, что класс одинаково хорошо работает как в обычном, так и битриксовском серверном окружении.

Использование

use Ksnk\text\tpl;
$data=[
    'promo'=>'СКОРОЛЕТО',
    'first_name'=>'Вагоноуважатый',
    'discountrub'=>250,
    'prop'=>tpl::prop(2345,tpl::RUB),
    'date'=>'now'
    ];
echo tpl::text('Глубокоуважаемый{first_name?{ first_name}{ second_name}}!
При оформлении заказа от {date|d}, Вам предоставлена скидка {discountrub?{discountrub}₽:{discount}%} по промокоду `{promo}`
Общая сумма заказа составляет: {prop}
',$data);
/*
Глубокоуважаемый Вагоноуважатый!
    При оформлении заказа от 25 октября, Вам предоставлена скидка 250₽ по промокоду `СКОРОЛЕТО`
    Общая сумма заказа составляет: две тысячи триста сорок пять рублей
*/

установка

composer require ksnk/text

По сути - там пара файлов, в случае серьезной нужды - поковыряйтесь в репозитории, скопируйте его себе и делайте с ним что угодно. Но не дай БГ так оголодать ))) композер - это действительно удобно.

Сама реализация допускает небольшую модификацию шаблонизатора на лету или полное перенаследование класса с сохранением опции статического вызова уже переопределенных функций.

Вывод числа прописью. tpl::prop($number, $podpis, $kop = FALSE)

Первый параметр - число, если число не целое, целая часть выводится словами, вторая цифрами, с обрезанием на 2 цифры. Подпись к обоим частям - второй параметр. "рубл|ь|я|ей;+копе|йка|йки|ек"; Третий параметр говорит - можно ли опускать вывод 00 коп.

При выводе числа учитывается склонение. Женский род помечается ведущим символом +, при указании второго параметра функции

$number=101;
//'сто один баран на поле', склонение в мужском роде - один-два
tpl::text('{prop} на поле', [
    'prop'=>tpl::prop($number,"баран||а|ов")]);
);
// проверка склонения в женском роде одна-две вместо один-два
//'сто одна овца на поле',
tpl::text('{prop} на поле', [
    'prop'=>tpl::prop($number,"+овц|а|ы|ец")]) ;

Классический вывод цены с копейками

// двадцать три тысячи четыреста пятьдесят шесть рублей 45 копеек
echo tpl:prop(23456.45, tpl::RUB, true);

Вывод русской даты. tpl::rusd($time,$format)

К удивлению, в PHP до сих пор из коробки отсутствует возможность вывода даты по-русски, с названиями в родительном падеже. Только в именительном. Как же так?

// так советуют писать тру ПХПшники
setlocale(LC_ALL, 'ru_RU', 'ru_RU.UTF-8', 'ru', 'russian');
echo strftime("%B %d, %Y", time()).PHP_EOL;
// Октябрь 25, 2022

// Так хочет бухгалтер
tpl::rusd(time(), "j F"); // 25 октября.

Используется формат даты для обычного вывода даты по английски. Можно таймстамп, можно строковое значение из базы, которое понимается оператором strtotime. Если требуется умное преобразование дат - лучше сделать это вне шаблонизатора и передать уже нужный таймстамп.

plural form. tpl::pl

Окончания для числительных. Параметр в строковом виде, ОДИН, ТРИ, ПЯТЬ.

echo 25.' копе'.tpl::pl(25, 'копейка', 'копейки', 'копеек');

Впрочем, самостоятельного применения практически не имеет, обычно в составе шаблона. Опять же, формат параметров в строке чуть-чуть отличается от используемого функцией text, что делает явное использование функции, скорее, вредной практикой. В шаблонах используется более компактная форма вызова - одна строка параметров, разделенных |. Например этот промер через ::text выглядит более управляемо

echo tpl::text('{kop} копе{|йка|йки|еек}',['kop'=>25]);

парсинг сокращенных чисел. tpl::parseKMG

Переводит в число строковые cокращения вида .5k 1K и т.д.

echo tpl::parseKMG('.25Г'); // четверть гига - 268435456

Довольно удобно пользоваться при парсинге вывода консольных утилит. Минусом будет то что никакой реакции на то, что это не число не предполагается.

tpl::text

Форматированный вывод с подстановкой значений.

В шаблоне могут встречаться операторы-подстановки - переменная в фигурных скобках. В конце переменной могут находиться модификаторы, отделяемые символом |. Пример {date|t} Ведущие пробелы перед переменной в подстановке выводятся вместе со значением подстановки, если значение не пусто.

$data=[
    'first_name'=>'Вассисуалий',
    'second_name'=>'Лоханкин',
    'joined'=>'2022-10-15'
];

echo tpl::text('Уважаемый{ first_name}{ second_name}!', $data);

Такое не очень обычное обращение с ведущими пробелами подстановки позволяет генерировать корректные с точки зрения лишних пробелов конструкции - Уважаемый Вассисуалий! Уважаемый! Уважаемый Лоханкин! Уважаемый Вассисуалий Лоханкин!

Некоторые символы имеют служебный смысл и, могут, а в некоторых местах обязаны быть заслешены, чтобы они не использовались шаблонизатором. Эти символы {}?:\|.

Продемонстрируем чудеса эскейпинга. Технически, не обязательно эскейпить все служебные символы внутри подстановки, необходимо только те, которые ожидаются по синтаксису, однако, если их эскейпить все - результат будет точно такой же. Наиболее удобным способом поставить нужные слеши в PHP будет addcslashes($x,'{}?:\|');.

// не все служебные символы прослешены, но синтаксис позволяет
$pattern = 'Сумма прописью:{ Очень странная переменная {1\|2\}\?: }';
// 'Сумма прописью: А вот!',
echo    tpl::text($pattern, ['Очень странная переменная {1|2}?:' => 'А вот!']);

// все служебные символы прослешены
$pattern = 'Сумма прописью:{ Очень странная переменная \{1\|2\}\?\: }';
// 'Сумма прописью: А вот еще!',
echo    tpl::text($pattern, ['Очень странная переменная {1|2}?:' => 'А вот еще!']);

// правильный способ, всегда дающий правильный результат
$key='Очень странная переменная {1|2}?:';
$pattern = 'Сумма прописью:{ '.addcslashes($key,'{}?:\|').' }';
echo    tpl::text($pattern, [$key => 'А вот еще!']);

Кроме подстановок имеются логические тернарные операторы. Если значение параметра-подстановнки не пусто, выбирается первый операнд, если пусто - второй. Нужно отметить, что ведущие пробелы внутри условия тернарного оператора игнорируются, внутри операндов работают в обычном режиме.

echo tpl::text('Уважаемый {joined?подписчик:посетитель}!', $data);

Внутри операндов также могут находиться подстановки и логические операторы.

echo tpl::text('Уважаемый {first_name?:посетитель}!', $data);

Условный оператор в виде ?: имеет несколько отличающуюся от очевидной логику вывода. Если параметр не пуст, выводится он, если пуст - выводится значение по умолчанию. Фактически, является сокращением {first_name?{first_name}:посетитель}

Внутри "условной" части тернарного оператора могут быть вычисляемые конструкции

tpl::text(
"<b>Ваш счет - {count} из {total}</b>. {10<count?Поздравляем с успешным прохождением тестирования!
Ваш сертификат будет отправлен на почту указанную в Личном кабинете  \ или ваш сертификат находится в вашем ЛК в разделе Обучение (возможно ли создать такую вкладку)
:Вам немного не хватило баллов для сертификата Проф уровня.}",$data)

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

 $tpl::text('{POINT}{ CURRENT.POINT}{ CURRENT.diff}',
   ['POINT'=>'111', 'CURRENT.POINT'=>'22', 'CURRENT'=>['diff'=>444,'POINT'=>333]]); // '111 22 444'

Окончание числительных - |||

$data['number]=23;
echo tpl::text('{number} баран{||а|ов} пас{|ё|у|у}тся на поле!', $data);
echo tpl::text('{number} баран{number||а|ов} пас{|ё|у|у}тся на поле!', $data);
echo tpl::text('{number} {баран||а|ов} пас{|ё|у|у}тся на поле!', $data);
// 23 барана пасутся на поле

Модификатор, в котором присутствует 3 символа |. Можно использовать в 2-х формах, полная - баран{number||а|ов} и сокращенная баран{||а|ов} в последнем случае числовое значение берется из последнего числового шаблона-подмены.

Список модификаторов.

При использовании модификаторов даты можно использовать значение, совместимое c strtotime

Можно добавить свои собственные модификаторы, для этого служит функция tpl::mod.

tpl::mod('x', function ($data, $mod_ext, $spaces, $key, $mod) {
    //...
    return $spaces . $data;
});

Параметрами callback функции будут

tpl::utext

Отличается от text тем, что используются двойные фигурные скобки вместо одинарных для определения границ подстановок и логических операторов. В остальном логика и операторы шаблонов одинаковы. В том числе условные операторы и символы модификаторов не дублированы В определенной степени, шаблоны включают в себя шаблонный язык Unisender. Во всяком случае - я обрабатываю шаблоны, скачанные оттуда именно в этом режиме. Несколько бОльшие, по сравнению с Unisender возможности с ним самим не конфликтуют.

tpl::sql

Является экспериментальным режимом работы шаблонизатора. Позволяет готовить sql запросы в достаточно экзотических условиях. Не рекомендуется для широкого применения. Пользой этого режима для меня является единообразие sql вне зависимости от используемых CMS, что позволяет писать более переносимые с системы на систему модули, однако экспериментальный режим не позволяет широко рекомендовать такой подход к работе с БД.

Что делать, если очень нужно унаследоваться. tpl::_

Представим, что нам захотелось дополнить или изменить функционал класса, а добраться до репозитория нет возможности. Можно смастерить наследника класса, произвести там все необходимые дополнения

class ChildTpl extends Model_tpl
{

    function xxx()
    {
        return 'xxx';
    }

}

А чтобы сохранился "статический" функционал вызова - выполнить вот такой код

tpl::_(new ChildTpl);

После этого появится возможность вызова tpl::xxx() без ругательств от PHP. Обратите внимание - функции класса-наследника не должны быть описаны как статические. После описания и инициализации все использование утилит будет идти через переопределенный класс.

Более сложный пример наследования - класс Model_sql в репозитории. Он полностью переопрееделяет логику шаблонизатора, позволяя ему использоваться для приготовления SQL запросов. Чтобы оставалась возможность использовать шаблон в обычном текстовом виде, вводится отдельная функция SQL, в которой включаеься и отключается спец режим работы.


All versions of text with dependencies

PHP Build Version
Package Version
Requires php Version >=7.3
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package ksnk/text contains the following files

Loading the files please wait ....