parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Искусственый @auto[]

Азат 21.01.2003 18:24

Всё-таки неудобно, что в методе @auto[] нельзя использовать класс $form. Как обойти это ограничение?

Можно создать собственный метод @head[] и вызывать его в главном auto.p в начале описания @main[]. Однако в этом случае мы лишимся главного достоинства метода @auto[]: на пути углубления в иерархию сайта он не переобъявляется, в отличие от обычных методов. Если же Вы опишите @head[] в промежуточном auto.p, затем в конечной странице, то выполнится только последняя "версия" метода.

Это наводит на мысль, что описания нужно накапливать, например, в таблице в виде строк, которые можно потом "выполнить" с помощью ^process[]

Пример.

/auto.p:
@auto[]
$auto[^table::create{code}]

@main[]
^if($auto){^process{^auto.menu{$auto.code}}}
$title
/issues/auto.p:
@auto[]
^auto.append{^^form:fields.foreach[key^;val]{^$key=^$val}[<br>]}
/issues/index.html:
^auto.append{^$title[Заметка # ^$form:id]}
Конечно, неудобно ескэйпить все парсерные знаки в строке, однако много и не надо: все, не касающееся $form, останется в стандартном @auto[]. Кстати, совпадение имён ошибки не вызывает, что тоже удобно.