Прошу пробовать: https://github.com/artoodetoo/dirk , на пакагисте заведен как artoodetoo/dirk , то есть можно подключать через компосер. Зависимостей от других пакетов нет, PHP 5.4+ Синтаксис стянут у laravel/blade. Код (Text): @extends('layout/main') <h1>Hello {{{ $name }}}!<h1> {{ $timestamp or 'Timestamp not defined' }} @section('sidebar') @foreach($list as $l) <p>{{ $l }} @if($l == 3) is equal 3 ! @endif</p> @endforeach @endsection Здесь показаны: наследование шаблона от layout/main. Вывод переменной $name с экранированием. Вывод переменной $timestamp со значением по умолчанию, если она не определена. Секция 'sidebar', которую выведет родительский шаблон. Цикл, условие — всё как в нормальных домах ))) От вставки нативного PHP шаблон никак не защищается, позже наверное сделаю опциональную порчу <?php ?>. Предназначен для тех, кто хочет иметь шаблоны, но не хочет сильно раздувать приложение. 2 файла, 236 строк кода (так говорит cloc). Для сравнения: если подключить blade без прочего ларавеля, то прилетит 148 файлов и 8515 строк. Это и есть причина, по которой появился dirk. Свободно для использования. Лицензия MIT.
Re: Еще один шаблонизатор на PHP А в чем принципиальное отличие От Код (Text): echo (!empty($timestamp))?($timestamp):('Timestamp not defined')); , кроме лишнего оверхеда и "минималистичнее смотрится"? Ну и то же про циклы, ифы.
Re: Еще один шаблонизатор на PHP скобок-то нафигарил echo !empty($timestamp) ? $timestamp : 'Timestamp not defined'; ну для шаблонизатора в том виде, в каком они нычне существуют (без ограждающих тегов как в пхп) очень даже удобная фишка так писать. Мне нравайся. Просто я шаблонизаторы не уважаю.
Fell-x27, ты сторонник нативных шаблонов? смотри как Dirk транслирует было Код (Text): {{ $timestamp or 'Timestamp not defined' }} стало Код (PHP): <?= isset($timestamp) ? $timestamp : 'Timestamp not defined' ?> где тут оверхед?
Re: Еще один шаблонизатор на PHP Моя любить скобки, скобки вносить порядок, скобки убирать неоднозначность, в пыхе без скобок можно выстрелить себе в ногу. Классический пример: Код (Text): $arg = 'T'; $vehicle = ( ( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) ? 'airplane' : ( $arg == 'T' ) ? 'train' : ( $arg == 'C' ) ? 'car' : ( $arg == 'H' ) ? 'horse' : 'feet' ); echo $vehicle;// выведет horse А с "нафигаренными скобками" все будет работать как нужно. Никто не спорит, но Моя пытаться понять смысл этих телодвижений... Добавлено спустя 1 минуту 16 секунд: Re: Dirk - еще один шаблонизатор на PHP и сохраняет в файлик, который потом дергается, или транслирует при каждом вызове? В любом случае, почему сразу не написать ?
ёманарот, чем я заслужил такое! суслик, конечно он каждый раз транслирует еще и sleep херачит, чтобы сервер выспался. Добавлено спустя 3 минуты 54 секунды: я же не навязываюсь, хочешь, сразу пиши. вместо того, чтобы п*еть, взял бы да качнул. там в коробке есть "нативный" класс PhpEngine, который ничего не транслирует, а только поддерживает среду выполнения — наследование шаблонов и блоки . Dirk наследует от PhpEngine добавляя только транслятор. в перспективе можно и других наследников завести, если есть особые пристрастия по синтаксису.
Тю, не ругайся и не обзывайся, у мне правда искренний интерес, все еще пытаюсь понять суть подобных шаблонизаторов. Я б качнул, но я на работе.
пустая строка ≠ неинициализированная переменная Код (PHP): $view->render('hello', ['timestamp' => '']); ... и где-то в шаблоне ... echo isset($timestamp) ? $timestamp : 'Timestamp not defined'; выведет пустую строку. только в случае не-инициализированной переменной или null эта штука выводит дефолтовое значение. так и задумывалось. в blade оно так и я не стал изменять поведение, ибо нефиг. Добавлено спустя 8 минут 6 секунд: мне вот хочется локализацию в шаблоны прикрутить, но так, чтобы не жестко завязываться на какие-то классы! в ларавеле для этого есть фасад Lang, но я же не для того сделал независимый шаблонизатор, чтобы приклеить его к конкретному фреймворку ))) в общем, выслушаю советы.
По-моему раскрыта. Минимализм кода и отсутствие зависимостей. Тупиковый путь, но лучше уж так, чем водку в подъездах gettext посмотри. Сдандарт в линуксе Добавлено спустя 13 минут 33 секунды: ЗЫ: ого, я тут узрел только, что у твига php экстеншн есть. Хотя вряд ли оно сильно производительность улучшит.
append дописывает новую порцию к блоку вместо полного перекрытия. в твиге, по моему, нет аналога. можно сэмулировать конечно.
не понял. покажи на конкретном примере что нужно. скажу сразу, никакого <parent> не существует. надо другими средствами оперировать.
Думаю такой пример будет понятен, как получить данные в блоке который находится ниже по иерархии информацию из более высокого блока в иерархии. Код (PHP): {% extends "base.html" %} {% block sidebar %} {{ parent() }} <img src="/example.jpg"> {% endblock %}
парента в распоряжении нет. рассуждая логически, если мы хотим оставить в выводе родительский блок, то можно просто в родителе вынести текст из блока sidebar и ниже него сделать @yield('sidebar'). на выходе получится: Код (Text): родительский текст дочерний текст с img
Выглядит занятно, поставил плюсик )) Пожелание: т.к. синтаксис сдернут с блейда, сделать возможным расширение файлов .blade.php. Получим "кроссплатформенность" и разметку в phpstorm.