如何#set变量使其在包含的速度模板中可用

时间:2012-10-15 17:59:06

标签: liferay velocity

我正在为Liferay创建自定义主题,我希望单独在每个页面布局中包含页脚。不幸的是,我似乎无法访问页面布局文件中的$ full_templates_path变量。我没有运气手动存储#set值,然后在包含的模板中访问该值。

在vanilla主题中,文件处理是这样的:

portal_normal.vm:
  1) some init, doctype, etc.
  2) #parse("$full_templates_path/header.vm")
  3) $theme.include($content_include)
    a) custom_layout_1.tpl
    b) chat portlet
  4) #parse("$full_templates_path/footer.vm")

出于布局目的,我需要偏离这种模式,如下所示:

portal_normal.vm
  1) some init, doctype, etc.
  2) #parse("$full_templates_path/header.vm")
  3) $theme.include($content_include)
    a) custom_layout_1.tpl
      i) #parse("$full_templates_path/footer.vm")
    b) chat portlet

当我尝试这个时,tomcat错误输出因为$ full_templates_path未在custom_layout_1.tpl中定义。我尝试通过在portal_normal.vm

中执行以下操作来解决此问题
#set($full_footer_path = "$full_templates_path/footer.vm")
$theme.include($content_include)

然后,在custom_layout_1.tpl中,我这样做,我希望发出页脚标记:

#parse("$full_footer_path")

然而,tomcat仍然出错,说没有定义$ full_footer_path。

当我将$ full_templates_path的值硬编码到custom_layout_1.tpl中的#parse语句中时,一切正常,但这对我来说似乎是个黑客攻击。

理想情况下,这应该是正确的理由,不仅仅是因为我使用了很多胶带。

有关实现在自定义页面布局中包含模板文件的方法的任何建议吗?

2 个答案:

答案 0 :(得分:1)

问题可能在于您的速度配置。

如果要访问在一个模板中设置的变量以便在另一个模板中可访问,则以下属性应为false velocimacro.permissions.allow.inline.local.scope

答案 1 :(得分:0)

您可能错过了输入的问题,但最后#set($full_footer_path = "$full_templates_path/footer.vm"不应该有一个紧密的括号...

#set( $full_footer_path = "$full_templates_path/footer.vm" )

$full_templates_path括在花括号中以将其与文本的其余部分区分开来也可能会有所帮助,即${full_templates_path}