ФорумПрограммированиеPHP для идиотовРасширения PHP → Blitz template

Blitz template

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 0:30, спустя 3 минуты 59 секунд

    Абырвалг, gthtlfv pftcrtqgktye.
    Спустя 22 сек.
    заскейпленое передам
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2010 г. 1:20, спустя 50 минут 10 секунд

    даже эдво говорил,что эскейпить нужно во вьюхе
    Спустя 18 сек.
    только вьюха знает как нужно эскейпить
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 1:25, спустя 4 минуты 35 секунд

    Абырвалг, )))

    понарожали активных шаблонизаторов, от жира бесятся суки ЖВ
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 11:41, спустя 10 часов 16 минут 46 секунд

    Спустя 2 минуты 8 секунд добавил

    Абырвалг

    есть ли там автоэскейпинг?

    Есть там функция escape. Можешь еще сам каких угодно функций написать.


    Мне например не нравится всё эскейпить в шаблоне, да и в контроллере это запарно и промахнуться можно.

    Но я просто parse() дополнил, чтобы он все переданные переменные экранировал рекурсивно. Исключение, те, которые начинаются с "html_" - там HTML-код, их экранировать нефиг.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 12:10, спустя 28 минут 20 секунд

    Моя стратегия такая :) когда пишешь шаблон, ты знаешь допустИм ли в этом месте вывод HTML или нет. Поэтому: если
    {$var} выводит без эскейпинга, то
    {@var} с эскейпингом.
    Это синтаксис моего шаблона. Нет ничего проще, наглядней и правильнее! Это не то место, где надо выносить логику вовне. Ящитаю!
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 12:27, спустя 17 минут 38 секунд


    Моя стратегия такая :) когда пишешь шаблон, ты знаешь допустИм ли в этом месте вывод HTML или нет. Поэтому: если
    {$var} выводит без эскейпинга, то
    {@var} с эскейпингом.
    Это синтаксис моего шаблона. Нет ничего проще, наглядней и правильнее! Это не то место, где надо выносить логику вовне. Ящитаю!
    +1, dudetpl так же умеет =)

    только там вроде было [var](simple echo),[:var](htmlspecialchars), [::var](urlencode)
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 12:31, спустя 3 минуты 53 секунды

    Это не то место, где надо выносить логику вовне.

    А это не логика )
    Вот нужно вывести имя Вася, то просто в шаблоне {name}, а если Вася сменит имя на "Вася <script>…", это не дело шаблона и верстальщика )
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2010 г. 12:40, спустя 8 минут 35 секунд

    это не дело шаблона и верстальщика

    в большинстве случаев это дело автоэскейпинга по стратегии html.
    Спустя 39 сек.
    и маджента в шаблонах эскейпит руками. Эскейпить данные в контроллере и передавать в шаблон уже заэскейпенные - неправильно
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2010 г. 12:50, спустя 9 минут 55 секунд

    вот нашел ту тему http://pyha.ru/forum/topic/3746.15
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 12:56, спустя 6 минут 44 секунды


    Это значение - строка, в которой "foo\nddd". Как буш эскейпить?

    Так и не понял до конца. Вот есть у меня строка в php:
    $a = "foo\nddd";
    Какой я должен результирующий JS получить скажи, и я скажу как это сделать в блитце?
    По моему это зависит от того, что я потом хочу в JS  с этой строкой сделать, скажем для alert-а надо одно, для document.write другое …
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2010 г. 13:00, спустя 3 минуты 49 секунд

    эу, не
    $a = 'foo\nddd';

    а
    $a = "foo\nddd";


    нужно получить такое
    var a= 'foo\nddd';

    а не такое
    var a= 'foo
    ddd';


    в Twig это делается так
    var a= '{{ a|e('js') }}';


  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 13:03, спустя 2 минуты 26 секунд

    в Twig это делается так

    ёбаный нахуй…
    Спустя 21 сек.
    это в шаблоне?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 26 ноября 2010 г. 13:05, спустя 1 минуту 52 секунды

    да
    Спустя 42 сек.
    a - имя переменной
    |e - применение к этой переменной фильтра escape
    ('js') - стратегия эскейпинга
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 13:57, спустя 52 минуты 4 секунды

    Теперь понял.

    Чем хорош Blitz, что он гибок и настраивается под себя как душе угодно.
    Итак, пишем расширение для эскейпирования в стиле JS (его можно написать один раз и на всю жизнь):

    class MyBlitz extends Blitz
    {
    public function esjs($string, $symbols = "\n")
    {
    return addcslashes($string, $symbols);
    }
    }

    $Blitz = new MyBlitz('test.tpl');
    echo $Blitz->parse(array('string' => "foo\nddd"));


    После чего используем в шаблоне:

    <!– test.tpl –>
    <script>
    alert("{{ esjs($string) }}");
    </script>


    Вуаля …

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 26 ноября 2010 г. 13:59, спустя 2 минуты 7 секунд

    Моя стратегия такова: почему верстальщика должно это ебать?
    У него - есть строка, её надо вставить здесь.
    Какие фильтры? Какие стратегии?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!