我正在寻找一种将重复的html代码与网页分开的方法,为此我计划使用宏功能。这里的问题是我需要将每个宏放在一个文件中,或者将它们中的一些放在一个文件中并将其包含在模板文件中。
我需要的是只包含一次像
这样的目录名称<#import "/tags/widgetDirectory" as widgets />
这里/ tags / widgetDirectory是一个目录,这里的每个文件都可以看作是一个定义的宏。
当我需要从这个目录中的文件中插入代码部分时,可以说slide.ftl我将只使用
<@widgets.slider />
系统将检查/ tags / widgetDirectory目录中的slider.ftl。这里的slider.ftl可以有&lt;#macro&gt;作为第一行和最后一行,或者这些可以透明地添加,系统可以将其作为宏加载
这很容易让我的设计师工作。
也许有更好的方法来做这种基于小部件/组件的网页设计?
最好的问候,
答案 0 :(得分:0)
此功能(导入目录)实际上是为FM设计的......但它不会很快发生。但我想现在可以通过黑客攻击来解决这个问题。而不是#import
,请使用您自己的TemplateMethodModelEx
,而不是<#assign widgets = importDirectory('/tags/widgetDirectory') >
。这将返回一个TemplateHashModel
,它也由您实现,并绑定到目录路径。当获取该哈希的项目时,它使用Environment.getCurrentEnvironment().include
。包含的文件应该创建一个名为__main
的宏。然后,您使用Environment.getCurrentNamespace().get("__main")
获取该变量,并将其作为哈希查找的结果返回。当然这个哈希也应该维护一个缓存,这样如果相同的项目获得两次,它将不会再次包含该模板,只返回之前提取的宏。这可以是开发人员,因此如果包含文件没有定义__main
,那么它假定它直接打印到输出,因此它将被再次包括在内,当& #34;标记&#34;再次被召唤。