{"id":1184,"date":"2023-11-29T14:53:38","date_gmt":"2023-11-29T09:23:38","guid":{"rendered":"https:\/\/www.techandtrain.com\/blog\/?p=1184"},"modified":"2026-08-16T04:20:34","modified_gmt":"2026-08-15T22:50:34","slug":"content-management-system-feature-best-practices-in-liferay-part-1","status":"publish","type":"post","link":"https:\/\/www.techandtrain.com\/blog\/2023\/11\/content-management-system-feature-best-practices-in-liferay-part-1\/","title":{"rendered":"Content Management System feature best practices in Liferay &#8211; Part 1"},"content":{"rendered":"\n<p id=\"ember1015\" class=\"wp-block-paragraph\">Here are some best practices for content management system feature usage in Liferay &#8211; Part 1.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Separate the technical work of portlet creation, hooks, APIs, integration, themes, master templates and so on from content publishing work.<\/li>\n\n\n\n<li class=\"\">Once technical work is done, setup publications feature on your production environment and publish using it. Refer: <a href=\"https:\/\/learn.liferay.com\/w\/dxp\/site-building\/publishing-tools\/publications\">Publications &#8211; Liferay Learn<\/a><\/li>\n\n\n\n<li class=\"\">Your workflow for publications should have content creators, reviewers, editors &amp; publishers as bare minimum roles or you can adjust it as per your needs.<\/li>\n\n\n\n<li class=\"\">Preferably, keep Production, Pre-production (Copy of production after scrubbing any PII in terms of CMS \/ content and technical components both), UAT which is technical replica not CMS content replica, integration and dev environments.<\/li>\n\n\n\n<li class=\"\">Think of the content creation process this way: You don&#8217;t write a blog on one site and export from it and then import onto a new site which is your main blog, you write the draft on your own main site and put it through a workflow as required. Same applies to all largest publishers in the world, they don&#8217;t ask us to submit our journal papers, articles, conference proceedings, etc. to their UAT or pre-prod, we put content on their production systems and it goes through a workflow with right approvals, reviews and security permissions. Same applies to Wikipedia, we have a TALK\/EDIT page for each of their topics right on the production system.<\/li>\n\n\n\n<li class=\"\">Flow of content: CREATE\/REVIEW\/PUBLISH on production using publications. Then copy content after scrubbing onto pre-prod only for load testing and other needs. UAT, Integration and Dev are technical systems where development happens.<\/li>\n\n\n\n<li class=\"\">Flow of environments for tech team: Copy of content after scrubbing PII (Personally Identifiable Information) onto Pre-Production, Technical components same as production on UAT but not content and then development servers with bleeding edge technical work.<\/li>\n\n\n\n<li class=\"\">Many get confused and mix the content publishing and technical work by exporting \/ importing content between system environments. We need technical component similarity between all environments not content. Content has to be same across only prod and pre-prod after necessary scrubbing of PII.<\/li>\n\n\n\n<li class=\"\">These practices will help you to smoothen &amp; separate your technical and content management work properly.<\/li>\n\n\n\n<li class=\"\">Refer: <a href=\"https:\/\/liferay.dev\/blogs\/-\/blogs\/content-creation-is-not-a-development-activity-\">Content Creation is Not a Development Activity! &#8211; Liferay<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Website:\u00a0<a href=\"http:\/\/www.harwanisystems.in\/\"><strong>www.HarwaniSystems.in<\/strong><\/a><\/li>\n\n\n\n<li class=\"\">Blog:\u00a0<a href=\"https:\/\/www.techandtrain.com\/blog\"><strong>www.TechAndTrain.com\/blog<\/strong><\/a><\/li>\n\n\n\n<li class=\"\">LinkedIn:\u00a0<a href=\"https:\/\/www.linkedin.com\/in\/neil27\/\"><strong>Neil Harwani | LinkedIn<\/strong><\/a><\/li>\n\n\n\n<li class=\"\">Email:\u00a0<a href=\"mailto:Neil@HarwaniSystems.in\">Neil@HarwaniSystems.in<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Here are some best practices for content management system feature usage in Liferay &#8211; Part 1.<\/p>\n","protected":false},"author":2,"featured_media":1185,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[323,192],"tags":[319,324,325,200],"class_list":["post-1184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-content-management","category-liferay","tag-best-practices","tag-cms","tag-content-management","tag-liferay"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7do02-j6","jetpack-related-posts":[{"id":1018,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/01\/links-on-important-technical-concepts-of-liferay-part-1\/","url_meta":{"origin":1184,"position":0},"title":"Links on important technical concepts of Liferay &#8211; Part 1","author":"Neil Harwani","date":"January 25, 2023","format":false,"excerpt":"Here are some links on important technical concepts of Liferay - Part 1. Hope this is helpful to all using and learning Liferay. Clustering:\u00a0Liferay DXP Clustering \u2013 Liferay Help Center Upgrade:\u00a0Upgrade Basics \u2014 Liferay Learn LXC:\u00a0Liferay Experience Cloud \u2013 Liferay Help Center Search:\u00a0Search Overview \u2014 Liferay Learn Architecture:\u00a0Introduction to Architecture\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"Credit: www.Pixabay.com","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/01\/door-g5a9b513f9_1920.jpg?fit=1200%2C944&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/01\/door-g5a9b513f9_1920.jpg?fit=1200%2C944&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/01\/door-g5a9b513f9_1920.jpg?fit=1200%2C944&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/01\/door-g5a9b513f9_1920.jpg?fit=1200%2C944&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/01\/door-g5a9b513f9_1920.jpg?fit=1200%2C944&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1098,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/07\/liferay-architecture-and-product-areas-beyond-cms-content-management-system-part-1\/","url_meta":{"origin":1184,"position":1},"title":"Liferay architecture and product areas beyond CMS (Content management system) &#8211; Part 1","author":"Neil Harwani","date":"July 15, 2023","format":false,"excerpt":"For anyone who is curious about what all are the areas for Liferay beyond CMS (Content Management System) features in terms of architecture and product, below is a glossary of major terms for the moving components & product areas - Part 1: Liferay DXP Liferay Commerce -\u00a0Commerce - Liferay Learn\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"Credits: www.Pixabay.com","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/07\/texture-g8d12780e6_1280.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/07\/texture-g8d12780e6_1280.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/07\/texture-g8d12780e6_1280.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/07\/texture-g8d12780e6_1280.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/07\/texture-g8d12780e6_1280.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1132,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/09\/what-you-should-not-be-doing-in-liferay-part-1\/","url_meta":{"origin":1184,"position":2},"title":"What you should not be doing in Liferay &#8211; Part 1","author":"Neil Harwani","date":"September 30, 2023","format":false,"excerpt":"Here is a list of what you should not be doing in Liferay - Part 1 and also what you should be doing written right next to it in place of the wrong things: Write JDBC calls in portlets. Avoid JDBC calls in portlets. Please explore expando, service builder, dynamic\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"Credit: www.Pixabay.com","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/09\/caution-943376_1280.png?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/09\/caution-943376_1280.png?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/09\/caution-943376_1280.png?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/09\/caution-943376_1280.png?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/09\/caution-943376_1280.png?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1163,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/11\/what-are-some-of-the-best-practices-for-liferay-using-three-separate-gpts\/","url_meta":{"origin":1184,"position":3},"title":"What are some of the best practices for Liferay? &#8211; Using three separate GPTs","author":"Neil Harwani","date":"November 20, 2023","format":false,"excerpt":"Generated using my GPT -\u00a0Liferay Guide - Via official sources of Liferay:\u00a0https:\/\/chat.openai.com\/g\/g-4G5XuBdpL-liferay-guide-via-official-sources-of-liferay Adhering to best practices in Liferay ensures that you leverage the platform effectively for enterprise solutions. Here are some key best practices to consider: 1.\u00a0Modular Development: Embrace Liferay\u2019s modular development approach using OSGi. Develop customizations in modules, rather\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"Credits: www.Pixabay.com","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Fantasy-Portal.jpg?fit=1200%2C909&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Fantasy-Portal.jpg?fit=1200%2C909&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Fantasy-Portal.jpg?fit=1200%2C909&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Fantasy-Portal.jpg?fit=1200%2C909&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Fantasy-Portal.jpg?fit=1200%2C909&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1256,"url":"https:\/\/www.techandtrain.com\/blog\/2024\/05\/what-is-osgi-as-per-gemini-chatgpt\/","url_meta":{"origin":1184,"position":4},"title":"What is OSGI? &#8211; As per Gemini &#038; ChatGPT.","author":"Neil Harwani","date":"May 31, 2024","format":false,"excerpt":"OSGi (Open Service Gateway Initiative) is a fundamental technology used in Liferay DXP (Digital Experience Platform). It provides a modular framework that allows Liferay to be built from reusable components called bundles. These bundles can be dynamically installed, started, stopped, updated, and uninstalled without restarting the entire platform. Here's how\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2024\/05\/OSGI.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2024\/05\/OSGI.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2024\/05\/OSGI.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2024\/05\/OSGI.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2024\/05\/OSGI.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1175,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/11\/liferay-best-practices-part-2\/","url_meta":{"origin":1184,"position":5},"title":"Liferay best practices &#8211; Part 2","author":"Neil Harwani","date":"November 24, 2023","format":false,"excerpt":"Following up with Part 1 of the series here:\u00a0Liferay best practices - Part 1 | LinkedIn -\u00a0Here is part 2 of Liferay best practices: Look out for settings of ORA-1795 error and it's required settings from Liferay Help Center articles if you are using Oracle If you have heavy usage\u2026","rel":"","context":"In &quot;Liferay&quot;","block_context":{"text":"Liferay","link":"https:\/\/www.techandtrain.com\/blog\/category\/liferay\/"},"img":{"alt_text":"Credits: www.Pixabay.com","src":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Best-Practice.jpg?fit=1200%2C900&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Best-Practice.jpg?fit=1200%2C900&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Best-Practice.jpg?fit=1200%2C900&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Best-Practice.jpg?fit=1200%2C900&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/Best-Practice.jpg?fit=1200%2C900&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/MixedMedia.jpg?fit=1280%2C1087&ssl=1","_links":{"self":[{"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts\/1184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/comments?post=1184"}],"version-history":[{"count":2,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions"}],"predecessor-version":[{"id":1707,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions\/1707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/media\/1185"}],"wp:attachment":[{"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/media?parent=1184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/categories?post=1184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/tags?post=1184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}