If you want to package UI resources independent of a specific theme and include them on a Liferay Portal page, Theme Contributors are your best option. If, instead, you’d like to include separate UI resources on a Liferay Portal page that are attached to a theme, you should look into themelets.

A Theme Contributor is a module that contains UI resources to use in Liferay Portal. Once a Theme Contributor is deployed to Liferay Portal, it’s scanned for all valid CSS and JS files, and then its resources are included on the page. You can, therefore, style these UI components as you like, and the styles are applied for the current theme.

This tutorial demonstrates how to

  • Identify a Theme Contributor module.
  • Create a Theme Contributor module.

Next, you’ll learn how to create a Theme Contributor.

Creating Theme Contributors

In Liferay versions prior to 7.0, the standard UI for User menus and navigation (the Dockbar) was included in the theme template. Starting in Liferay Portal 7.0, these standard UI components are packaged as Theme Contributors.

For example, the Control Menu, Product Menu, and Simulation Panel are packaged as Theme Contributor modules in Liferay, separating them from the theme. This means that these UI components must be handled outside the theme.

theme-contributor-menus-diagram.png

Figure 1: The Control Menu, Product Menu, and Simulation Panel are packaged as Theme Contributor modules.

If you want to edit or style these standard UI components, you’ll need to create your own Theme Contributor and add your modifications on top. You can also add new UI components to Liferay Portal by creating a Theme Contributor.

To create a Theme Contributor module, follow these steps:

  1. Create a generic OSGi module using your favorite third party tool, or use Blade CLI. You can also use the Blade Template to create your module, in which case you can skip step 2.

  2. To identify your module as a Theme Contributor, add the Liferay-Theme-Contributor-Type and Web-ContextPath headers to your module’s bnd.bnd file. For example, see the Control Menu Theme Contributor module’s bnd.bnd:

    Bundle-Name: Liferay Product Navigation Control Menu Theme Contributor
    Bundle-SymbolicName: com.liferay.product.navigation.control.menu.theme.contributor
    Bundle-Version: 1.0.0
    Liferay-Releng-Module-Group-Description:
    Liferay-Releng-Module-Group-Title: Product Navigation
    Liferay-Theme-Contributor-Type: product-navigation-control-menu
    Web-ContextPath: /product-navigation-control-menu-theme-contributor
    -include: ../../../../../marketplace/web-content-management/bnd.bnd
    

    The Theme Contributor type helps Liferay Portal better identify your module. For example, if you’re creating a Theme Contributor to override an existing Theme Contributor, you should try to use the same type to maximize compatibility with future developments. The Web-ContextPath header sets the context from which the Theme Contributor’s resources are hosted.

  3. Because you’ll often be overriding CSS of another Theme Contributor, you should load your CSS after theirs. You can do this by setting a weight for your Theme Contributor. In your bnd.bnd file, add the following header:

    Liferay-Theme-Contributor-Weight: [value]
    

    The higher the value, the higher the priority. If your Theme Contributor has a weight of 100, it will be loaded after one with a weight of 99, allowing your CSS to override theirs.

  4. Create a src/main/resources/META-INF/resources folder in your module and place your resources (CSS and JS) in that folder.

  5. Build and deploy your module to see your modifications applied to Liferay Portal pages and themes.

That’s all you need to do to create a Theme Contributor for your site. Remember, with great power comes great responsibility, so use Theme Contributors wisely. The UI contributions affect every page and aren’t affected by theme deployments.

Related Topics

Liferay Theme Generator

Themelets

Importing Resources with Your Themes

Theme Contributor Template

0 (0 Votes)
Using Developer Mode with Themes Previous