Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 19

Извините, но код очень сложно читать:
  • везде переменные названы по-разному (с подчеркиваниями, в верхнем регистре, без разделения значимых частей — camelCase например),
  • условные операторы в одну строчку,
  • никаких пробелов между аргументами функций
Виноват, не туда ответил, объяснил ниже.
В функцию рендера приходит ассоциативный массив параметров, которые для удобства превращаются в переменные (чтобы писать "$V($item)" вместо "$V($data['item'])", например). Чтобы эти переменные отличались от остальных, таких как скин, например, остальные имеют префикс "_". При подготовке шаблона они воспринимаются как «системные», «специальные» или «внутренние».

Как я уже писал ранее, в верхнем регистре названы только лямбда-функции, опять же с целью повысить отличимость, визуально выделить на фоне HTML в шаблоне, и исключить пересечения с параметрами шаблона (для параметров шаблона декларировано, что они должны быть всегда в стандартном формате camelCase). Это ситаксический «сахар» для тех, кто программирует шаблоны. В целом, сами конечные шаблоны смотрятся весьма неплохо и читаемо, на уровне классических шаблонов вроде Smarty, php-вставки не режут глаз и воспринимаются как часть HTML. Если у вас есть идея как еще сильнее понизить «эффект присутствия php», буду рад, если поделитесь.

Пробелы между аргументами и условные операторы в одно действие — это вечно спорный вопрос стилистики и выбранных стандартов форматирования для группы разработчиков.
ничего нового, всё по старому, совсем не похоже на синтаксис написания подобно twig, и как бы там не называли новыми словами, лямда, замыкания и т.п…

Пока вот эти конструкции не исчезнут из шаблона, ни о каком сравнении говорить нельзя, а избавиться от них никак.
Ваша реализация по большему счёту, только запутает кодера.

Да и поддержка коротких тегов, не во всех хостинга включена. Вообще я противник коротких тегов.
упс код не прочитался хабром, имелось введу
<? и ?>
вроде так
Задача была — убрать уровень компиляции шаблонов после каждого редактирования, а не написать новый шаблонизатор. Когда мы с коллегами обсуждали мысль заменить шаблонизатор, синтаксис php воспринялся исполнителями шаблонов намного радостнее, чем синтаксис twig, потому что не требует поддержки дополнительных знаний и нюансов. И конечно, код шаблона не будет работать на хостингах, где поддержка коротких тегов запрещена по каким-либо причинам.
Вроде как в php 5.4 оставили поддержку коротких тегов, а вообще я целиком с вами согласен. Перемудрено как-то. Для меня простейший шаблонизатор это смесь php и html + extract параметров представления + правильные манипуляции с ob_start/ob_get_contents().
в 5.4 поддержка коротких тегов есть всегда и неотключаема.
Note:
блаблабла Since PHP 5.4.0, <? = is always available.
И еще в upgrading из svn:
<? = is now always available regardless of the short_open_tag setting.
Посмотрите исходный код шаблона, который представлен в топике. Там используются короткие тэги "<? ?>" и сокращения "<? = ?>". Так опция short_open_tag до 5.4 влияет на оба этих способа вклинивания PHP кода. После 5.4 — только на первое, второе работает всегда.
аа, вот вы о чем. Это да, касается только <? =.
Что делает $SLOT?
Определяет место в шаблоне компонента, куда вставляется верстка дочернего (вложенного) компонента, содержащегося в указанной параметром переменной. Он имеет свой собственный шаблон. Эта и другие специальные инструкции могут «прийти» в шаблон из $this->instructions.
Конечно, интересно было прочитать, но осталось стойкое ощущение велосипеда.
Было бы лучше оформить как класс, разнести логические блоки кода по методам, как мне кажется.
С другой стороны синтаксис вашего шаблона весьма нестандарен. И я предпочту нативные шаблоны этому.
Инструкции используют замыкания с переменными, чтобы не тащить их в шаблоне, таким образом количество php на фоне html сокращается. Сравните:
....
<?$INCLUDE('snippet')?>
<img src="<?$R('pic.png')?>" alt="<?$V($alt)?>"/>
....
<?$this->include('snippet',$data,$skin,$template)?>
<img src="<?$this->r('pic.png',$skin,$temlate)?>" alt="<?$this->v($data)?>"/>
...

Я не против классического подхода к шаблонам на php, но хотелось сделать почище.
Может я сноб, но мне оба варианта не нравятся.
Методы с названием 'v' и $this в шаблоне. Понятно же, что $this :)

Чем
/** @var $model User */
?>
<?php
/** @var $form CActiveForm */
$form = $this->beginWidget( 'CActiveForm', array ( 'htmlOptions' => array ( 'class' => 'sign_in' ) ) );
?>
<?php echo Yii::t( 'frontend', 'Authorization' ) ?>


<?php if ( isset( $errorMessage ) && $errorMessage !== false ): ?>
Код ошибки: <?php echo $errorMessage ?>
<?php endif; ?>


<?php echo Yii::t( 'frontend', 'Email' ) ?>:
<?php echo $form->textField( $model, 'email', array ( 'id' => 'text-2', 'class' => 'textInput' ) ) ?>
<?php echo Yii::t( 'frontend', 'Password' ) ?>:
<?php echo $form->passwordField( $model, 'password', array ( 'id' => 'password-3', 'class' => 'textInput' ) ) ?>

<?php echo CHtml::link(Yii::t( 'frontend', 'Forgot your password?' ), Yii::app()->createUrl('auth/remindPassword')) ?>


<?php echo CHtml::tag( 'button', array ( 'class' => 'submitButton', 'type' => 'submit' ), Yii::t( 'frontend', 'Login' ) ) ?>
<?php $this->endWidget() ?>


хуже вашего шаблона?
В рот мне ноги, давно же я код на хабре не постил. Жуть то какая.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации