2015-03-12 2 views
0

Я ищу способ отделить повторяющиеся html-коды с веб-страниц, и для этого я планирую использовать макрофункцию. Проблема здесь в том, что для каждого макроса мне нужно поместить этот макрос в файл или поместить некоторые из них в файл и включить его в файл шаблона.Загрузка макрофайлов в каталог, прозрачно

Что мне нужно, чтобы включить один раз только имя каталога что-то вроде

<#import "/tags/widgetDirectory" as widgets /> 

то здесь/теги/widgetDirectory является каталог, и каждый файлы здесь можно увидеть как макрос определен.

, когда мне нужно вставить часть кода из файла из этого каталога позволяет сказать slide.ftl я просто использовать

<@widgets.slider /> 

система будет проверять slider.ftl в/теги/widgetDirectory каталог. здесь slider.ftl может иметь < #macro> как первая, так и последняя строка, или они могут быть прозрачно добавлены, и система может загрузить ее в виде макроса

это упростит мою работу дизайнера.

Возможно, есть лучший способ сделать этот вид виджетов/компонентов на основе веб-дизайна?

наилучшими пожеланиями,

ответ

0

Эта функция (импортирующие каталоги) является то, что планируется для FM на самом деле ... но это не произойдет в ближайшее время. Но я думаю, что это можно решить довольно хорошо с помощью взлома прямо сейчас. Вместо #import используйте свой собственный TemplateMethodModelEx, который можно использовать как <#assign widgets = importDirectory('/tags/widgetDirectory') >. Это вернет TemplateHashModel, который также реализуется вами и привязан к пути к каталогу. Когда элемент хеша получается, он использует Environment.getCurrentEnvironment().include. Ожидается, что вложенный файл создаст макрос с именем __main или что-то в этом роде. Итак, вы получаете эту переменную с Environment.getCurrentNamespace().get("__main") и возвращаете ее в результате поиска хэша. Конечно, этот хэш должен также поддерживать кеш, так что, если один и тот же элемент получает дважды, он не будет включать шаблон во второй раз, просто верните макрос, извлеченный ранее. Это может быть разработчиком далее, так что если файл include не определил __main, тогда предполагается, что он печатает непосредственно на выходе, и поэтому он будет снова включен, когда «тег» будет вызван снова.

+0

Я могу попытаться добавить эту функцию, любую рекомендацию о том, как начать? где можно проверить, кто-то уже связан с этим? –

+0

Никто не работает над этим. Поэтому, если вас это интересует, вы можете развить мастера на Github, и в какой-то момент мы должны обсудить детали списков рассылки freemarker-devel. – ddekany

Смежные вопросы