Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Twig, что за..
1. Twig, что за ...?
Alex Demchenko
alex@lazy-ants.de
суббота, 29 октября 11 г.
2. Twig, что за ...?
Покурим?
суббота, 29 октября 11 г.
3. Twig, что за ...?
template engine
&
templating language
суббота, 29 октября 11 г.
4. Twig, что за ...?
symfony 2
templating layer
суббота, 29 октября 11 г.
5. Twig, что за ...?
template engine
twig
php
smarty
суббота, 29 октября 11 г.
6. Twig, что за ...?
/**
* This engine knows how to render Twig templates.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class TwigEngine implements EngineInterface
https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/TwigBundle/TwigEngine.php#L20
суббота, 29 октября 11 г.
7. Twig, что за ...?
templating language
twig
php
smarty
суббота, 29 октября 11 г.
8. Twig, что за ...?
как отключить?
суббота, 29 октября 11 г.
9. Twig, что за ...?
# app/config/config.yml
framework:
# ...
templating: { engines: ['twig', 'php'] }
http://symfony.com/doc/current/cookbook/templating/PHP.html
суббота, 29 октября 11 г.
10. Twig, что за ...?
index.html.php
суббота, 29 октября 11 г.
11. Twig, что за ...?
Подключить к любому
проекту
суббота, 29 октября 11 г.
12. Twig, что за ...?
require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig = new Twig_Environment($loader, array(
'cache' => '/path/to/compilation_cache',
));
echo $twig->render('index.html', array('twitter' => '#sfcampua'));
суббота, 29 октября 11 г.
13. Twig, что за ...?
{% extends "layout.html" %}
{% block content %}
Symfony Camp UA
twitter hash {{ twitter }}!
{% endblock %}
суббота, 29 октября 11 г.
14. Twig, что за ...?
Основная задача любого
шаблонизатора
упростить работу с
шаблонами
суббота, 29 октября 11 г.
15. Twig, что за ...?
•Простой синтаксис
•Безопасность
•Наследование
•Хелперы
•Sandbox
•...
суббота, 29 октября 11 г.
16. Twig, что за ...?
{# ... #} комментарии
{% ... %} блоки
{{ ... }} отображение
суббота, 29 октября 11 г.
17. Twig, что за ...?
{% if user is defined %}
!! Привет {{ user.name }}
!! сейчас {{ ‘now’ | date(‘d.m.Y’) }}
{% endif %}
суббота, 29 октября 11 г.
18. Twig, что за ...?
Вывод переменных
суббота, 29 октября 11 г.
19. Twig, что за ...?
! ! Привет {{ user.name }}
отличное {{ photo }}
суббота, 29 октября 11 г.
20. Twig, что за ...?
Выполнение чего-либо
суббота, 29 октября 11 г.
21. Twig, что за ...?
{% if user is defined %}
! ! ...
{% endif %}
суббота, 29 октября 11 г.
22. Twig, что за ...?
{% spaceless %}
<ul>
<li>
<a ... >XXX</a>
</li>
<li>
...
{% endspaceless %}
суббота, 29 октября 11 г.
23. Twig, что за ...?
<ul><li><a ... >XXX</a></li><li>...
суббота, 29 октября 11 г.
24. Twig, что за ...?
set
if ... else
for
include
block
суббота, 29 октября 11 г.
25. Twig, что за ...?
Комментарии
игнорируются
{# if user is defined #}
{#!! ...
endif #}
суббота, 29 октября 11 г.
26. Twig, что за ...?
установка и отображение
переменных
суббота, 29 октября 11 г.
27. Twig, что за ...?
{% set foo = 'foo' %}
{{ foo }}
{% set foo = [1, 2] %}
{{ foo.0 }}
{% set foo = {'foo': 'bar'} %}
{{ foo.bar }}
суббота, 29 октября 11 г.
28. Twig, что за ...?
массивы и хеши
суббота, 29 октября 11 г.
29. Twig, что за ...?
array, []
{% for list in ['one', 'two'] %}
...
{% endfor %}
суббота, 29 октября 11 г.
30. Twig, что за ...?
hash, {}
{% for key, val in {'en': 'US', 'de': 'DE'} %}
...
{% endfor %}
суббота, 29 октября 11 г.
31. Twig, что за ...?
Операторы
суббота, 29 октября 11 г.
32. Twig, что за ...?
{{ 1 + 2 }}
{{ 'con'~'cat' }}
{% for i in 'a'..'z' %}
{{ i }}
{% endfor %}
суббота, 29 октября 11 г.
33. Twig, что за ...?
Фильтры
суббота, 29 октября 11 г.
34. Twig, что за ...?
Привет {{ user.name | upper }}
суббота, 29 октября 11 г.
35. Twig, что за ...?
сейчас {{ ‘now’ | date(‘d.m.Y’) }}
суббота, 29 октября 11 г.
36. Twig, что за ...?
{{ list | join(‘,’) }}
суббота, 29 октября 11 г.
37. Twig, что за ...?
{{ title | striptags | upper }}
суббота, 29 октября 11 г.
38. Twig, что за ...?
Функции
суббота, 29 октября 11 г.
39. Twig, что за ...?
range(0, 3)
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
суббота, 29 октября 11 г.
40. Twig, что за ...?
Наследование
суббота, 29 октября 11 г.
41. Twig, что за ...?
{% extends 'RopacGalleryFrontendBundle::layout.html.twig' %}
{% block page_class %} page_artist_news {% endblock %}
{% block mobile_menu %}
{% include 'RopacGalleryFrontendBundle:Artist:mobile_menu.html.twig' with
{'active': 'news'} %}
{% endblock %}
{% block content %}
<article class="artist">
<header class="artist_news_header">
<h1>{{artist.firstname}} <strong>{{artist.lastname}}</strong></h1>
</header>
{% include 'RopacGalleryFrontendBundle:Artist:submenu.html.twig' with
{'artist': artist, 'active': 'news'} %}
{% include 'RopacGalleryFrontendBundle:News:list.html.twig' with {'news':
news} %}
</article>
{{ parent() }}
{% endblock %}
суббота, 29 октября 11 г.
42. Twig, что за ...?
Экранирование
суббота, 29 октября 11 г.
43. Twig, что за ...?
{{ user.name|e }}
{{ user.email|e('js') }}
суббота, 29 октября 11 г.
44. Twig, что за ...?
{% autoescape true %}
Everything will be automatically
escaped in this block
{% endautoescape %}
суббота, 29 октября 11 г.
45. Twig, что за ...?
Макросы
суббота, 29 октября 11 г.
46. Twig, что за ...?
{% macro input(name, value, type, size) %}
<input type="{{ type|default('text') }}"
name="{{ name }}" value="{{ value|e }}"
size="{{ size|default(20) }}" />
{% endmacro %}
суббота, 29 октября 11 г.
47. Twig, что за ...?
{% import "forms.html" as forms %}
<p>{{ forms.input('username') }}</p>
суббота, 29 октября 11 г.
48. Twig, что за ...?
Кастомизация
суббота, 29 октября 11 г.
49. Twig, что за ...?
Каждый элемент в twig
это extensions
суббота, 29 октября 11 г.
50. Twig, что за ...?
фильтры
функции
операторы
кастомные теги
операторы тестирования
суббота, 29 октября 11 г.
51. Twig, что за ...?
extensions замены
почтового адреса на
кликабельную версию
суббота, 29 октября 11 г.
52. Twig, что за ...?
namespace RopacGalleryBundleExtension;
class RopacExtension extends Twig_Extension
{
public function getFilters()
{
return array(
'emailize' =>
new Twig_Filter_Method($this, 'emailize')
);
}
public function getName()
{
return 'ropac_extension';
}
}
суббота, 29 октября 11 г.
53. Twig, что за ...?
config.yml или services.yml
services:
twig.extension.ropac:
class: RopacGalleryBundleExtension
RopacExtension
tags:
- { name: twig.extension }
суббота, 29 октября 11 г.
54. Twig, что за ...?
namespace RopacGalleryBundleExtension;
class RopacExtension extends Twig_Extension
{
...
/**
* Transfom emails into clickable mailto links
* @param string $text
* @return string
*/
public function emailize($text)
{
return preg_replace('/([w.!#$%-+.]+@[A-Za-z0-9-]+(.
[A-Za-z0-9-]+)+)/', '<a href="mailto:1">1</a>', $text);
}
...
}
суббота, 29 октября 11 г.
55. Twig, что за ...?
{{ user.email | emailize }}
суббота, 29 октября 11 г.
56. Twig, что за ...?
Модифицировать twig
под себя
действительно
просто
суббота, 29 октября 11 г.
57. Twig, что за ...?
Производительность
суббота, 29 октября 11 г.
58. Twig, что за ...?
Каждый шаблон
собирается в php object
суббота, 29 октября 11 г.
59. Twig, что за ...?
Один раз после
изменения шаблона
суббота, 29 октября 11 г.
60. Twig, что за ...?
По-этому быстр
суббота, 29 октября 11 г.
61. Twig, что за ...?
и да
smarty 3.x быстрее
а
nativ php еще быстрее
http://habrahabr.ru/blogs/php/128083/
суббота, 29 октября 11 г.