2015-11-20 22 views
5

FreeMarker include statement docs göre, Üstbilgi yapabilir ve böylece gibi farkında şablonları footer-:FreeMarker düzenleri?

<#include "/header.ftl"> 
<!-- Content of my this page --> 
<#include "/footer.ftl"> 

Ama benim web uygulaması sayfaları/görünümler yüzlerce varsa, bu gereksiz kopya makarna çok.

<#include "/header.ftl"> 
<@import_FTL_Somehow> 
<#include "/footer.ftl"> 

Ve sonra her görünüm/sayfa için ayrı şablonlar oluşturmak: Ben "Hey, bir düzen olduğunu" söyleyebiliriz FreeMarker, bir "düzen" kavram gibi olsaydı çok iyi olurdu (index.ftl, contactUs.ftl, vb.) Ve daha sonra FreeMarkers'a hangi FTL dosyalarının düzeni kullandığını söyleyin. Bu şekilde, her bir şablon dosyasında üstbilgi/altbilgi belirtmeyi sürdürmem gerekmeyecek.

FreeMarker bu tür bir konsepti destekliyor mu?

cevap

7

Yalnızca bir altbilgi veya üstbilgiye ihtiyacınız varsa, TemplateLoader kesmekle (TemplateLoader şablon dosyasında olduğu gibi üstbilgi ve altbilgi parçacıklarını ekler) çözülebilir. Ama FreeMarker olağan çözüm gibi her şablonlardan açıkça düzen koduna çağırarak, ancak doğrudan iki #include -s ile, ancak: my bir oto-ithalat ise

<@my.page> 
    <!-- Content of my this page --> 
</@my.page> 

(Configuration.addAutoImport bakınız).

Güncelleme: Başka bir yaklaşım olması bir layout.ftl gibi:

Heading stuff here... 
<#include bodyTemplate> 
Footer stuff here... 

Sonra Java dan hep layout.ftl diyoruz, ama aynı zamanda bodyTemplate değişkeni kullanarak vücut şablon adının geçmesi:

dataModel.put("bodyTemplate", "/foo.ftl"); 
cfg.getTemplate("layout.ftl").process(dataModel, out); 
+0

Teşekkürler @ddekany (+1) - onların Javadocs, bu ['addAutoImport'] (http://freemarker.incubator.apache.org/docs/api/freemarker/template/Configuration.html#addAutoImport-java.lang. String-java.lang.String-) yöntemi: "* Görünmez bir #import tem ekler Tüm şablonların başında namespaceVarName olarak plateName. İthalatların sırası, bu yöntemle eklendikleri sırayla aynı olacaktır. * "** Ancak **, hala tam kullanımını anlamadım: bu yalnızca bir şablonu içe aktaracak gibi görünüyor (ya Üstbilgi veya altbilgi, ancak her ikisi de değil.) – smeeb

+0

** Bu çözümü kullanarak 2 farklı sayfayı gösteren hızlı bir kod örneği ile cevabınızı güncellemeye ne dersiniz? ** İdeal olarak, Java kodunu burada görebiliyordum. addAutoImport '2 FTL dosyalarının nasıl göründüğünün yanı sıra çağrılır (böylece addAutoImport'un onları nasıl yedekler - üstbilgi/altbilgi '# include' ifadeleri gerektirir) - tekrar teşekkürler! – smeeb

+0

Otomatik içe aktarma sadece bir şey eklemek için değil, benim '' '' tanımlamak için kullanılır.Böylesi her dosyanın başında bir '<#import '/lib/myutils.ftl' 'yi yedeklemelisiniz – ddekany

İlgili konular