goja-web/src/main/java/goja/Goja.java
private void setFtlSharedVariable() {
        // custmer variable
        final Configuration config = FreeMarkerRender.getConfiguration();
        config.setSharedVariable("block", new BlockDirective());
        config.setSharedVariable("extends", new ExtendsDirective());
        config.setSharedVariable("override", new OverrideDirective());
        config.setSharedVariable("super", new SuperDirective());
        // 增加日期美化指令（类似 几分钟前）
        config.setSharedVariable("prettytime", new PrettyTimeDirective());
        if (GojaConfig.isSecurity()) {
            config.setSharedVariable("shiro", new ShiroTags(config.getObjectWrapper()));
        }
    }
private void setFtlSharedVariable() {
        // custmer variable
        final Configuration config = FreeMarkerRender.getConfiguration();
        config.setSharedVariable("block", new BlockDirective());
        config.setSharedVariable("extends", new ExtendsDirective());
        config.setSharedVariable("override", new OverrideDirective());
        config.setSharedVariable("super", new SuperDirective());
        // 增加日期美化指令（类似 几分钟前）
        config.setSharedVariable("prettytime", new PrettyTimeDirective());
        if (GojaConfig.isSecurity()) {
            config.setSharedVariable("shiro", new ShiroTags(config.getObjectWrapper()));
        }
    }
private void setFtlSharedVariable ( ) { // custmer variable final Configuration config = FreeMarkerRender . getConfiguration ( ) ; config . setSharedVariable ( "block" , new BlockDirective ( ) ) ; config . setSharedVariable ( "extends" , new ExtendsDirective ( ) ) ; config . setSharedVariable ( "override" , new OverrideDirective ( ) ) ; config . setSharedVariable ( "super" , new SuperDirective ( ) ) ; // 增加日期美化指令（类似 几分钟前） config . setSharedVariable ( "prettytime" , new PrettyTimeDirective ( ) ) ; if ( GojaConfig . isSecurity ( ) ) { config . setSharedVariable ( "shiro" , new ShiroTags ( config . getObjectWrapper ( ) ) ) ; } }
set freemarker variable.
set freemarker variable .