{"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":"2025-10-22T14:52:14","modified_gmt":"2025-10-22T09:22:14","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\">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>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>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>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>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>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>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>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>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>These practices will help you to smoothen &amp; separate your technical and content management work properly.<\/li>\n\n\n\n<li>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\n\n\n<li>Email me: <a href=\"mailto:Neil@HarwaniSytems.in\">Neil@HarwaniSytems.in<\/a><\/li>\n\n\n\n<li>Website: <a href=\"http:\/\/www.harwanisystems.in\/\">www.HarwaniSystems.in<\/a><\/li>\n\n\n\n<li>Blog: <a href=\"http:\/\/www.techandtrain.com\/blog\">www.TechAndTrain.com\/blog<\/a><\/li>\n\n\n\n<li>LinkedIn: <a href=\"https:\/\/www.linkedin.com\/in\/neil27\/\">Neil Harwani | LinkedIn<\/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":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"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_featured_media_url":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2023\/11\/MixedMedia.jpg?fit=1280%2C1087&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7do02-j6","jetpack-related-posts":[{"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":0},"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":1018,"url":"https:\/\/www.techandtrain.com\/blog\/2023\/01\/links-on-important-technical-concepts-of-liferay-part-1\/","url_meta":{"origin":1184,"position":1},"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":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":965,"url":"https:\/\/www.techandtrain.com\/blog\/2022\/10\/liferay-best-practices-part-1\/","url_meta":{"origin":1184,"position":3},"title":"Liferay best practices &#8211; Part 1","author":"Neil Harwani","date":"October 11, 2022","format":false,"excerpt":"Developers and managers both struggle at times to pre-plan usage of best practices in projects causing many problems which are best avoided. Providing below some learnings & best practices on using and working with Liferay \u2013 Part 1. Don\u2019t work directly on the Liferay database. Use the groovy script console\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\/2022\/10\/Web-Design.jpg?fit=1200%2C720&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2022\/10\/Web-Design.jpg?fit=1200%2C720&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2022\/10\/Web-Design.jpg?fit=1200%2C720&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2022\/10\/Web-Design.jpg?fit=1200%2C720&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.techandtrain.com\/blog\/wp-content\/uploads\/2022\/10\/Web-Design.jpg?fit=1200%2C720&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":4},"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":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,"_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":1,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions"}],"predecessor-version":[{"id":1186,"href":"https:\/\/www.techandtrain.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions\/1186"}],"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}]}}