fenom
fenom copied to clipboard
тег ignore работает не правильно
например есть JS подключаемый через include {ignore} $(function() { 'use strict' {/ignore} в результате получим что ignore не закрыт. Очень хочеться как в смарти менять разделитель на усмотрение, т.е. заменить {..} на {#...#} например, тогда проблем с ignore будет меньше.
Не совсем понятно, у вас {/ignore}
в самом коде JS участвует и является частью JS?
через инклюд подключаю js файл, внутри него есть места где используется парсер, т.к. парсер использует фигурные скобки, а запись $(function() {'use strict' (без пробела) обрабатывается парсером, если ставить ignore, то именно на эту часть он не срабатывает, говорит что ignore не закрыт, хотя очевидно что это не так.
могу конечно ошибиться но скорее всего вам подойдет вариант
{script:ignore} ... {/script}
блочного игнорирования.
попробовал, не получилось, также я не нашел тега script в Fenom/Compiler.php или я не правильно его использую...
Unexpected tag 'script' in path:js/main.js.tpl line 47, near '{script:' <- there in path:shop/layout line 203, near '{include "path:js/main.js.tpl"' <- there...
проверил еще раз, срзу скажу что использую в modx, обновил до послед версии феном, оставил тег ignore и js код на странице... не работает, раньше думал что только в include не работает. Есть подозрения что parser режет теги, но я ничего криминального в его коде не нашел. Вот то что есть на странице: {ignore:ignore}<script> $(function() {'use strict'; 123;}) </script> {/ignore}
а вот у клиента: Unexpected token ';' in 563995f7dca13591a0317fa93b191d36 line 2, near '{'use strict';' <- there
В pdotools шаблон обрабатывается след образом: $tpl = $fenom->getRawTemplate()->source($name, $content, true);
на тот момент переменная $content содержит правильный код указанный выше (по мне так все верно). Почему ignore не обрабатывается ХЗ.
Хаха только что нашел что Василий использовал отдельное подключение css и js в pdo при использовании fenom, походу он тоже на это напаролся, и как обычно "обошел" проблему
короче... я балбес ) оказывается fenom вызывался 2 раза, соответственно 2-й раз ignore уже отсутствовал. НО проблема существует, например, как я описывал выше, код:
{ignore}<script> $(function() {'use strict'; 123; </script> {/ignore}
вернет ошибку Unclosed tag: {ignore} opened on line 1, а следующий код сработает без ошибок: {ignore}<script> $(function() {'use strict'; 123; //} </script> {/ignore}
Последний пример очень странный, выглядит как какой-то скрытый баг
возьмем пример из документации по ignore и уберем скобку (знаю что по отношению к парсеру браузера так делать не стоит): {ignore}<style> h1 {font-size: 24px; color: #F00; </style> {/ignore}
казалось бы что код должен отработать без ошибок парсера, итог Unclosed tag: {ignore} opened on line 1 Я думаю все таки оптимальным решением был бы уход от фигурных скобок в сторону кастомных, ибо ситуации бывают разные и при комбинации различных шаблонизаторов, js, стилей, да мало ли чего еще, велика вероятность получить ошибку. Тот же парсер modx (по-умолчанию) проходится по коду несколько раз, и если за один проход он отрабатывает ignore верно, то на следующем он уже не увидит этих тегов и бумс опять ошибка, лично я не согласен с такой работой парсера modx, но такая уж логика.