The code in the function example has a slight
problem: most browsers will automatically underline any whitespace between the
<a> and </a> tags. FM-Classic provides
ways of removing whitespace:
In FM-Classic, as with other markup languages, tags can be wrapped to span more than one line. The above example could be re-written as:
<a href="${url}"><if preferences.showImages
><img src="${image}" border="0" alt="${alt}"><else
>${alt}</if
></a>
As you can see, though, the example becomes almost unreadable.
Using transforms provides a cleaner
solution. FM-Classic provides a number of transform classes in the
freemarker.ext.misc package. Two of these can be used
to handle whitespace compression: the CompressWhitespace
class, and the LegacyCompress class.
Using the LegacyCompress transformer, the template looks
like the following:
<transform utility.legacyCompress>
<a href="${url}">
<if preferences.showImages>
<img src="${image}" border="0" alt="${alt}">
<else>
${alt}
</if>
</a>
</transform>
LegacyCompress performs exactly the same compression
as the former compress tag in earlier versions of FreeMarker.
Unfortunately, the results are the same, too.
<a href="beach.html">Pictureofthebeach</a>
A better idea is to use the CompressWhitespace transformer:
<a href="${url}"><transform utility.compressWhitespace>
<if preferences.showImages>
<img src="${image}" border="0" alt="${alt}">
<else>
${alt}
</if>
</transform></a>
Finally, this gives us the output we expect:
<a href="beach.html">Picture of the beach</a>
Of course, you're not limited to using only these transformers. For more advanced whitespace handling, you could create your own transformer by implementing the TemplateTransformModel interface.
| Previous: Local | Next: Noparse |