0

我正在为需要开发的新 Grails Web 应用程序测试 ui 和主题。

我想知道是否可以在我的应用程序中覆盖主题区域( http://grailsrocks.github.io/grails-platform-ui/guide/creatingThemes.html#themeRequiredZones )。

我知道主题布局和 ui 集模板(http://grailsrocks.github.io/grails-platform-ui/guide/advanced.html#advancedOverridingThemeLayouts)是可能的。

具体在我的测试应用程序中,我想覆盖:

<theme:layoutTemplate name="header"/>
/grails-app/views/_themes/Bootstrap/_header.gsp

<theme:layoutZone name="navigation"/>
/grails-app/views/_themes/Bootstrap/default/_navigation.gsp

这是我的 Config.groovy:

compile ":platform-ui:1.0.RC3"
runtime ':bootstrap-theme:1.0.RC3'
grails.plugin.location.'grails-platform-ui-scaffolding' = "../grails-platform-ui-scaffolding"
4

1 回答 1

0

下一版本的 platform-ui 插件将修复此问题https://github.com/MerryCoders/grails-platform-ui/pull/7

与此同时,这里有一个自定义 TagLib 用作解决方法,至少对于 layoutTemplate 标记。

class OwnThemeTagLib extends org.grails.plugin.platform.ThemeTagLib {

def layoutTemplate = { attrs ->
    def templateView = grailsThemes.getRequestThemeTemplateView(request, attrs.name)

    // Location of app's standard content for theme layout templates
    // /grails-app/views/_themes/<ThemeName>/<templateName>
    def layoutTemplatePath = "/_themes/${templateView.owner}/${attrs.name}"

    // First see if the application provides default content for this template
    if (grailsViewFinder.templateExists(layoutTemplatePath)) {
        if (log.debugEnabled) {
            log.debug "Resolved current request's theme template for [${attrs.name}] to [${layoutTemplatePath}]"
        }
        delegate.out << g.render(template:layoutTemplatePath) 
    } else {
        if (log.debugEnabled) {
            log.debug "Resolved current request's theme template for [${attrs.name}] to [${templateView}]"
        }
        delegate.out << g.render(template:templateView.path, plugin:templateView.plugin)    
    }
}

}

于 2014-06-24T18:39:02.137 回答