<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos Fortes</title>
    <description>The latest articles on DEV Community by Carlos Fortes (@cdfortes).</description>
    <link>https://dev.to/cdfortes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F123828%2F1d26cf56-b443-4496-ad7b-2529a1db3984.png</url>
      <title>DEV Community: Carlos Fortes</title>
      <link>https://dev.to/cdfortes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cdfortes"/>
    <language>en</language>
    <item>
      <title>Frontend in Liferay 7.4: The Revolution You Need to Know About</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Fri, 30 May 2025 13:01:42 +0000</pubDate>
      <link>https://dev.to/cdfortes/frontend-in-liferay-74-the-revolution-you-need-to-know-about-57gl</link>
      <guid>https://dev.to/cdfortes/frontend-in-liferay-74-the-revolution-you-need-to-know-about-57gl</guid>
      <description>&lt;p&gt;Hey there, fellow dev! If you work with Liferay, buckle up because I'm about to tell you how version 7.4 completely changed the game. You know that feeling when someone finally gets what we actually need? That's exactly what I felt when I started working with these new tools.&lt;/p&gt;

&lt;p&gt;I'll be straight with you: frontend development in Liferay will never be the same. And that's AWESOME!&lt;/p&gt;

&lt;h2&gt;
  
  
  Blade CLI: The Swiss Army Knife That Evolved into a Lightsaber
&lt;/h2&gt;

&lt;p&gt;Remember when Blade was just that little code generator that created portlets? Forget about it! This thing is on another level now. Today, when you type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;blade create &lt;span class="nt"&gt;-t&lt;/span&gt; client-extension-react my-awesome-component
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're not creating those heavy old-school portlets anymore. You're creating actual micro-frontends that live their own lives, with their own deployment cycles. It's like going from a '72 Beetle to a Tesla.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Really Changed?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Hot-reload that actually works&lt;/strong&gt;: That torture of waiting 5 minutes to see if the button turned blue or red? Gone. Change it, save it, BAM! It's there on your screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrated NPM&lt;/strong&gt;: Want to use that cool lib that came out yesterday? &lt;code&gt;npm install&lt;/code&gt; and be happy. No hacks, no workarounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turbocharged local development&lt;/strong&gt;: Run everything locally, test everything locally, only push to the server when it's perfect.&lt;/p&gt;

&lt;p&gt;I literally save about 2 hours a day just by not having to deploy to test every little thing. Seriously, do the math on what that means in a month!&lt;/p&gt;

&lt;h2&gt;
  
  
  Client Extensions: Bye Bye, Problematic Shared Libraries!
&lt;/h2&gt;

&lt;p&gt;OK, this is the part that gets me most excited. Client Extensions are like those old shared libraries, but on steroids. It's code sharing done right.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This is Revolutionary
&lt;/h3&gt;

&lt;p&gt;Picture this: you have an extension running React 18 with the latest TypeScript. Your colleague has another one using Vue 3. In the old days? Conflict for sure. Today? Each one in their own sandbox, everybody's happy.&lt;/p&gt;

&lt;p&gt;And the best part: &lt;strong&gt;deploy without breaking anything&lt;/strong&gt;. That's right. Update the extension, deploy it, and the portal doesn't even blink. It's like changing tires while the car is moving (but in a safe way, of course).&lt;/p&gt;

&lt;h3&gt;
  
  
  In Practice, How Does It Look?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// client-extension.yaml&lt;/span&gt;
&lt;span class="nx"&gt;my&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;awesome&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;themeJS&lt;/span&gt;
  &lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;analytics&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;that&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;works&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;

&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;catalog&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;customElement&lt;/span&gt;
  &lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;cssURLs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;stylish&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;
  &lt;span class="nx"&gt;friendlyURLMapping&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple as that. Declare what you want, where the code is, and Liferay makes the magic happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Cases That Saved My Day
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;External service integration&lt;/strong&gt;: Needed to integrate with a new payments API. Created a Client Extension, developed everything in isolation, tested until perfect. Deploy? 30 seconds. Zero downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actually reusable components&lt;/strong&gt;: Created a cool charts component in an extension. Now I use it in 5 different projects. Copy and paste? Never again!&lt;/p&gt;

&lt;h2&gt;
  
  
  Lexicon/Clay: The Design System That Makes Sense
&lt;/h2&gt;

&lt;p&gt;I'll confess something: I was skeptical about design systems. "Oh, it's gonna make everything rigid," I thought. My friend, how wrong I was!&lt;/p&gt;

&lt;p&gt;Lexicon/Clay isn't just a pretty library. It's a complete arsenal that saves you from reinventing the wheel every single day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance You Can Feel
&lt;/h3&gt;

&lt;p&gt;You know when the client complains the site is slow? With Clay, this problem shrinks A LOT. Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduced bundle size&lt;/strong&gt;: Everyone uses the same components = less JavaScript to download&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized CSS&lt;/strong&gt;: CSS variables work miracles. Changed the primary color? Changes EVERYTHING without reloading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart caching&lt;/strong&gt;: The browser loves it when you use the same stuff. Load once, use forever&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Consistency That Users Thank You For
&lt;/h3&gt;

&lt;p&gt;It's not just about pretty code. It's about happy users. With Clay:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free accessibility&lt;/strong&gt;: All components come with ARIA labels, keyboard navigation, everything done right&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable behavior&lt;/strong&gt;: User learns once how a modal works, and all modals work the same&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effortless responsive&lt;/strong&gt;: Works on desktop, tablet, grandma's phone. All automatic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code That Makes Sense
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ClayButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@clayui/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;useLiferay&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@liferay/frontend-js-react-web&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyAwesomeComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;showModal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShowModal&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ClayButton&lt;/span&gt; 
        &lt;span class="na"&gt;displayType&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt;
        &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setShowModal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Click me!
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ClayButton&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;showModal&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;
          &lt;span class="na"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lg"&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Look how cool!
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Beautiful, functional, and accessible component.
            No extra effort!
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ClayModal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean, clear, and works anywhere in Liferay. That's what I call productivity!&lt;/p&gt;

&lt;h2&gt;
  
  
  Stylebooks: Customization Without Headaches
&lt;/h2&gt;

&lt;p&gt;Here's a truth: clients love changing colors. "Oh, this blue is too blue, can you make it more light-blue?"&lt;/p&gt;

&lt;p&gt;In the old days? Nightmare. Today? Stylebooks!&lt;/p&gt;

&lt;h3&gt;
  
  
  How Does This Magic Work?
&lt;/h3&gt;

&lt;p&gt;Stylebooks are like themes on steroids. You define design variables (colors, spacing, shadows) and they propagate to EVERYTHING. Even your Client Extensions automatically get these variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Your CSS in Client Extensions */&lt;/span&gt;
&lt;span class="nc"&gt;.my-special-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--primary-background&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--border-radius-default&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing-medium&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c"&gt;/* Gets everything from Stylebook! */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Client wants to change the primary color? Go to Stylebook, change it there, and BOOM! Entire site updated. No deploy, no compiling anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Power in the Client's Hands (But Controlled)
&lt;/h3&gt;

&lt;p&gt;The best thing about Stylebooks is that you, the dev, set the limits. The client can change colors, fonts, spacing... but within what makes sense. No more "the client broke the layout because they touched where they shouldn't."&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting It All Together: The Dream Workflow
&lt;/h2&gt;

&lt;p&gt;Now comes the coolest part. When you combine all these tools, development goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create the project with Blade&lt;/strong&gt;: &lt;code&gt;blade create&lt;/code&gt; and you already have the structure ready&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Develop with Client Extensions&lt;/strong&gt;: Isolated, testable, reusable code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Clay Components&lt;/strong&gt;: Consistent and beautiful interface without effort&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stylebooks to customize&lt;/strong&gt;: Happy client, happy you, everybody happy&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A Real Day in the Life
&lt;/h3&gt;

&lt;p&gt;Just yesterday, I needed to create a new dashboard. Process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9am: &lt;code&gt;blade create -t client-extension-react sales-dashboard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;9:30am: Already had the base components working with Clay&lt;/li&gt;
&lt;li&gt;11am: Complete dashboard, with charts, tables, all responsive&lt;/li&gt;
&lt;li&gt;11:30am: Deploy via Client Extension (30 seconds!)&lt;/li&gt;
&lt;li&gt;2pm: Client asked to change the colors. Stylebook. 5 minutes.&lt;/li&gt;
&lt;li&gt;2:05pm: Having coffee ☕&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the old days? Would easily take 3 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips from Someone in the Trenches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start Small
&lt;/h3&gt;

&lt;p&gt;Don't try to migrate everything at once. Take one component, turn it into a Client Extension, watch the magic happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Embrace Clay
&lt;/h3&gt;

&lt;p&gt;Resist the temptation to create your own components. Clay has almost everything you need, and what it has is tested, optimized, and accessible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stylebooks from the Start
&lt;/h3&gt;

&lt;p&gt;Even if the client doesn't ask for it, set up Stylebooks. Trust me, at some point they'll want to change something.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation is Your Friend
&lt;/h3&gt;

&lt;p&gt;Liferay's docs have improved A LOT. And the community on Slack is super active. Don't be shy about asking questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future is Now
&lt;/h2&gt;

&lt;p&gt;Folks, I won't lie: migrating to this new model takes a bit of initial work. But the payoff is huge. Faster development, cleaner code, safer deploys, happier clients.&lt;/p&gt;

&lt;p&gt;If you're still developing old-school portlets, it's time to evolve. Liferay 7.4 isn't just a version update - it's a paradigm shift.&lt;/p&gt;

&lt;p&gt;And the best part: the learning curve isn't as steep as it seems. In two weeks you'll be flying with the new tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Is It Worth It?
&lt;/h2&gt;

&lt;p&gt;1000% yes! The combination of Blade CLI + Client Extensions + Clay completely changed my productivity (and mental sanity).&lt;/p&gt;

&lt;p&gt;What used to be complex and time-consuming is now simple and fast. What used to be "hope it works" is now "it works and I know why."&lt;/p&gt;

&lt;p&gt;If you develop in Liferay, there's no excuse not to dive into these technologies. Your future self will thank you - and so will your clients!&lt;/p&gt;

&lt;p&gt;Let's code? 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;PS: If you're already using these tools, share your experiences! And if you're not yet, how about starting today? The Liferay community is here to help!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Site Initializers: Automação e Personalização do Ambiente de Desenvolvimento</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Thu, 14 Nov 2024 09:57:53 +0000</pubDate>
      <link>https://dev.to/cdfortes/site-initializers-automacao-e-personalizacao-do-ambiente-de-desenvolvimento-18ko</link>
      <guid>https://dev.to/cdfortes/site-initializers-automacao-e-personalizacao-do-ambiente-de-desenvolvimento-18ko</guid>
      <description>&lt;p&gt;Olá amig@s,&lt;/p&gt;

&lt;p&gt;Se você já configurou um site no Liferay, sabe que pode ser um processo detalhado, exigindo a criação de páginas, a adição de conteúdo, a configuração de layouts e muito mais. Para simplificar e automatizar essa tarefa, o Liferay oferece os &lt;strong&gt;Site Initializers&lt;/strong&gt;. Eles são uma forma de pré-configurar ambientes completos de site com um único deploy, agilizando o desenvolvimento e a implantação de novos sites. Neste post, vamos ver o que são os Site Initializers, como criar um, comparar com outras abordagens de inicialização e compartilhar melhores práticas.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são os Site Initializers?
&lt;/h3&gt;

&lt;p&gt;Os &lt;strong&gt;Site Initializers&lt;/strong&gt; são uma forma de definir um conjunto completo de páginas, conteúdo, configurações e até personalizações em um pacote que pode ser implantado facilmente no Liferay. Eles automatizam a criação de sites, proporcionando rapidez e consistência para projetos que precisam de múltiplos sites semelhantes ou de sites com uma estrutura complexa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que usar Site Initializers?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automação completa&lt;/strong&gt;: Crie sites completos com páginas, conteúdos, temas e configurações personalizadas com um único deploy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistência&lt;/strong&gt;: Garante que todos os sites criados tenham a mesma estrutura, aparência e funcionalidades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agilidade no desenvolvimento&lt;/strong&gt;: Economiza tempo configurando ambientes repetitivos manualmente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como Criar um Site Initializer
&lt;/h3&gt;

&lt;p&gt;Criar um Site Initializer envolve algumas etapas básicas que podem ser desenvolvidas fora da UI do Liferay, como uma &lt;strong&gt;Client Extension&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Configuração do Projeto&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Primeiro, crie um projeto de Site Initializer usando o &lt;strong&gt;Liferay CLI&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @liferay/cli new my-site-initializer &lt;span class="nt"&gt;--type&lt;/span&gt; client-extension
&lt;span class="nb"&gt;cd &lt;/span&gt;my-site-initializer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa estrutura fornecerá a base necessária para começar a desenvolver o Site Initializer. Certifique-se de que a pasta &lt;code&gt;src&lt;/code&gt; tenha as subpastas necessárias, como &lt;code&gt;pages&lt;/code&gt;, &lt;code&gt;fragments&lt;/code&gt;, &lt;code&gt;style-books&lt;/code&gt;, entre outras, que refletem o conteúdo que você deseja incluir no site inicial.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Definição do Arquivo de Configuração&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;No &lt;code&gt;client-extension.yaml&lt;/code&gt;, defina as propriedades do Site Initializer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-site-initializer&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;site-initializer&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Meu&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;primeiro&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Site&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Initializer"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. &lt;strong&gt;Criação de Páginas e Conteúdo&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Dentro da estrutura do projeto, adicione arquivos JSON para descrever a configuração de páginas, widgets e conteúdos. Um exemplo de arquivo JSON para criar uma página inicial (&lt;code&gt;pages/home.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Home"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"layoutTemplateId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1_column"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"friendlyURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicione também conteúdos como web contents ou fragments personalizados, que serão incluídos automaticamente durante a inicialização do site.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;strong&gt;Deploy e Teste&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Para fazer o deploy do Site Initializer, empacote a extensão e carregue-a no Liferay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liferay deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de fazer o deploy, vá ao painel de controle do Liferay, crie um novo site e selecione o Site Initializer como a base. Isso aplicará automaticamente todas as configurações e conteúdos pré-definidos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aplicação de Site Initializers em Projetos Reais
&lt;/h3&gt;

&lt;p&gt;Os Site Initializers são perfeitos para projetos que precisam de múltiplos sites com a mesma base, como redes de franquias, intranets de grandes empresas ou portais de conteúdo com um layout padrão. Eles também são úteis em ambientes de desenvolvimento onde você precisa recriar um ambiente de teste rapidamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparação com Outras Abordagens de Inicialização
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Critério&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Site Initializers&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Criação Manual&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Estratégias Customizadas&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderada — configuração com código&lt;/td&gt;
&lt;td&gt;Alta — exige configurações repetidas&lt;/td&gt;
&lt;td&gt;Alta — exige scripts e APIs customizadas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo de Deploy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rápido — deploy e criação automáticos&lt;/td&gt;
&lt;td&gt;Lento — manual e demorado&lt;/td&gt;
&lt;td&gt;Variável — depende do nível de automação&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alta — pode incluir tudo, de páginas a temas&lt;/td&gt;
&lt;td&gt;Depende da capacidade manual&lt;/td&gt;
&lt;td&gt;Muito alta — depende do desenvolvimento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manutenção&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fácil de manter e atualizar&lt;/td&gt;
&lt;td&gt;Difícil, propenso a erros&lt;/td&gt;
&lt;td&gt;Exige mais esforço e monitoramento&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Melhores Práticas para Uso de Site Initializers
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Modularize seus conteúdos&lt;/strong&gt;: Organize o projeto em seções lógicas, como &lt;code&gt;pages&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt;, &lt;code&gt;fragments&lt;/code&gt;, e &lt;code&gt;style-books&lt;/code&gt;, para facilitar a manutenção e a atualização.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documente os passos de inicialização&lt;/strong&gt;: Mantenha um README detalhando as funcionalidades e a estrutura do Site Initializer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use variáveis consistentes&lt;/strong&gt;: Defina tokens de estilo nos &lt;code&gt;style-books&lt;/code&gt; para garantir consistência visual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teste extensivamente&lt;/strong&gt;: Antes de usar em produção, teste o Site Initializer em um ambiente de desenvolvimento para confirmar que todas as páginas e conteúdos são criados corretamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mantenha backups das versões&lt;/strong&gt;: Garanta que você tenha versões anteriores em caso de rollback ou necessidade de comparar mudanças.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe28j9r1qa92wdthbii7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe28j9r1qa92wdthbii7v.png" alt="" width="792" height="564"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Criando um Exemplo de Site Initializer com Código
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Estrutura do &lt;code&gt;client-extension.yaml&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-company-initializer&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;site-initializer&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Site&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Initializer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;para&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;novos&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;da&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;empresa"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Exemplo de uma página (&lt;code&gt;src/pages/about-us.json&lt;/code&gt;)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"About Us"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"layoutTemplateId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2_columns"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"friendlyURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/about-us"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web-content"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"contentId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"company-overview"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse exemplo cria uma página "About Us" que inclui um conteúdo web chamado "company-overview". Com esse tipo de configuração, você pode replicar rapidamente sites completos, garantindo que todos os elementos importantes estejam prontos no momento da criação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Os &lt;strong&gt;Site Initializers&lt;/strong&gt; são uma ferramenta essencial no Liferay para quem busca automação e consistência na criação de sites. Eles permitem que equipes criem novos ambientes em minutos, com tudo pré-configurado e pronto para uso. Comparados a processos manuais ou customizações complexas, eles são mais rápidos, fáceis de manter e oferecem flexibilidade suficiente para a maioria dos casos de uso.&lt;/p&gt;

&lt;p&gt;Explore os &lt;strong&gt;Site Initializers&lt;/strong&gt; e veja como eles podem simplificar e acelerar a criação de sites personalizados no Liferay!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fragmentos no Liferay</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Wed, 13 Nov 2024 09:38:45 +0000</pubDate>
      <link>https://dev.to/cdfortes/fragmentos-na-liferay-244a</link>
      <guid>https://dev.to/cdfortes/fragmentos-na-liferay-244a</guid>
      <description>&lt;p&gt;Criar fragmentos no Liferay é uma técnica poderosa para desenvolvedores que desejam oferecer componentes customizados e reutilizáveis em seus sites. Este post aborda o processo de criação de fragmentos, as diferentes abordagens, como utilizá-los no portal e as vantagens de usar essa estratégia para desenvolvimento ágil e eficiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são Fragmentos no Liferay?
&lt;/h3&gt;

&lt;p&gt;Fragmentos são blocos de código que podem ser usados para construir páginas no Liferay de forma modular. Eles permitem que você crie seções de conteúdo ou funcionalidades específicas que podem ser arrastadas e soltas em uma página por usuários de negócios ou desenvolvedores. &lt;/p&gt;

&lt;p&gt;Os fragmentos são compostos por HTML, CSS e JavaScript e podem ser personalizados de acordo com as necessidades do projeto, proporcionando flexibilidade e maior controle sobre a aparência e o comportamento das páginas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Formas de criar um Fragmento
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Criação de Fragmentos via Liferay UI&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A maneira mais simples de criar fragmentos no Liferay é por meio da interface de usuário (UI) do portal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Passo 1&lt;/strong&gt;: Acesse o painel de controle do Liferay e vá para &lt;strong&gt;Design&lt;/strong&gt; &amp;gt; &lt;strong&gt;Fragmentos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passo 2&lt;/strong&gt;: Crie uma nova coleção de fragmentos (opcional) para organizar seu trabalho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passo 3&lt;/strong&gt;: Clique em &lt;strong&gt;Adicionar Fragmento&lt;/strong&gt; e defina o nome do fragmento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passo 4&lt;/strong&gt;: Insira o código HTML, CSS e JavaScript desejado no editor integrado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa abordagem é excelente para desenvolvedores que preferem uma criação rápida e sem a necessidade de configurações externas. Ela permite que você visualize instantaneamente as alterações feitas no fragmento.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Desenvolvimento de Fragmentos com o Liferay CLI&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Para um controle mais avançado e uso de ferramentas de desenvolvimento modernas, é recomendado usar o Liferay CLI e um editor de código:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instale o Liferay CLI&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @liferay/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crie um projeto de fragmento&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  liferay new my-fragment-project &lt;span class="nt"&gt;--type&lt;/span&gt; fragment
  &lt;span class="nb"&gt;cd &lt;/span&gt;my-fragment-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa abordagem permite que você use ferramentas como &lt;code&gt;webpack&lt;/code&gt; e editores de código como o Visual Studio Code para desenvolver fragmentos de forma profissional e colaborativa. O Liferay CLI também ajuda a fazer deploy local e exportar pacotes para deploy em produção.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;strong&gt;Desenvolvimento de Fragmentos Personalizados via API&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Se você precisa criar fragmentos programaticamente ou integrá-los com processos de automação, o Liferay oferece APIs para isso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize a &lt;strong&gt;API de Fragmentos&lt;/strong&gt; do Liferay para criar, atualizar e gerenciar fragmentos dinamicamente. Essa abordagem é útil para equipes que utilizam pipelines de CI/CD e desejam integrar a criação de fragmentos ao fluxo de desenvolvimento contínuo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Estrutura de um Fragmento
&lt;/h3&gt;

&lt;p&gt;Um fragmento no Liferay geralmente é estruturado em três componentes principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt;: Define a estrutura do conteúdo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS&lt;/strong&gt;: Aplica o estilo ao fragmento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt;: Adiciona comportamento interativo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de um Fragmento Simples&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- HTML --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"custom-fragment"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Bem-vindo ao meu Fragmento Personalizado&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Este é um exemplo de fragmento com HTML e JavaScript.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* CSS */&lt;/span&gt;
&lt;span class="nc"&gt;.custom-fragment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0f8ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// JavaScript&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DOMContentLoaded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fragmento carregado com sucesso!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Utilização de Fragmentos
&lt;/h3&gt;

&lt;p&gt;Depois de criar um fragmento, ele pode ser facilmente utilizado nas páginas do Liferay:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drag-and-Drop&lt;/strong&gt;: Acesse o &lt;strong&gt;Page Editor&lt;/strong&gt;, selecione o fragmento e arraste-o para o local desejado na página.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edição Inline&lt;/strong&gt;: Fragmentos podem ter áreas de edição inline que permitem que os usuários façam ajustes sem a necessidade de código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conteúdo Dinâmico&lt;/strong&gt;: Fragmentos podem ser configurados para buscar conteúdo de APIs externas ou usar dados dinâmicos por meio de variáveis globais e endpoints REST.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vantagens do Uso de Fragmentos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reutilização e Consistência&lt;/strong&gt;: Fragmentos podem ser reutilizados em diversas páginas, garantindo consistência visual e comportamental.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desenvolvimento Modular&lt;/strong&gt;: Permite uma abordagem de desenvolvimento modular, onde equipes diferentes podem trabalhar em diferentes fragmentos simultaneamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fácil Manutenção&lt;/strong&gt;: A separação de HTML, CSS e JavaScript facilita a manutenção e atualização de cada componente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalização sem Programação&lt;/strong&gt;: Usuários com pouco conhecimento técnico podem personalizar fragmentos pré-existentes por meio da interface do Liferay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desempenho Melhorado&lt;/strong&gt;: Fragmentos otimizados ajudam a reduzir a carga da página e a melhorar o tempo de resposta, especialmente se usados com práticas modernas de carregamento assíncrono.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Melhores Práticas para Criação de Fragmentos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mantenha o Código Limpo e Modular&lt;/strong&gt;: Separe responsabilidades claramente entre HTML, CSS e JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Classes de Estilo Únicas&lt;/strong&gt;: Para evitar conflitos de CSS, use nomes de classes que sejam únicos e específicos para cada fragmento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teste em Diferentes Dispositivos&lt;/strong&gt;: Certifique-se de que o fragmento seja responsivo e testado em vários dispositivos para garantir a melhor experiência do usuário.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comentários e Documentação&lt;/strong&gt;: Adicione comentários no código para facilitar a manutenção e compreensão por parte de outros desenvolvedores.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;A criação de fragmentos no Liferay oferece uma maneira eficiente e moderna de construir páginas dinâmicas e personalizadas. Com várias opções de desenvolvimento — desde a interface amigável até soluções avançadas com CLI e API — o Liferay atende a desenvolvedores e equipes de negócios, permitindo que entreguem valor rapidamente e com alta flexibilidade. &lt;/p&gt;

&lt;h3&gt;
  
  
  Fontes para Consulta
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentação Oficial do Liferay DXP&lt;/strong&gt;: &lt;a href="https://learn.liferay.com/dxp/latest/en/" rel="noopener noreferrer"&gt;Documentação de Desenvolvimento do Liferay DXP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exemplos e Recursos de Fragmentos&lt;/strong&gt;: &lt;a href="https://github.com/liferay/liferay-portal" rel="noopener noreferrer"&gt;Liferay GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comunidade Liferay&lt;/strong&gt;: &lt;a href="https://liferay.dev/forums" rel="noopener noreferrer"&gt;Liferay Community Forums&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gostou? Deixe um ❤️ e compartilhe com sua rede para que mais desenvolvedores possam explorar fragmentos personalizados em Liferay!&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>fragments</category>
      <category>portalcorporativo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Client Extension no Liferay</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Wed, 13 Nov 2024 01:00:00 +0000</pubDate>
      <link>https://dev.to/cdfortes/melhores-praticas-para-desenvolvimento-em-liferay-5fl8</link>
      <guid>https://dev.to/cdfortes/melhores-praticas-para-desenvolvimento-em-liferay-5fl8</guid>
      <description>&lt;p&gt;Client Extensions são uma maneira moderna de integrar ou personalizar o Liferay sem a necessidade de desenvolvimento profundo diretamente no servidor. Elas permitem que você mantenha uma arquitetura desacoplada, facilitando o desenvolvimento e a manutenção contínua.&lt;/p&gt;

&lt;p&gt;Em resumo, as client extensions são aplicações externas que interagem com o Liferay por meio de APIs e endpoints personalizados, aproveitando tecnologias modernas como React, Angular, e Vue.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passos para criar uma Client Extension no Liferay
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Preparação do ambiente de desenvolvimento
&lt;/h4&gt;

&lt;p&gt;Antes de iniciar a criação de uma client extension, é necessário configurar o ambiente de desenvolvimento. Certifique-se de que possui as seguintes ferramentas instaladas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Liferay DXP ou Liferay CE&lt;/strong&gt; (dependendo da sua versão preferida)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js e npm/yarn&lt;/strong&gt; (para gerenciar pacotes e dependências)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liferay CLI&lt;/strong&gt; (Liferay Project Generator)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Configuração do projeto
&lt;/h4&gt;

&lt;p&gt;A criação de uma client extension começa com a configuração do projeto em si. Utilize o Liferay CLI para inicializar um projeto de extensão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @liferay/cli new &amp;lt;nome-do-projeto&amp;gt; &lt;span class="nt"&gt;--type&lt;/span&gt; client-extension
&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;nome-do-projeto&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando cria a estrutura básica do projeto, incluindo diretórios específicos para códigos JavaScript/React e arquivos de configuração.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Desenvolvimento da extensão
&lt;/h4&gt;

&lt;p&gt;Agora que você tem a estrutura do projeto configurada, é hora de começar a desenvolver a extensão. Dependendo do que deseja criar, o desenvolvimento pode variar. Por exemplo, se você está desenvolvendo um &lt;strong&gt;widget React&lt;/strong&gt;, deve estruturar os componentes dentro da pasta &lt;code&gt;src&lt;/code&gt; e configurar corretamente os pontos de entrada no arquivo &lt;code&gt;webpack.config.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de um componente React simples:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MeuWidget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Olá, Liferay!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;MeuWidget&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Renderização no ponto de entrada&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;meu-widget-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MeuWidget&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;meu-widget-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Configuração do manifesto
&lt;/h4&gt;

&lt;p&gt;O Liferay utiliza um arquivo de manifesto (&lt;code&gt;client-extension.json&lt;/code&gt;) para identificar e configurar a extensão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"meu-widget"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"custom-element"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Um exemplo de widget personalizado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"friendlyURLMapping"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"meu-widget"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeSettings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"htmlElementName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"meu-widget"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse arquivo define informações essenciais como o tipo da extensão, descrições, URLs amigáveis, e configurações específicas.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Teste e deploy
&lt;/h4&gt;

&lt;p&gt;Depois de finalizar o desenvolvimento e configurar o manifesto, é importante testar a extensão localmente para garantir que tudo funcione conforme o esperado.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build do projeto:&lt;/strong&gt; Para criar a versão final da sua extensão, execute o comando de build:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deploy no Liferay:&lt;/strong&gt; Para fazer o deploy, mova os arquivos compilados para o diretório de deploy do Liferay ou utilize o comando CLI específico para client extensions:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  liferay deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. Integração e configuração no Portal
&lt;/h4&gt;

&lt;p&gt;Uma vez que o deploy for realizado com sucesso, a extensão aparecerá no painel de administração do Liferay. Para configurá-la:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navegue até a seção de &lt;strong&gt;Configurações&lt;/strong&gt; &amp;gt; &lt;strong&gt;Client Extensions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Adicione a nova extensão ao layout desejado, configurando sua visualização e permissões conforme necessário.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Melhores práticas e dicas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modularização do Código:&lt;/strong&gt; Mantenha o código da client extension modular para facilitar a manutenção e evolução do projeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentação e Comentários:&lt;/strong&gt; Adicione comentários explicativos e mantenha uma boa documentação interna para que outros desenvolvedores possam entender o propósito e a funcionalidade da extensão.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segurança:&lt;/strong&gt; Evite o uso de dados sensíveis diretamente no código da extensão. Utilize APIs seguras para proteger informações confidenciais.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsividade:&lt;/strong&gt; Certifique-se de que a extensão seja responsiva e funcione bem em diferentes dispositivos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Criar uma client extension no Liferay permite uma enorme flexibilidade para personalizar e estender as funcionalidades do portal, trazendo inovações rápidas e específicas às suas necessidades de negócio. O processo requer conhecimento técnico sobre desenvolvimento de front-end, ferramentas de build e uma compreensão clara do Liferay CLI, mas os resultados podem transformar a experiência de uso para os administradores e usuários finais do portal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fontes para Consulta
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentação Oficial do Liferay DXP&lt;/strong&gt;: &lt;a href="https://learn.liferay.com/dxp/latest/en/" rel="noopener noreferrer"&gt;Documentação de Desenvolvimento do Liferay DXP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exemplos de Código e Recursos Open Source&lt;/strong&gt;: &lt;a href="https://github.com/liferay/liferay-portal" rel="noopener noreferrer"&gt;Liferay GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gostou? Deixe um ❤️ e compartilhe com sua rede para que mais desenvolvedores possam explorar Client Extensions no Liferay!&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>performance</category>
      <category>bestpractice</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Style Books no Liferay: Personalização simplificada com flexibilidade</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Tue, 12 Nov 2024 16:19:00 +0000</pubDate>
      <link>https://dev.to/cdfortes/tudo-sobre-style-books-no-liferay-personalizacao-simplificada-com-flexibilidade-5fon</link>
      <guid>https://dev.to/cdfortes/tudo-sobre-style-books-no-liferay-personalizacao-simplificada-com-flexibilidade-5fon</guid>
      <description>&lt;p&gt;Se você já trabalhou com o Liferay e pensou em personalizar a aparência das suas páginas sem a complexidade de desenvolver um theme do zero, os &lt;strong&gt;Style Books&lt;/strong&gt; são a solução perfeita. Mas a grande vantagem é que você não precisa escolher entre &lt;strong&gt;Style Books&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;Themes&lt;/em&gt;&lt;/strong&gt; — você pode usar os dois para ter o máximo de flexibilidade e controle. Neste post, vou explicar como usar ambos para customizações robustas, mostrar como criar um Style Book, compará-los com os _themes _tradicionais e compartilhar as melhores práticas.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são Style Books?
&lt;/h3&gt;

&lt;p&gt;Os Style Books são uma forma de definir e aplicar estilos personalizados às páginas do Liferay. Basicamente, eles funcionam como uma coleção de variáveis de estilo — pense em cores, tipografias, espaçamentos e outros elementos visuais — que podem ser aplicadas globalmente a um site. O ponto positivo é que, ao contrário dos themes, eles não requerem deploy de código no servidor e podem ser gerenciados diretamente pela interface do Liferay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que usar Style Books?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customização visual rápida e fácil&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atualizações em tempo real&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desenvolvimento sem Java, direto pelo UI do Liferay&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controle granular sobre elementos de design&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como usar &lt;em&gt;Themes&lt;/em&gt; e Style Books em conjunto
&lt;/h3&gt;

&lt;p&gt;Um dos aspectos mais interessantes do Liferay é que você pode combinar o poder dos &lt;strong&gt;Themes&lt;/strong&gt; e &lt;strong&gt;Style Books&lt;/strong&gt;. Os _Themes _oferecem uma personalização completa e controlada do portal, permitindo modificações profundas que envolvem JavaScript, Java e outras tecnologias de back-end. Por outro lado, os Style Books são ideais para ajustes visuais rápidos e sem deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cenário combinado&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Theme&lt;/strong&gt;: Use-o para criar a estrutura geral do site, incluir elementos específicos de layout e recursos que exigem código de backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style Book&lt;/strong&gt;: Use-o para aplicar estilos e variar a aparência de forma rápida, sem precisar modificar o código do &lt;em&gt;theme&lt;/em&gt;. Ideal para realizar mudanças de última hora ou adaptar o visual para campanhas temporárias.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa combinação permite que você mantenha a consistência do design e faça ajustes rápidos sem o processo de recompilação e redeploy do &lt;em&gt;theme&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando um Style Book do zero
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Acesse a Área de design do Liferay&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Vá até o &lt;strong&gt;Painel de Controle&lt;/strong&gt; &amp;gt; &lt;strong&gt;Design&lt;/strong&gt; &amp;gt; &lt;strong&gt;Style Books&lt;/strong&gt;. Lá, você verá uma lista de Style Books existentes e a opção para criar um novo.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Crie um novo Style Book&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Clique em &lt;strong&gt;Adicionar Style Book&lt;/strong&gt; e dê um nome a ele. Você verá a interface onde pode definir variáveis de estilo, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cores primárias e secundárias&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tipografia padrão&lt;/strong&gt; (tipos de fonte e tamanhos).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Espaçamentos e margens&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. &lt;strong&gt;Defina estilos customizados&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Aqui está o truque: você pode definir estilos de forma visual. Se quiser ir além, pode também inserir customizações CSS para ter ainda mais controle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de CSS customizado&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Roboto'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--primary-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas variáveis podem ser aplicadas de forma consistente ao longo do site, e qualquer atualização no Style Book reflete automaticamente em todas as páginas que o utilizam.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aplicando Style Books com _Themes _ativos
&lt;/h3&gt;

&lt;p&gt;Depois de criar e configurar o seu Style Book, ele pode ser aplicado mesmo se um _theme _personalizado estiver ativo. Isso permite que você mantenha o layout e a funcionalidade do theme, mas faça ajustes visuais rápidos com o Style Book.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vá para &lt;strong&gt;Configurações do Site&lt;/strong&gt; (Painel de Controle &amp;gt; Sites &amp;gt; Site desejado &amp;gt; Design &amp;gt; Configurações de Estilo).&lt;/li&gt;
&lt;li&gt;Selecione o Style Book desejado.&lt;/li&gt;
&lt;li&gt;Salve as alterações para ver a nova aparência do site com o theme base e as mudanças do Style Book.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Comparação: Style Books vs. Themes
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Critério&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Style Books&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Baixa — ideal para customizações rápidas&lt;/td&gt;
&lt;td&gt;Alta — envolve desenvolvimento com Java e Gulp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deploy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Não requer deploy de código&lt;/td&gt;
&lt;td&gt;Requer deploy e build no servidor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Configuração via UI, fácil de ajustar&lt;/td&gt;
&lt;td&gt;Total, mas com complexidade de código&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Uso de Código&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Possibilidade de CSS customizado&lt;/td&gt;
&lt;td&gt;Full control (JavaScript, CSS, Java, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Atualização&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rápida e em tempo real&lt;/td&gt;
&lt;td&gt;Exige recompilação e redeploy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Vantagens de usar Themes e Style Books em Conjunto
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Personalização Completa e Flexível&lt;/strong&gt;: O theme oferece uma base sólida, enquanto o Style Book permite ajustes rápidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Menos Tempo de Deploy&lt;/strong&gt;: Pequenas mudanças podem ser feitas com o Style Book sem necessidade de recompilar o theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistência com Variabilidade&lt;/strong&gt;: Aplique variações de design para diferentes seções ou campanhas sem alterar o theme base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redução de Custos de Desenvolvimento&lt;/strong&gt;: Menos tempo gasto para ajustes visuais, permitindo que a equipe de desenvolvimento se concentre em outras funcionalidades complexas.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Melhores práticas para uso de Style Books
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mantenha as Variáveis Consistentes&lt;/strong&gt;: Use nomes descritivos para facilitar o entendimento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evite Estilos em Conflito&lt;/strong&gt;: Se estiver usando um theme, garanta que os estilos do Style Book complementem os do theme, em vez de sobrescrevê-los de maneira imprevisível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testes e Validação&lt;/strong&gt;: Teste o site em diferentes dispositivos para confirmar a responsividade e a aplicação correta dos estilos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aproveite para Testar Novas Ideias&lt;/strong&gt;: Style Books são uma ótima maneira de experimentar novas paletas de cores e fontes sem mexer na base de código do theme.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Os Style Books oferecem uma solução prática e rápida para customizações visuais no Liferay. Usados em conjunto com themes, eles permitem personalização total com facilidade de manutenção e aplicação. Com essa abordagem, você pode aproveitar o melhor dos dois mundos — a robustez de um theme personalizado e a flexibilidade de atualizações rápidas de estilo com os Style Books.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fontes para Consulta
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentação Oficial do Liferay DXP&lt;/strong&gt;: &lt;a href="https://learn.liferay.com/dxp/latest/en/" rel="noopener noreferrer"&gt;Documentação de Desenvolvimento do Liferay DXP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exemplos de Código e Recursos Open Source&lt;/strong&gt;: &lt;a href="https://github.com/liferay/liferay-portal" rel="noopener noreferrer"&gt;Liferay GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Explore as possibilidades dos Style Books e veja como eles podem transformar a maneira como você gerencia a aparência do seu site no Liferay!&lt;/p&gt;

&lt;p&gt;Gostou? Deixe um ❤️ e compartilhe com sua rede para que mais desenvolvedores possam explorar Style Books em Liferay!&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>stylebooks</category>
      <category>uiux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Personalizar o Liferay para atender às necessidades específicas da sua empresa</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Tue, 12 Nov 2024 13:18:49 +0000</pubDate>
      <link>https://dev.to/cdfortes/personalizar-o-liferay-para-atender-as-necessidades-especificas-da-sua-empresa-hn2</link>
      <guid>https://dev.to/cdfortes/personalizar-o-liferay-para-atender-as-necessidades-especificas-da-sua-empresa-hn2</guid>
      <description>&lt;p&gt;Personalizar o Liferay para atender às necessidades específicas da sua empresa pode melhorar bastante a experiência do utilizador e a eficiência operacional. Neste post, vamos fazer um overview de como personalizar temas, configurar páginas, usar templates, criar portlets customizados, além de utilizar Style Books, Fragmentos e Client Extensions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Personalização de Temas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que são Temas no Liferay?
&lt;/h3&gt;

&lt;p&gt;Os temas no Liferay definem a aparência e o layout do portal. Eles controlam a estética e a disposição das páginas, permitindo uma personalização completa para refletir a identidade visual da sua empresa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como Criar um Tema Personalizado
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instalação do Liferay Theme Generator&lt;/strong&gt;: Primeiramente, instala o gerador de temas Liferay usando o npm:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; generator-liferay-theme
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Criação do Tema&lt;/strong&gt;: Cria um novo tema com o comando:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yo liferay-theme
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento e Customização&lt;/strong&gt;: Personaliza os arquivos CSS, JavaScript, e templates dentro da estrutura do tema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy do Tema&lt;/strong&gt;: Faz o deploy do tema no teu portal Liferay.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Configuração de Páginas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Criando e Configurando Páginas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acesso ao Painel de Controle&lt;/strong&gt;: No Liferay, vai até ao Painel de Controle e seleciona "Páginas do Site".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Criação de Páginas&lt;/strong&gt;: Clica em "Adicionar Página" e escolhe o tipo de página (página em branco, com layout, etc.).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuração de Layout&lt;/strong&gt;: Personaliza o layout da página arrastando e soltando diferentes componentes (portlets).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aplicação de Temas&lt;/strong&gt;: Aplica o tema personalizado que criaste para alterar a aparência das páginas.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Uso de Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Templates de Exibição
&lt;/h3&gt;

&lt;p&gt;Templates de exibição permitem definir como o conteúdo será mostrado aos utilizadores. Eles são especialmente úteis para personalizar a aparência de blogs, wikis e outros aplicativos de conteúdo.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Criação de Template&lt;/strong&gt;: No Painel de Controle, vai até "Templates de Exibição" e clica em "Adicionar".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento&lt;/strong&gt;: Utiliza a linguagem Freemarker (ou Velocity) para definir a estrutura e o estilo do conteúdo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aplicação de Template&lt;/strong&gt;: Aplica o template de exibição ao conteúdo específico que desejas personalizar.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Criação de Portlets Customizados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que são Portlets?
&lt;/h3&gt;

&lt;p&gt;Portlets são componentes de interface que podem ser adicionados a páginas no Liferay. Eles são semelhantes a widgets e podem ser usados para mostrar diferentes tipos de conteúdo e funcionalidades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando um Portlet Customizado
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuração do Ambiente de Desenvolvimento&lt;/strong&gt;: Certifica-te de que tens o SDK do Liferay configurado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Criação do Portlet&lt;/strong&gt;: Utiliza o comando abaixo para criar um novo portlet:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;blade create &lt;span class="nt"&gt;-t&lt;/span&gt; mvc-portlet &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;diretório] &lt;span class="o"&gt;[&lt;/span&gt;nome-do-portlet]
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento&lt;/strong&gt;: Personaliza o código do portlet conforme necessário, utilizando Java para a lógica de backend e JSP (ou outras tecnologias de frontend) para a interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy do Portlet&lt;/strong&gt;: Faz o deploy do portlet no Liferay e adiciona-o à página desejada.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Uso de Style Books
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que são Style Books?
&lt;/h3&gt;

&lt;p&gt;Style Books são coleções de estilos que permitem definir visualmente a aparência de componentes e páginas dentro do Liferay. Eles facilitam a aplicação de uma identidade visual consistente em todo o portal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como Criar e Aplicar Style Books
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acesso ao Painel de Controle&lt;/strong&gt;: Vai até "Design" e seleciona "Style Books".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Criação de um Style Book&lt;/strong&gt;: Clica em "Adicionar Style Book" e define os estilos para diferentes elementos, como fontes, cores e espaçamentos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aplicação do Style Book&lt;/strong&gt;: Aplica o Style Book às páginas ou seções desejadas para garantir uma aparência consistente.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Uso de Fragmentos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que são Fragmentos?
&lt;/h3&gt;

&lt;p&gt;Fragmentos são pequenos blocos de conteúdo que podem ser combinados para criar páginas personalizadas. Eles permitem uma construção de páginas mais modular e flexível.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como Criar e Usar Fragmentos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acesso ao Painel de Controle&lt;/strong&gt;: Vai até "Conteúdo e Dados" e seleciona "Fragmentos".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Criação de Fragmentos&lt;/strong&gt;: Clica em "Adicionar Fragmento" e constrói o fragmento utilizando HTML, CSS e JavaScript.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adição de Fragmentos às Páginas&lt;/strong&gt;: Arrasta e solta os fragmentos nas páginas para construir layouts personalizados de forma rápida e fácil.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Uso de Client Extensions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que são Client Extensions?
&lt;/h3&gt;

&lt;p&gt;Client Extensions são uma nova forma de estender a funcionalidade do Liferay, utilizando tecnologias modernas como React, Angular, ou Vue.js. Elas permitem uma integração mais suave e flexível com o front-end moderno.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como criar e usar Client Extensions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuração do Ambiente de Desenvolvimento&lt;/strong&gt;: Configura o ambiente para desenvolvimento de Client Extensions, incluindo Node.js e o Liferay CLI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Criação de uma Client Extension&lt;/strong&gt;: Utiliza o comando abaixo para criar uma nova Client Extension:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liferay new client-extension
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento&lt;/strong&gt;: Desenvolve a Client Extension utilizando o framework de tua escolha (React, Angular, Vue.js, etc.), integrando com APIs do Liferay conforme necessário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy da Client Extension&lt;/strong&gt;: Faz o deploy da Client Extension no Liferay e adiciona-a às páginas ou aplicativos desejados.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Personalizar o Liferay pode parecer desafiador no início, mas com estas orientações, podes adaptar a plataforma para atender exatamente às necessidades da tua empresa. Desde a personalização de temas e configuração de páginas até o uso de templates, criação de portlets customizados, Style Books, Fragmentos e Client Extensions, o Liferay oferece uma ampla gama de ferramentas para criar um portal verdadeiramente único e eficiente.&lt;/p&gt;

&lt;p&gt;Nos próximos posts, irei aprofundar cada um destes tópicos, fornecendo tutoriais detalhados e exemplos práticos. Fica atento para aprender mais sobre como tirar o máximo proveito do Liferay!&lt;/p&gt;




&lt;p&gt;Espero que este guia te ajude a começar a personalizar o Liferay! Deixe um ❤️ e compartilha a tua experiência nos comentários ou pergunta se precisares de ajuda com alguma etapa do processo. Estamos aqui para ajudar!&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Introduction to Liferay: An Overview</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Tue, 12 Nov 2024 12:20:32 +0000</pubDate>
      <link>https://dev.to/cdfortes/introduction-to-liferay-an-overview-4a04</link>
      <guid>https://dev.to/cdfortes/introduction-to-liferay-an-overview-4a04</guid>
      <description>&lt;p&gt;Hello friends,&lt;/p&gt;

&lt;p&gt;Having worked with Liferay for a few years, I often get questions like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;But what is Liferay?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why use Liferay?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What does a Liferay developer do?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this post, I will try to introduce Liferay, show how to install the platform with Docker, and provide some resources for further learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Liferay?
&lt;/h2&gt;

&lt;p&gt;Liferay is an open-source enterprise portal platform that simplifies the creation of engaging digital experiences. It offers robust content management, collaboration, and personalization features, making it a popular choice for businesses looking to build powerful web portals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration Portal&lt;/strong&gt;: Liferay offers collaboration features like blogs, forums, wikis, and calendars that enable user interaction and collaboration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Management&lt;/strong&gt;: Allows efficient creation, publication, and management of content, including documents, web pages, images, and videos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Integration&lt;/strong&gt;: Facilitates integration with other applications and systems, allowing users to access information from different sources in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalization&lt;/strong&gt;: Provides advanced personalization features to tailor the user experience to individual preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Robust security features to protect sensitive data and ensure compliance with regulations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Designed to be scalable, allowing organizations of different sizes to implement solutions based on Liferay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Distributed under the GNU General Public License (GPL).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-Code/No-Code&lt;/strong&gt;: Recently adopting low-code or no-code approaches to make application development accessible to non-technical users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Liferay offers two main editions: &lt;strong&gt;Community Edition (CE)&lt;/strong&gt; and &lt;strong&gt;Liferay DXP (Digital Experience Platform)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Community Edition (CE)&lt;/strong&gt;: The free and open-source edition of Liferay, available for download and use under the GNU General Public License (GPL).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liferay DXP&lt;/strong&gt;: The enterprise edition of Liferay requiring a paid license, offering additional features aimed at organizations needing advanced capabilities, enterprise support, and stability guarantees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Due to its flexibility and extensibility, Liferay is often used by organizations to develop corporate portals, intranets, extranets, and other collaborative web solutions. Written in &lt;strong&gt;Java&lt;/strong&gt;, it can run on various application servers, making it a versatile choice for developing complex web platforms. The &lt;a href="https://learn.liferay.com/" rel="noopener noreferrer"&gt;official Liferay documentation&lt;/a&gt; is a great place to learn more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Liferay?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Small and Large Companies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Enables the creation of personalized digital experiences to meet specific business needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Ideal for both small businesses and large corporations, adapting to company growth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-Effective&lt;/strong&gt;: The Community Edition is free, making it ideal for businesses with limited resources. Companies can start with CE and upgrade to DXP as they grow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advantages Over Other CMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Headless Architecture&lt;/strong&gt;: Unlike traditional CMS, Liferay allows content to be published on any platform or device, offering greater flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with Other Technologies&lt;/strong&gt;: Robust APIs that facilitate integration with other tools and systems like CRM, marketing, and web analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Content Management&lt;/strong&gt;: Features like no-code content creation, workflow management, and content personalization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Competitors and Competitive Advantages
&lt;/h3&gt;

&lt;p&gt;Some competitors of Liferay include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WordPress&lt;/strong&gt;: Great for blogs and small sites but may lack the robustness needed for large corporate portals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drupal&lt;/strong&gt;: Highly flexible and powerful but can be more complex to set up and manage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Joomla&lt;/strong&gt;: Suitable for medium-sized sites but may not offer the same scale and level of customization as Liferay.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Get Started with Liferay?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Initial Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Assessment and Planning&lt;/strong&gt;: Evaluate your needs and plan how Liferay can meet your specific demands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installation and Configuration&lt;/strong&gt;: Install Liferay and configure the platform according to your needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training and Development&lt;/strong&gt;: Train your team to use Liferay and develop customized content and functionalities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration and Testing&lt;/strong&gt;: Integrate Liferay with other platforms and systems, and conduct tests to ensure everything works correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Test with Docker
&lt;/h3&gt;

&lt;p&gt;The quickest way to test the platform is by using &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step-by-Step Guide:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Docker&lt;/strong&gt;: Ensure Docker is installed on your machine. You can find detailed instructions on the &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker official site&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pull Liferay Image&lt;/strong&gt;: Run the following command to download the Liferay image from Docker Hub:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull liferay/portal:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access Liferay&lt;/strong&gt;: Open your browser and go to &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;. Follow the initial setup instructions for Liferay.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where to Learn More?
&lt;/h2&gt;

&lt;p&gt;Besides the &lt;a href="https://learn.liferay.com/" rel="noopener noreferrer"&gt;official Liferay documentation&lt;/a&gt;, check out the &lt;a href="https://liferay.dev/blogs" rel="noopener noreferrer"&gt;blog&lt;/a&gt; for the latest news. I also recommend the &lt;a href="https://liferay-community.slack.com/join/shared_invite/zt-1uv9fe139-fF5hhvG71QK~BKEeyBUftw#/shared-invite/email" rel="noopener noreferrer"&gt;official Slack&lt;/a&gt; and the &lt;a href="https://www.youtube.com/@liferay" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt;. For beginners, the &lt;a href="https://www.youtube.com/@simplifytecnologia" rel="noopener noreferrer"&gt;Simplify Tecnologia YouTube channel&lt;/a&gt; offers excellent videos on Liferay installation and configuration.&lt;/p&gt;




&lt;p&gt;Hopefully, you now have a basic understanding of what Liferay is and successfully installed Liferay using Docker. This is the starting point for exploring the vast possibilities Liferay offers in corporate web development.&lt;/p&gt;

&lt;p&gt;Share your experience in the comments or ask if you need help with any installation steps. We are here to help!&lt;/p&gt;




</description>
      <category>liferay</category>
      <category>webdev</category>
      <category>java</category>
    </item>
    <item>
      <title>Mas afinal o que é esse tal de Liferay?</title>
      <dc:creator>Carlos Fortes</dc:creator>
      <pubDate>Fri, 17 Nov 2023 12:39:50 +0000</pubDate>
      <link>https://dev.to/cdfortes/mas-afinal-o-que-e-esse-tal-de-liferay-4675</link>
      <guid>https://dev.to/cdfortes/mas-afinal-o-que-e-esse-tal-de-liferay-4675</guid>
      <description>&lt;p&gt;Olá amig@s,&lt;/p&gt;

&lt;p&gt;Trabalhando com o Liferay há alguns anos, recebo sempre perguntas do tipo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas o que é o Liferay? &lt;br&gt;
Por que utilizar Liferay? &lt;br&gt;
O que o programador Liferay faz?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neste post, tentarei dar uma introdução ao Liferay, mostrando como fazer uma instalação da plataforma com Docker e alguns recursos para saber mais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que é o Liferay?&lt;/strong&gt;&lt;br&gt;
O Liferay é uma plataforma de portal corporativa de código aberto que simplifica a criação de experiências digitais envolventes. Ele oferece recursos robustos de gerenciamento de conteúdo, colaboração e personalização, tornando-se uma escolha popular para empresas que buscam construir portais web poderosos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principais Características:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Portal de Colaboração:&lt;br&gt;
Oferece recursos de colaboração, como blogs, fóruns, wikis e calendários, que permitem a interação e a colaboração entre os usuários.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gestão de Conteúdo:&lt;br&gt;
Permite a criação, publicação e gerenciamento de conteúdo de maneira eficiente. Isso inclui documentos, páginas da web, imagens e vídeos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integração de Aplicações:&lt;br&gt;
Facilita a integração com outras aplicações e sistemas, permitindo que os usuários acessem informações de diferentes fontes em um único local.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personalização: &lt;br&gt;
Oferece recursos avançados de personalização para adaptar a experiência do usuário de acordo com preferências individuais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Segurança:&lt;br&gt;
Possui recursos robustos de segurança para proteger dados sensíveis e garantir a conformidade com regulamentações.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escalabilidade:&lt;br&gt;
Projetado para ser escalável, permitindo que organizações de diferentes tamanhos implementem soluções baseadas no Liferay.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Código Aberto:&lt;br&gt;
Distribuído sob a Licença Pública do GNU (GPL).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Low-Code/No-Code:&lt;br&gt;
Facilita o desenvolvimento de aplicações por usuários não técnicos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;O Liferay oferece duas edições principais: Community Edition (CE) e Liferay DXP (Digital Experience Platform).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Community Edition (CE):&lt;br&gt;
É a edição gratuita e de código aberto do Liferay. Pode ser baixada e usada sem custos, de acordo com os termos da Licença Pública Geral GNU (GPL).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Liferay DXP:&lt;br&gt;
É a edição empresarial do Liferay e requer uma licença paga. A DXP inclui funcionalidades adicionais e é destinada a organizações que precisam de recursos avançados, suporte empresarial e garantias de estabilidade.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Devido à sua flexibilidade e extensibilidade, o Liferay é frequentemente utilizado por organizações para desenvolver portais corporativos, intranets, extranets e outras soluções web colaborativas. Ele é escrito em Java e pode ser executado em diversos servidores de aplicação, tornando-o uma escolha versátil para o desenvolvimento de plataformas web complexas. A documentação oficial do Liferay é um ótimo lugar para se aprender mais sobre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por Que Usar o Liferay?&lt;/strong&gt;&lt;br&gt;
Empresas Pequenas e Grandes&lt;br&gt;
Flexibilidade: Permite criar experiências digitais personalizadas para atender às necessidades específicas de cada negócio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Escalabilidade:&lt;br&gt;
Ideal tanto para pequenas empresas quanto para grandes corporações, adaptando-se ao crescimento da empresa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custos Reduzidos:&lt;br&gt;
A Community Edition é gratuita, ideal para empresas com poucos recursos. As empresas podem iniciar com a CE e, conforme crescem, migrar para a DXP.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Vantagens em Relação a Outros CMS&lt;/strong&gt;&lt;br&gt;
Arquitetura Headless: Diferente de CMS tradicionais, o Liferay permite que o conteúdo seja publicado em qualquer plataforma ou dispositivo, oferecendo maior flexibilidade.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Integração com Outras Tecnologias:&lt;br&gt;
O Liferay oferece APIs robustas que facilitam a integração com outras ferramentas e sistemas, como CRM, marketing e análise web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gerenciamento de Conteúdo Avançado:&lt;br&gt;
Funcionalidades avançadas como criação de conteúdo sem código, gerenciamento de fluxo de trabalho e personalização de conteúdo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Concorrentes e Vantagens Competitivas&lt;/strong&gt;&lt;br&gt;
Alguns concorrentes do Liferay incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;WordPress:&lt;br&gt;
Excelente para blogs e sites pequenos, mas pode faltar a robustez necessária para grandes portais corporativos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Drupal:&lt;br&gt;
Muito flexível e poderoso, mas pode ser mais complexo de configurar e gerenciar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Joomla:&lt;br&gt;
Bom para sites de tamanho médio, mas pode não oferecer a mesma escala e nível de personalização que o Liferay.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Como Começar com o Liferay?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Passos Iniciais:&lt;br&gt;
Avaliação e Planejamento: Avalie suas necessidades e planeje como o Liferay pode atender às suas demandas específicas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instalação e Configuração:&lt;br&gt;
Instale o Liferay e configure a plataforma de acordo com suas necessidades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integração e Testes:&lt;br&gt;
Integre o Liferay com outras plataformas e sistemas, e realize testes para garantir que tudo funcione corretamente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Testar com Docker&lt;/strong&gt;&lt;br&gt;
A forma mais rápida de testar a plataforma é fazendo uso do Docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guia Passo a Passo:&lt;/strong&gt;&lt;br&gt;
Instalação do Docker: Certifique-se de ter o Docker instalado em sua máquina. Você pode encontrar instruções detalhadas no site oficial do Docker.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull da Imagem do Liferay:
Execute o seguinte comando para baixar a imagem do Liferay da Docker Hub:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull liferay/portal:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Acesso ao Liferay: Abra seu navegador e acesse &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;. Siga as instruções de configuração inicial do Liferay.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Muito Bom, Mas Onde Posso Aprender Mais Sobre?&lt;/strong&gt;&lt;br&gt;
Além da documentação oficial do &lt;a href="https://learn.liferay.com/w/dxp/index" rel="noopener noreferrer"&gt;Liferay&lt;/a&gt;, há o &lt;a href="https://liferay.dev/blogs" rel="noopener noreferrer"&gt;blog &lt;/a&gt;que traz sempre boas novidades. Recomendo também o &lt;a href="https://liferay-community.slack.com/join/shared_invite/zt-2qrjrge9d-Ex3aZNesXlNfgtRQjKnidQ#/shared-invite/email" rel="noopener noreferrer"&gt;slack oficial&lt;/a&gt; e o &lt;a href="https://www.youtube.com/@liferay" rel="noopener noreferrer"&gt;canal no YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Bom, ficamos por aqui, sendo que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você ficou com uma noção do que é o Liferay.&lt;/li&gt;
&lt;li&gt;Concluiu com sucesso a instalação do Liferay utilizando Docker.&lt;/li&gt;
&lt;li&gt;Ficou com um ponto de partida para explorar as vastas possibilidades que o Liferay oferece em termos de desenvolvimento web corporativo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compartilhe sua experiência nos comentários ou pergunte se precisar de ajuda com alguma etapa do processo de instalação. Estamos aqui para ajudar!&lt;/p&gt;

</description>
      <category>liferay</category>
      <category>desenvolvimentoweb</category>
      <category>portalcorporativo</category>
      <category>java</category>
    </item>
  </channel>
</rss>
