2016-08-13 1 views
0

Используя FreeMarker, я хотел был бы иметь возможность загружать различные таблицы стилей или javascript в различных шаблонах. Моя проблема может быть в моей реализации.Используйте другой скрипт css или java на странице с помощью freemarker

У меня есть один макрос макет, который выглядит следующим образом:

<#macro layout> 
 

 
<!DOCTYPE html> 
 
<html lang="en"> 
 
    <head> 
 
    <!-- common javascript and css references here --> 
 
    </head> 
 

 
    <body> 
 
    <div class="container"> 
 

 
     <!-- header stuff --> 
 

 
     <#nested> 
 

 
     <!-- footer stuff --> 
 

 
    </div> 
 
    </body> 
 
</html> 
 

 
</#macro>

я использую это во всех шаблонах, как это:

<!-- "declare" specific css or js here --> 
 
<@layout.layout> 
 

 
<div id="mapid"> 
 

 
    <!-- use specific css or js --> 
 

 
</div> 
 

 
</@layout.layout>

В некоторых моих шаблонах я хотел бы использовать специальные таблицы стилей или библиотеки javascript, которые применяются к общему случаю. Каков наилучший подход для этого?

Я попытался передать переменную в макет макета, чтобы вставить ссылки css и js, но я не нашел простого способа назначить блок текста с помощью #assign.

+0

Не уверен, где вы застряли, или почему вам нужно заблокировать назначение (который выглядит как '<#local foo> ...' или то же самое с '# assign' или' # global'). Прежде всего, исходя из того, что вы хотите решить, какой CSS или JS включить? Например, вы хотите, чтобы MVC-контроллер решил это или хотите закодировать это в шаблоне, или вы хотите, чтобы он зависел от расположения шаблона или ...? – ddekany

+0

Решение включить различные javascript или css зависит от цели шаблона. Например, у меня есть шаблон, который я использую для отображения отчетов. Нет никаких оснований для того, чтобы какой-либо другой шаблон требовал использовать javascript для этого. Спасибо за ответ. Я буду исследовать <#local>. – pdeline

+0

@ddekany Я не вижу, как <#local> поможет мне. Его можно использовать только в макро или функции. Я ни в каком контексте. – pdeline

ответ

0

Я разделил макет на конец страницы конца страницы и определил вложенный в начало страницы.

page_start.ftl

<#macro external> 
 
<!DOCTYPE html> 
 
<html> 
 
<head lang="en"> 
 
    <meta charset="UTF-8"> 
 
    <title>${title}</title> 
 
    <meta name="keywords" content="${keyword}"> 
 
    <meta name="description" content="${description}"> 
 

 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui.css" rel="stylesheet" type="text/css"> 
 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui_animation.css" rel="stylesheet" type="text/css"> 
 

 
    <script type="text/javascript" src="https://cdn.insdep.com/jquery/jquery-1.11.3.min.js"></script> 
 
    <script type="text/javascript" src="https://cdn.insdep.com/easyui/jquery.easyui-1.5.1.min.js"></script> 
 

 
    <#nested > 
 

 
</head> 
 
<body> 
 

 
    <#include "global/header.ftl"> 
 

 
    <#include "global/sidebar.ftl"> 
 

 
</#macro>

page_end.ftl

<#include "global/footer.ftl"> 
 

 
</body> 
 
</html>

<#import "page_start.ftl" as page> 
 
<@page.external> 
 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui_plus.css" rel="stylesheet" type="text/css"> 
 
</@page.external> 
 
hello world 
 

 
<#include "page_end.ftl">

Но я действительно думаю, что это не очень приличное решение.

0

Вы можете объявлять вложенные теги и отправить в качестве параметра имя вроде этого:

layout.ftl

<#macro layout> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <!-- common javascript and css references here --> 
    <#nested "styles"> 
    <#nested "scripts"> 
    </head> 

    <body> 
    <div class="container"> 

     <!-- header stuff --> 

     <#nested "content"> 

     <!-- footer stuff --> 

    </div> 
    </body> 
</html> 

</#macro> 

И тогда вы можете получить в качестве параметра раздел и если, как это использовать:

page.ftl

<@layout.layout; section> 
<#if section = "scripts"> 
    <script src="/js/myscripts/myfile.js"></script>  
</#if> 
<#if section = "styles"> 
    <link rel="stylesheet" href="/css/style.css" /> 
</#if> 

<#if section="content"> 
    <div id="mapid"> 

    </div> 
</#if> 

</@layout.layout> 
Смежные вопросы