Usages
- Used for providing a different look and feel for a Userview. Please refer to Userview Theme.
- A useable Userview Theme plugin must extends org.joget.apps.userview.model.UserviewV5Theme or org.joget.apps.userview.model.UserviewTheme abstract class.
- Since version 5.0, It is encourage to use org.joget.apps.userview.model.UserviewV5Theme instead of org.joget.apps.userview.model.UserviewTheme abstract class for Userview Theme plugin development as the new theme provided more flexibility to control how you want your theme to display to user.
Abstract Class
org.joget.apps.userview.model.UserviewV5Theme
- Under wflow-core module
- Extended org.joget.plugin.base.ExtDefaultPlugin. Please refer to Plugin Base Abstract Class and Interface.
- Implemented org.joget.plugin.property.model.PropertyEditable. Please refer to Plugin Base Abstract Class and Interface.
- A base abstract class to develop a Userview Theme plugin for version v5.0 onward.
- Please refer to V5 Predefined Theme Template on template options.
- Only need to override the function accordingly to change part of the display.
Method Detail
Overridable Methods
handleContentError
public java.lang.String handleContentError(java.lang.Exception e, java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle error when retrieving userview content.
handlePageNotFound
public java.lang.String handlePageNotFound(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle page not found. Default using /templates/userview/pageNotFound.ftl as template.
getLayout
public java.lang.String getLayout(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle theme layout. Default using /templates/userview/layout.ftl as template.
getHeader
public java.lang.String getHeader(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle page header. Default using /templates/userview/header.ftl as template.
getFooter
public java.lang.String getFooter(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle page footer. Default using /templates/userview/footer.ftl as template.
getContentContainer
public java.lang.String getContentContainer(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle userview menu content. Default using /templates/userview/contentContainer.ftl as template.
getMenus
public java.lang.String getMenus(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle menus. Default using /templates/userview/menus.ftl as template.
getJsCssLib
public java.lang.String getJsCssLib(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template for putting javascript and css link for getHead() template.
getCss
public java.lang.String getCss(java.util.Map<java.lang.String, java.lang.Object> data)
Gets dynamic generated CSS for getHead() template
getJs
public java.lang.String getJs(java.util.Map<java.lang.String, java.lang.Object> data)
Gets dynamic generated javascript for getHead() template
getMetas
public java.lang.String getMetas(java.util.Map<java.lang.String, java.lang.Object> data)
Gets dynamic generated meta data for getHead() template
getHead
public java.lang.String getHead(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template to handle for <head> tag. Default using /templates/userview/head.ftl as template.
getFavIconLink
public java.lang.String getFavIconLink(java.util.Map<java.lang.String, java.lang.Object> data)
Gets the fav icon relative path for getHead() template.
getLoginForm
public java.lang.String getLoginForm(java.util.Map<java.lang.String, java.lang.Object> data)
HTML template for login form. Default using /templates/userview/login.ftl as template.
decorateCategoryLabel
public java.lang.String decorateCategoryLabel(org.joget.apps.userview.model.UserviewCategory category)
HTML template for menu category label.
Utility Methods
getUserview
public org.joget.apps.userview.model.Userview getUserview()
Gets userview which using this theme
setUserview
public void setUserview(org.joget.apps.userview.model.Userview userview)
Sets userview which using this theme
getRequestParameters
public java.util.Map getRequestParameters()
Gets request parameters
setRequestParameters
public void setRequestParameters(java.util.Map requestParameters)
Sets request parameters
getRequestParameter
public java.lang.Object getRequestParameter(java.lang.String requestParameter)
Convenience method to get a parameter value
getRequestParameterString
public java.lang.String getRequestParameterString(java.lang.String requestParameter)
Convenience method to get a parameter String value.
Return Empty string instead of NULL.
Deprecated Methods
getCss
public java.lang.String getCss()
Deprecated not use for UserviewV5Theme
getJavascript
public java.lang.String getJavascript()
Deprecated not use for UserviewV5Theme
getHeader
public java.lang.String getHeader()
Deprecated not use for UserviewV5Theme
getFooter
public java.lang.String getFooter()
Deprecated not use for UserviewV5Theme
getPageTop
public java.lang.String getPageTop()
Deprecated not use for UserviewV5Theme
getPageBottom
public java.lang.String getPageBottom()
Deprecated not use for UserviewV5Theme
getBeforeContent
public java.lang.String getBeforeContent()
Deprecated not use for UserviewV5Theme
org.joget.apps.userview.model.UserviewTheme
- Under wflow-core module
- Extended org.joget.plugin.base.ExtDefaultPlugin. Please refer to Plugin Base Abstract Class and Interface.
- Implemented org.joget.plugin.property.model.PropertyEditable. Please refer to Plugin Base Abstract Class and Interface.
- A base abstract class to develop a Userview Theme plugin.
Method Detail
Abstract Methods
getCss
public abstract java.lang.String getCss()
Return css to inject in <head> tag
getJavascript
public abstract java.lang.String getJavascript()
Return javascript to inject in <head> tag
getHeader
public abstract java.lang.String getHeader()
Return HTML template to replace default header
getFooter
public abstract java.lang.String getFooter()
Return HTML template to replace default footer
getPageTop
public abstract java.lang.String getPageTop()
Return HTML template to inject before the page container
getPageBottom
public abstract java.lang.String getPageBottom()
Return HTML template to inject after the page container
getBeforeContent
public abstract java.lang.String getBeforeContent()
Return HTML template to inject before content
Utility Methods
getUserview
public org.joget.apps.userview.model.Userview getUserview()
Gets userview which using this theme
setUserview
public void setUserview(org.joget.apps.userview.model.Userview userview)
Sets userview which using this theme
getRequestParameters
public java.util.Map getRequestParameters()
Gets request parameters
setRequestParameters
public void setRequestParameters(java.util.Map requestParameters)
Sets request parameters
getRequestParameter
public java.lang.Object getRequestParameter(java.lang.String requestParameter)
Convenience method to get a parameter value
getRequestParameterString
public java.lang.String getRequestParameterString(java.lang.String requestParameter)
Convenience method to get a parameter String value.
Return Empty string instead of NULL.
V5 Predefined Theme Template
Predefined Variables
- Predefined variable with value for template usage template.
Name | Template | Default Value | Data Type | Description |
---|---|---|---|---|
base_link | ||||
body_classes | ||||
body_id | ||||
build_number | ||||
categories_container_id | ||||
categories_container_classes | ||||
category_classes | ||||
combine_single_menu_category | ||||
content | ||||
content_container | ||||
content_id | ||||
context_path | ||||
css | ||||
current_category_classes | ||||
current_menu_classes | ||||
embed | ||||
fav_icon_link | ||||
first_category_classes | ||||
first_menu_classes | ||||
footer | ||||
head | ||||
header | ||||
hide_nav | ||||
home_page_link | ||||
is_logged_in | ||||
is_login_page | ||||
joget_header | ||||
joget_footer | ||||
js | ||||
js_css_lib | ||||
last_category_classes | ||||
last_menu_classes | ||||
locale | ||||
login_error_classes | ||||
login_exception | ||||
login_form_after | ||||
login_form_before | ||||
login_form_footer | ||||
login_link | ||||
logout_link | ||||
main_container_id | ||||
menus | ||||
menu_classes | ||||
menus_container_classes | ||||
metas | ||||
nav_id | ||||
nav_classes | ||||
params | ||||
title | ||||
right_to_left | ||||
sidebar_id | ||||
user | ||||
username | ||||
userview |
Templates
- All these template are used by org.joget.apps.userview.model.UserviewV5Theme abstract class.
- Override the abstract class method to set different value for the variables used in template.
/templates/userview/pageNotFound.ftl
<h3>@@ubuilder.pageNotFound@@</h3> @@ubuilder.pageNotFound.message@@ <br><br> @@ubuilder.pageNotFound.explanation@@ <p> </p> <p> </p> <p> <a href="${home_page_link!}">@@ubuilder.pageNotFound.backToMain@@</a> </p>
/templates/userview/layout.ftl
<!DOCTYPE html> <html lang="${locale!}"> ${html_inner_before!} <head> ${head_inner_before!} ${head!} ${head_inner_after!} </head> <body id="${body_id!}" class="${body_classes!}"> ${body_inner_before!} ${page_before!} <div id="page"> ${page_inner_before!} ${header!} ${content_container!} ${footer!} ${page_inner_after!} </div> ${page_after!} ${joget_footer!} ${body_inner_after!} </body> ${html_inner_after!} </html>
/templates/userview/header.ftl
${header_before!} <header class="${header_classes!}"> ${header_inner_before!} ${header_info_before!} <div id="header-info" class="${header_info_classes!}"> ${header_info_inner_before!} ${header_name_before!} <div id="header-name" class="${header_name_classes!}"> ${header_name_inner_before!} <a href="${home_page_link!}" id="header-link" class="${header_link_classes!}"> <span>${userview.properties.name!}</span> </a> ${header_name_inner_after!} </div> ${header_name_after!} ${header_description_before!} <div id="header-description" class="${header_description_classes!}"> ${header_description_inner_before!} <span id="description" class="${header_description_span_classes!}">${userview.properties.description!}</span> ${header_description_inner_after!} </div> ${header_description_after!} <div class="clearfix"></div> ${header_info_inner_after!} </div> ${header_info_after!} ${header_message_before!} <div id="header-message" class="${header_message_classes!}"> ${header_message_inner_before!} <div id="header-welcome-message" class="${header_welcome_classes!}"> <span id="welcomeMessage">${userview.properties.welcomeMessage!}</span> </div> <div id="header-logout-text" class="${header_logout_classes!}"> <#if is_logged_in> <a href="${logout_link!}"> <span id="logoutText">${userview.properties.logoutText!}</span> </a> <#else> <a href="${login_link!}"> <span id="loginText">@@ubuilder.login@@</span> </a> </#if> </div> <div class="clearfix"></div> ${header_message_inner_after!} </div> ${header_message_after!} ${header_inner_after!} </header> ${header_after!}
/templates/userview/footer.ftl
<div class="clearfix"></div> ${footer_before!} <footer class="${footer_classes!}"> ${footer_inner_before!} <div id="footer-message"> <p><span id="footerMessage">${userview.properties.footerMessage!}</span></p> </div> ${footer_inner_after!} </footer> ${footer_after!}
/templates/userview/contentContainer.ftl
${main_container_before!} <div id="${main_container_id!}" class="${main_container_classes!}"> <div class="${main_container_inner_classes!}"> ${main_container_inner_before!} <#if !embed && !hide_nav> ${sidebar_before!} <div id="${sidebar_id!}" class="${sidebar_classes!}"> ${sidebar_inner_before!} ${menus!} ${sidebar_inner_after!} </div> ${sidebar_after!} </#if> ${content_before!} <div id="${content_id!}" class="${content_classes!}"> <main> ${content_inner_before!} ${content!} ${content_inner_after!} </main> </div> ${content_after!} ${main_container_inner_before!} </div> </div> ${main_container_before!}
/templates/userview/menus.ftl
${nav_before!} <nav id="${nav_id!}" class="${nav_classes!}"> ${nav_inner_before!} ${categories_container_before!} <ul id="${categories_container_id!}" class="${categories_container_classes!}"> ${categories_container_inner_before!} <#list userview.categories as category> <#if category.properties.hide! != 'yes' && category.menus?size gt 0> ${category_before!} <#assign cClass = category_classes!> <#if category_index == 0> <#assign cClass = cClass + " " + first_category_classes!> </#if> <#if (category_index + 1) == userview.categories?size> <#assign cClass = cClass + " " + last_category_classes!> </#if> <#if userview.currentCategory?? && category.properties.id == userview.currentCategory.properties.id> <#assign cClass = cClass + " " + current_category_classes!> </#if> <#assign firstMenu = category.menus[0]> <#if combine_single_menu_category! && category.menus?size == 1> <li id="${firstMenu.properties.id}" class="${cClass}"> ${category_inner_before!} ${firstMenu.menu} ${category_inner_after!} </li> <#else> <li class="${cClass}"> ${category_inner_before!} <a class="${category_label_classes!} dropdown" href="#"><span>${theme.decorateCategoryLabel(category)}</span></a> ${menu_container_before!} <ul class="${menus_container_classes!}" > ${menu_container_inner_before!} <#list category.menus as menu> <#assign mClass = menu_classes!> <#if menu_index == 0> <#assign mClass = mClass + " " + first_menu_classes!> </#if> <#if (menu_index + 1) == category.menus?size> <#assign mClass = mClass + " " + last_menu_classes!> </#if> <#if userview.current?? && menu.properties.id == userview.current.properties.id> <#assign mClass = mClass + " " + current_menu_classes!> </#if> ${menu_before!} <li id="${menu.properties.id!}" class="${mClass}"> ${menu_inner_before!} ${menu.menu} ${menu_inner_after!} </li> ${menu_after!} </#list> ${menu_container_inner_after!} </ul> ${menu_container_after!} ${category_inner_after!} </li> </#if> ${category_after!} </#if> </#list> ${categories_container_inner_after!} </ul> ${categories_container_after!} ${nav_inner_after!} </nav> ${nav_after!}
/templates/userview/head.ftl
${metas!} <title>${title!}</title> ${joget_header!} ${js_css_lib!} <script type="text/javascript"> ${js!} </script> <style type="text/css"> ${css!} </style> <link rel="shortcut icon" href="${fav_icon_link!}"/>
/templates/userview/login.ftl
<#if userview.params.login_error?? > ${login_error_before!} <div id="main-body-message" class="${login_error_classes!}"> ${login_error_inner_before!} ${login_exception!} ${login_error_inner_after!} </div> ${login_error_after!} </#if> ${login_form_before!} <form id="loginForm" name="loginForm" action="${context_path!}/j_spring_security_check" method="POST"> ${login_form_inner_before!} <table align="center"> <tr><td><label>@@ubuilder.login.username@@: </label></td><td><input type='text' id='j_username' name='j_username'/></td></tr> <tr><td><label>@@ubuilder.login.password@@: </label></td><td><input type='password' id='j_password' name='j_password'/></td></tr> <tr><td> </td><td><input name="submit" class="form-button" type="submit" value="@@ubuilder.login@@" /></td></tr> <tr><td colspan="2"> ${login_form_footer!} </td></tr> </table> ${login_form_inner_after!} </form> ${login_form_after!}
How to use and override V5 template
Plugin Properties Options
- Please refer to Plugin Properties Options for more information.
Tutorials
- Not available right now
Related Community Plugins
- Not available right now