Liferay DXP 7.1 Developer Tutorials
Introduction to Liferay Development
- Introduction to Liferay Development
- Fundamentals
- Liferay as a Development Platform
- Starting Module Development
- Configuring Dependencies
- Finding Extension Points
From Liferay Portal 6 to 7
- Introduction to From Liferay Portal 6 to 7
- What Hasn't Changed and What Has
- Benefits of 7.1 for Liferay Portal 6 Developers
- OSGi and Modularity for Liferay Portal 6 Developers
- Modules as an Improvement over Traditional Plugins
- Example: Building an OSGi Module
Developing a Web Application
- Introduction to Developing a Web Application
- Development Setup Overview
- Creating a Working Prototype
- Writing Your First Liferay DXP Application
- Creating an Add Entry Button
- Generating Portlet URLs
Tooling
- Introduction to Tooling
- Liferay Dev Studio DXP
- Installing Liferay Dev Studio DXP
- Creating a Liferay Workspace with Dev Studio
- Setting Proxy Requirements for Liferay Dev Studio
- Updating Liferay Dev Studio
Portlets
- Introduction to Portlets
- Liferay MVC Portlet
- Creating an MVC Portlet
- Writing Controller Code
- Configuring the View Layer
- Beyond the Basics for Portlets
Customizing
- Introduction to Customizing
- Customizing JSPs
- Customizing JSPs with Dynamic Includes
- JSP Overrides Using Portlet Filters
- JSP Overrides Using OSGi Fragments
- JSP Overrides Using Custom JSP Bag
Service Builder
- Introduction to Service Builder
- What is Service Builder?
- Service Builder Persistence
- Defining an Object-Relational Map with Service Builder
- Creating the service.xml File
- Defining Global Service Information
Application Security
- Introduction to Application Security
- Defining Application Permissions
- Defining Resources and Permissions
- Registering Permissions
- Associating Permissions with Resources
- Checking Permissions
Web Services
- Introduction to Web Services
- Headless REST APIs
- Get Started: Discover the API
- Get Started: Invoke a Service
- Making Authenticated Requests
- Working with Collections of Data
Asset Framework
- Introduction to Asset Framework
- Adding, Updating, and Deleting Assets
- Implementing Asset Categorization and Tagging
- Relating Assets
- Implementing Asset Priority
- Rendering an Asset
Themes and Layout Templates
- Introduction to Themes and Layout Templates
- Themes
- Creating Themes
- Developing Themes
- Using Developer Mode with Themes
- Building Your Theme's Files
Using Front-End Frameworks in Your portlets
- Introduction to Using Front-End Frameworks in Your portlets
- Using React in Your Portlets
- Using Vue in Your Portlets
- Using Angular in Your Portlets
- Creating and Bundling JavaScript Widgets with JavaScript Tooling
- Installing the Bundle Generator and Generating a Bundle
Front-End Taglibs
- Introduction to Front-End Taglibs
- Using the Liferay UI Taglib
- Liferay UI Icons
- Liferay UI Icon Lists
- Liferay UI Icon Menus
- Liferay UI Tabs
Mobile
- Introduction to Mobile
- Android Apps with Liferay Screens
- Preparing Android Projects for Liferay Screens
- Using Screenlets in Android Apps
- Using Views in Android Screenlets
- Using Offline Mode in Android
Web Experience Management
- Introduction to Web Experience Management
- Developing Page Fragments
- Creating a Fragment
- Fragment Specific Tags
- Recommendations and Best Practices
- Screen Navigation Framework
Product Navigation
- Introduction to Product Navigation
- Customizing the Product Menu
- Adding Custom Panel Categories
- Adding Custom Panel Apps
- Customizing the Control Menu
- Creating Control Menu Entries
Collaboration
- Introduction to Collaboration
- Item Selector
- Understanding the Item Selector API's Components
- Selecting Entities Using an Item Selector
- Creating Custom Item Selector Entities
- Creating Custom Item Selector Views
Export/Import and Staging
- Introduction to Export/Import and Staging
- Decision to Implement Staging
- Understanding Staged Models
- Generating Staged Models Using Service Builder
- Creating Staged Models Manually
- Understanding Data Handlers
Liferay Forms
- Introduction to Liferay Forms
- Form Field Types
- Creating Form Field Types
- Rendering Field Types
- Adding Settings to Form Field Types
- Rendering Form Field Settings
Configurable Applications
- Introduction to Configurable Applications
- Making Applications Configurable
- Categorizing the Configuration
- Scoping Configurations
- Reading Configuration Values from a Component
- Reading Configuration Values from a MVC Portlet
Audience Targeting
- Introduction to Audience Targeting
- Accessing the Content Targeting API
- Creating New Audience Targeting Rule Types
- Creating a Custom Rule Type
- Defining a Rule's View/Save Lifecycle
- Evaluating a Rule
WYSIWYG Editors
- Introduction to WYSIWYG Editors
- Adding a WYSIWYG Editor to a Portlet
- Modifying an Editor's Configuration
- Adding New Behavior to an Editor
- AlloyEditor
- Adding Buttons to AlloyEditor's Toolbars
Modularity and OSGi
- Introduction to Modularity and OSGi
- The Benefits of Modularity
- OSGi and Modularity
- Leveraging Dependencies
- OSGi Services and Dependency Injection with Declarative Services
- Dynamic Deployment
OSGi Basics for Liferay Development
- Introduction to OSGi Basics for Liferay Development
- Liferay Portal Classloader Hierarchy
- Bundle Classloading Flow
- Importing Packages
- Exporting Packages
- Resolving Third Party Library Package Dependencies
Troubleshooting FAQ
- Introduction to Troubleshooting FAQ
- Resolving Bundle Requirements
- Resolving Bundle-SymbolicName Syntax Issues
- Resolving ClassNotFoundException and NoClassDefFoundError in OSGi Bundles
- Identifying Liferay Artifact Versions for Dependencies
- Connecting to JNDI Data Sources