[
https://issues.apache.org/jira/browse/FREEMARKER-83?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16394318#comment-16394318
]
Daniel Dekany commented on FREEMARKER-83:
-----------------------------------------
OK, the related new thing is {{someName?absolute_template_name(baseName)}},
which converts {{someName}} to an absolute name, using {{baseName}} to resolve
a relative path. So here's all related new features working together:
{code:java}
<#--
<@smileyInclude name /> behaves like <#include name>, but prints a "(:"
before the
template, or prints "):" instead if the template is missing.
Note that just like with #include, if name is relative, it's resolved based
on the
directory of the caller template, not of the template that defines this
macro. As
.get_optional_template resolves relative names based on the current template,
we
had to convert the name to an absolute name based on the caller template
before
passing it to it.
-->
<#macro smileyInclude name>
<#local t = .get_optional_template(
name?absolute_template_name(.caller_template_name))>
<#if t.exists>
(:
<@t.include />
<#else>
):
</#if>
</#macro>
{code}
> Introduce new special variable "outer_template_name" beside
> "main_template_name"
> --------------------------------------------------------------------------------
>
> Key: FREEMARKER-83
> URL: https://issues.apache.org/jira/browse/FREEMARKER-83
> Project: Apache Freemarker
> Issue Type: Improvement
> Components: engine
> Affects Versions: 2.3.27-incubating
> Reporter: Yanming Zhou
> Priority: Major
> Fix For: 2.3.28-incubating
>
>
> for example, a.ftl include b.ftl, b.ftl include c.ftl
> || ||current_template_name||outer_template_name||main_template_name||
> |a.ftl|a.ftl|null|a.ftl|
> |b.ftl|b.ftl|a.ftl|a.ftl|
> |c.ftl|c.ftl|b.ftl|a.ftl|
> I need such feature to resolve relative path like <#include> directive.
> BTW:
> .current_template_name is lazy evaluation, is this designed or bug
> {code:title=b.ftl}
> <#function templateName value>
> <#return value/>
> </#function>
> {code}
> {code:title=a.ftl}
> <#include "b.ftl">
> ${templateName(.current_template_name)}
> {code}
> it will print "b.ftl" not "a.ftl", workaround:
> {code:title=a.ftl}
> <#include "b.ftl">
> <#assign current_template_name=.current_template_name>
> ${templateName(current_template_name)}
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)