blitz templates - теперь на sf.net

fixxxer

К.О.
Партнер клуба
1) ткнуть в disable_include (хотя ващета достаточно настроить open basedir)
2) хз
3) {{ IF 0 }} ... {{ END }} :)
 

fisher

накатила суть
>>Здравствуйте, скажите п-та как ответить хостеру, который на
>>просьбу поставить blitz ответил "извините, данный продукт не
>>отвечает нашим требованием по безопастности"?
уточнить что за требования

>>нет ли в blitz возможности использовать комментарии в шаблонах
которые не выводились бы после парсинга - нет
вариант фиксера работать будет но он понятное дело сумасшедший. вариант в смысле.
 

ru_roll

Новичок
ну я сам так пока делаю {{ BEGIN comment }} ... {{ END }} - просто хотелось бы родной реализации. Кстати насколько корректно давать одинаковые идентификаторы разным контекстам с точки зрения парсера?
 

fisher

накатила суть
>>насколько корректно давать одинаковые идентификаторы
>>разным контекстам
если разные контексты не являются детьми одного родителя (грубо говоря у них разные пути от корня) - не страшно. если у них одинаковые пути - они просто будут итерироваться синхронно
 

pilot911

Новичок
можно ли в Blitz сделать подобное (конкатенацию и выполнение функции date) для передачи аргументов в мою функцию


{{blitzGetLinkForTitle($news_title, $category_url.'/'.date("%d/%m/%y/", $starttime).$news_url.'/')}}
 

fisher

накатила суть
нет. причина: blitz аскетичен специально, чтобы ни у кого не было поползновений напихать в шаблон подобные фертели - иначе со временем шаблон превращается в спагетти. такой код сложно читать внутри HTML. перенесите эту логику во View-класс.
 

ru_roll

Новичок
Здравствуйте, немного не понял из документации к новой версии:

Будет ли {{ func() }}, если она создана в классе-расширении Blitz, иметь приоритет перед вызовом php-функции?

Ну и вопрос думаю стандартный - можно ли отключить вызовы всего остального (статик классов, php), кроме функций класса расширения?

The only question is: does anybody want to have limiting functionality like registerPlugin to enable just those functions/plugins that were explicitly allowed. Please reply if you have any idea what's more useful here.
Я думаю достаточно в конфигах добавить настройку.

-~{}~ 17.10.10 17:33:

Да, ну и давно меня беспокоит... давно хотел написать.

PHP:
{{ BEGIN example }} 
{{ Hello! }} 
{{ END }} 

{{ $example }}
---
PHP:
$render->set( Array( 'example' => Array( 'content' => 'Hello!' )));
$render->parse();
---
PHP:
Hello! Array
Зачем $example в данном примере устанавливается от не скалярного значения не знаю. По-моему просто баг и надо поставить фильтр для установки переменных - только скалярные данные. Если не баг, то не могу в понять в чем смысл такого поведения)

PS.
Blitz::version() не добавите?
 

fisher

накатила суть
>>Будет ли {{ func() }}, если она создана в классе-расширении Blitz,
>>иметь приоритет перед вызовом php-функции

скорее всего, нет. пишите this::func()/ возможно, я добавлю отдельную настройку, которая меняет приоритет. связано это всё с производительностью.

>>можно ли отключить вызовы всего остального
создайте, пожалуйста, соответствующий реквест в багтрекере

>>Зачем $example в данном примере устанавливается от не >>скалярного значения
а что предлагается - молча ничего не сделать? всё-таки лучше сконвертировать всё в строку,чтобы девелопер сразу увидел и пофиксил ошибку.

>>Blitz::version() не добавите
зачем? php -i | grep blitz
 

ru_roll

Новичок
Производительность. Да, не учел. Но если будет возможность отключить нововведенные вызовы (этакий safe mode), то приоритет думаю будет не нужен, т.к. те, кому будут давать php в шаблон поймут и конструкцию с this::, а для оставшихся на чистом темплейте будут доступны только простые (для верстальщика this::func() это все-таки уже нетривиальная территория) пользовательские функции.

---

По поводу $example - а контекст и переменная - это не разные сущности при разборе? Я думал, что разные и можно было бы устанавливать нужное в зависимости от типа переданных данных. //посмотрел дамп - да, теперь понятно, вопрос отпадает наверное//

Тут проблема в том, что можно случайно перекрыть там какую-нибудь глобальную переменную контекстом и потом очень сложно найти ошибку. Если это действительно ошибка использования шаблонизатора, то тогда может стоило бы и выдавать ее более явно.
 

fixxxer

К.О.
Партнер клуба
мне кажется логичной настройка приоритетов (а заодно и режимов) по аналогии с доисторическим gpc_order :)

как то так

blitz.callback_order="FMS"

F = function
M = method
S = self::method
 

fisher

накатила суть
Мне нравится такой подход - но откуда там три опции? чем отличается M и S? S зовется статически? Blitz никогда не зовет статически метод текущего класса, только через текущий View-объект. Чтобы звать статически - надо явно указать неймспейс.

fisher@fisher:~/prj> cat self.php
<?

class View extends Blitz {
function say() {
return "Hello, world!";
}
}


$T = new View();
$T->load('{{ View::say() }}');

$T->display();

?>
fisher@fisher:~/prj> /local/php/bin/php self.php
Hello, world!

Причем self не работает - получим "Cannot access self:: when no class scope is active" Что вообще говоря правильно, так как слово "self" встретилось не внутри объявления класса, а в шаблоне. Можно сделать ещё один хинт - и тогда this::a() будет $View->a() а self::a() будет View::a(). В любом случае вариантов порядка будет два - FM и MF.

-~{}~ 18.10.10 13:28:

а, торможу. в этом случае можно сделать три, да.
 

ru_roll

Новичок
Да, будет симпатично)

Только не S, а T наверное. А если дальше следовать хинтам, то и P напрашивается. То есть P - php, T - this и какая-то буква для class::static. Кстати самое смешное, что положение этой буковки даже будет иметь смысл, т.к. пользователю никто не мешает создать класс php или this :cool:

PS.
А по поводу пересечения условно неймспейсов переменных и контекстов - тут конечно немного более серьезная проблема, чем просто возможность ошибки при создании одного шаблона, которую в конце концов всегда можно исправить. Но вот если мы в определенный контекст устанавливаем массив данных, который приходит в виде черного ящика, тот тут грабли появляются с использованием в этом контексте вложенных контекстов. А уж если и вложенные контексты могут иметь любое название... В общем посмотрю как это будет на практике... Просто примерно такое использование Blitz для пользовательских шаблонов и планирую.

А кстати в новой фиче по нисходящему поиску значения переменной он эти Array() не будет цеплять?
 

fisher

накатила суть
>>А кстати в новой фиче по нисходящему поиску
>>значения переменной он эти Array() не будет цеплять?
будет. будет доставать - придумаем что-нибудь, а пока просто не вижу смысла, мало отзывов.
 

ru_roll

Новичок
Господа, подскажите п-та с какой строкой надо собирать блиц на шаред хостинге?
 

AmdY

Пью пиво
Команда форума
ru_roll
никакой и не нужен блитз для проектов на шаред хостинге, недавно fixxxer выклыдывал затычку для "бедных".
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну и зачем же тебе на шареде блитз?
 

AmdY

Пью пиво
Команда форума
ru_roll
потому что ответ ты уже получил. можно использовать dl для подключение библиотек рантайм, но от хостера у которого шареные пользователи могут пользоваться такими функциями лучше бежать.
 
Сверху