contents
foreword
preface
acknowledgments
about this book
about the cover illustration
Part 1 Working with Liferay and portlets
1 The Liferay difference
1.1 The Java portal promise: from disappointment to fulfillment
1.2 Getting to know Liferay
1.3 How Liferay structures a portal
1.4 Getting around in Liferay
1.5 Imagining your site in Liferay
1.6 Summary
2 Getting started with the Liferay development platform
2.1 Installing Liferay and the Plugins SDK
2.2 A crash course in Liferay server administration
2.3 Setting up the Plugins SDK
2.4 Developing a portlet plugin
2.5 Making Hello World into Hello You
2.6 Deploying and testing your portlet
2.7 Summary
Part 2 Writing applications on Liferay’s platform
3 A data-driven portlet made easy
3.1 Introducing Inkwell: a case study
3.2 Designing the Product Registration portlet
3.3 Generating DB code with Service Builder
3.4 Creating a buffer to the persistence layer
3.5 Service Builder in action
3.6 Summary
4 MVC the Liferay way
4.1 Using Model-View-Controller
4.2 Configuring the portlet project
4.3 Creating a form with AlloyUI taglibs
4.4 Generating different field types with AlloyUI taglibs
4.5 Using Liferay’s MVC makes your portlets simpler
4.6 Summary
5 Designing your site with themes and layout templates
5.1 Understanding themes and their structure
5.2 Understanding theme markup, CSS, and JavaScript
5.3 Reaping the benefits of Alloy UI
5.4 The liferay-look-and-feel.xml file
5.5 Understanding theme conventions
5.6 Designing a page with layout templates
5.7 Inkwell implementation
5.8 Summary
6 Making your site social
6.1 Social networking: why is it important?
6.2 Installing Liferay’s social networking portlets
6.3 Understanding Liferay’s social features
6.4 Using profile pages
6.5 Friends, Romans, and countrymen: they’re all social relations
6.6 Implementing social activities in your portlets
6.7 Summary
7 Enabling user collaboration
7.1 Building a collaborative app: a slogan contest
7.2 Adding assets to your applications
7.3 Running your data through a workflow
7.4 Tagging and categorizing content
7.5 Adding discussions and ratings
7.6 Creating custom queries using SQL
7.7 Summary
Part 3 Customizing Liferay
8 Hooks
8.1 What is a hook?
8.2 What hooks can customize
8.3 Hooks in action: customizing Inkwell’s shopping cart
8.4 Summary
9 Extending Liferay effectively
9.1 Introducing Ext plugins
9.2 Ext in action
9.3 Delivering a page, Liferay style
9.4 Understanding Liferay development best practices
9.5 Summary
10 A tour of Liferay APIs
10.1 Making URLs friendly
10.2 Organizing larger applications
10.3 Filtering content at the view level
10.4 Accessing other databases
10.5 Sending messages over Liferay’s message bus
10.6 Scheduling jobs
10.7 Indexing and search
10.8 Summary
appendix A: Liferay and IDEs
appendix B: Introduction to the Portlet API
appendix C: Inter-portlet communication
appendix D: How to contribute to Liferay
appendix E: Liferay 6.1 Documents API
index