Кто я
Я — Александр Кашеверов. По образованию — магистр радиофизики. По профессии — веб-разработчик, работаю в компании DataArt с 2011 года, с 2009 увлекаюсь IT и веб-технологиями.
О чем статья, коротко
Рассмотрим, что такое web-components и polymer. Немного поразмышляем на тему развития веба. Посмотрим на технические детали, примеры, поддержку браузерами, тестирование. Коротко, понятно, по делу. С картинками.
Вступление
Веб постоянно развивается. Технологии были придуманы и внедрены, исходя из потребностей, актуальных на момент создания. Десять лет назад невозможно было сделать то, что мы реализуем сейчас, и сложно представить, что будет еще через 10 лет.
Бизнес требует создания крупных и сложных программных веб-продуктов с богатой функциональностью, красотой, высокой производительностью. Такие решения нетривиальны сами по себе, так еще и накладывается специфичность веб-технологий. Зачастую, чтобы уменьшить сложность продукта, его разделяют на множество более простых частей. Такой компонентный подход уменьшает хаос, улучшает структуру, понимаемость, увеличивает эффективность командной работы.
Для уменьшения головной боли хорошо бы, если в контексте веб:
- CSS не пересекался.
- Области видимости JS не пересекались.
- HTML был понятным и читаемым, никаких лишних элементов.
Читать дальше →
Предлагаю вашему вниманию свое решение по генерации html на PHP. Задача вроде бы тривиальная, ...
Предлагаю вашему вниманию свое решение по генерации 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();
Читать дальше →