Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

magnolia-react-templating

Package Overview
Dependencies
Maintainers
0
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

magnolia-react-templating

Use React JSX Components in Magnolia templates (e.g. Freemarker).

  • 3.1.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
47
increased by38.24%
Maintainers
0
Weekly downloads
 
Created
Source

Magnolia-React-Templating

This small utility allows you to use React JSX components directly in Magnolia templates (e.g. Freemarker).

How does it work

To get started, you should set up a frontend project with npx create-react-app.

The main entry point for your application is src/index.js. Please remove the default content and replace it with the content below. This file registers all React components which you want to use within Magnolia templates.

import { render } from "magnolia-react-templating";

import "./index.css";

import Layout from "./components/Layout";
import Headline from "./components/Headline";
import Text from "./components/Text";
import Image from "./components/Image";

render({ Layout, Headline, Text, Image }, document.getElementById("root"));

Now adapt your page template in Magnolia (e.g. backend/light-modules/react-demo/templates/pages/ContentPage.ftl), so the React bundle is loaded into your page. Here's an example:

<!DOCTYPE html>
<html>
  <head>
    [@cms.page /]
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>${content.windowTitle!content.title!}</title>
  </head>
  <body>
    [#-- Create a root container for React. --]
    <div id="root">
      [#-- Put JSX into a script-tag below the root --]
      <script type="text/jsx">
        <Layout>
          [@cms.area name="main"/]
        </Layout>
      </script>
    </div>
    <script src="http://localhost:3000/static/js/bundle.js"></script>
    <script src="http://localhost:3000/static/js/0.chunk.js"></script>
    <script src="http://localhost:3000/static/js/1.chunk.js"></script>
    <script src="http://localhost:3000/static/js/main.chunk.js"></script>
  </body>
</html>

And here is an example on how to wire up a Freemarker template with JSX code (e.g. backend/light-modules/react-demo/templates/components/Image.ftl):

[#assign image = damfn.getAsset(content.image)]
[#assign imageLink = image.link]
<Image
  url="${imageLink}"
  alt="${content.caption!'image'}"
  rounded={${(content.rounded!false)?c}}
/>

The corresponding React component looks like this (e.g. frontend/src/components/Image.js):

import React from "react";

export default Image({ url, alt, rounded })(
  <figure>
    <img className={rounded ? "is-rounded" : ""} src={url} alt={alt} />
  </figure>
);

Keywords

FAQs

Package last updated on 01 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc