В последнее время, я работал с порталом, посещаемостью около 100 тысяч человек в месяц написанном на Codeigniter. Все бы ничего, но любая страница этого портала отдавалась сервером не меньше 3 секунд. При этом, железо уже не было куда расширять а об архитектуре приложения говорить не будем. Мне нужно было найти решение которое помогло бы сократить время ответа приложения с наименьшими изменениями кода.
Читать дальше →
... описание основных возможностей
Handlebars и является ...
Данная статья содержит в себе описание основных возможностей шаблонизатора Handlebars и является свободным переводом его официальной документации. Итак, поехали…
Читать дальше →
... ставилось не написать
(которых и так ... и не заменить
JavaScript. Я прекрасно ...
Предлагаю вашему вниманию свое решение по генерации html на PHP. Задача вроде бы тривиальная, но хотелось бы, чтобы это было расширяемо, кратко, но в тоже время с хорошим функционалом. Получилось вроде не плохо.
Сразу скажу( как многие считают в комментариях), что задача ставилось не написать шаблонизатор (которых и так много) и не заменить шаблонизатор JavaScript. Я прекрасно знаю, что true way это разделять html и данные. Но мне понадобилось писать html в классах, для создания компонентов фреймворка, на подобие CGridView в yii, стоит ли в таких местах выносить html в отдельные файлы решать вам.
Основная цель, избавится от html в классах и функциях.
Простой пример, обычная кнопка:
CHtml::create()
->p()
->a(array('href' => 'http://habrahabr.ru', 'class' => 'btn'))
->text('Перейти')
->render();
Результат:
<p><a href="http://habrahabr.ru" class="btn">Перейти</a></p>
Ничего хитрого, можно было бы этим и ограничется, но захотелось циклы:
$arr = array('1' => 'Первый', '2' => 'Второй');
CHtml::create()
->select($options)
->each(CHtml::plainArray($arr, 'value', 'text'))
->option('array("value" => $data->value)')
->text('$data->text')
->end()
->endEach()
Тут понадобилось вызвать функцию plainArray() которая превращает массив в виде:
$arr = array(
array('value' => '1', 'text' =>'Первый'),
array('value' => '2', 'text' => 'Второй')
);
Теги внутри цикла могут содержать функции или строки с eval выражениями, вложенность любая, пример с таблицей:
$columns = array(
array('id' => 'NAME', 'label' => 'Имя'),
array('id' => 'AGE', 'label' => 'Возраст')
);
$data = array(
array('NAME' => 'Петр', 'AGE' => 29),
array('NAME' => 'Василий', 'AGE' => 32)
);
CHtml::create()
->table()
->thead()
->tr()
->each($columns)
->th()
->text(function($column){
return $column['label'];
})
->end()
->endEach()
->end()
->end()
->tbody()
->each($data)
->tr()
->each($columns)
->td()
->text(function($row, $column) {
return $row[$column['id']];
})
->end()
->endEach()
->end()
->endEach()
->render();
Читать дальше →
Синтаксис Lua позволяет реализовать шаблоны в стиле PHP буквально несколькими регулярными ...
Синтаксис Lua позволяет реализовать шаблоны в стиле PHP буквально несколькими регулярными выражениями.
Для начала посмотрим, что из этого выйдет.
Подстановка переменных
<a href="<%url%>"><%label%></a>
Логические конструкции
Будет
<? if 1 > 2 then ?>
лучше
<? else ?>
хуже
<? end ?>
Циклы
<ul>
<? for i = 1, 9999 do ?>
<li>ФЗ №<%i%></li>
<? end ?>
</ul>
Подключение других шаблонов
<html>
<script><? require "scripts" ?></script>
<style><? require "styles" ?></style>
...
<? require 'tracking' ?>
И любые другие конструкции на Lua
<? function warn() ?>
<b>Вы совершаете уголовно наказуемое деяние!</b>
<? end ?>
...
<? warn() ?>
...
<? --[[ ?>
Больше нечего скрывать
<? --]] ?>
И это все собирается одной командой в обычный модуль Lua:
(echo "return function(_)_[=["; sed -e "s/<%/]=]_(/g; s/%>/)_[=[/g; s/<[?]/]=] /g; s/[?]>/ _[=[/g"; echo "]=] end") < template.tpl > template.lua
Читать дальше →
В данной статье показывается пример реализации модели MVC средствами PHP. Предлагаемая ...