Import and export templates help please
At the bare minimum you need commands for saving the templates and opening a modal that shows the saved templates, and to handle loading a template onto the editor. To save a template using local storage you can use something like To open a modal with the templates you can use To load a template you can use something...
Read full answer below ↓Question
Good morning, please I need help to create templates and then load them, I really cannot do anything, I want to be able to save templates, later load them, I have been days without trying, I am new to programming I have followed everything to the letter , and really the only thing that I am missing are the templates please if you can help me, I will be very grateful to you.
const LandingPage = { html:<!DOCTYPE HTML><html></head><body><h1>test message</h1></body></html>`,
css: null,
components: null,
style: null,
};
const editor = grapesjs.init({
components: LandingPage.components || LandingPage.html,
// We might want to make the same check for styles
style: LandingPage.style || LandingPage.css,
showOffsets: 1,
noticeOnUnload: 0,
container: '#gjs',
height: '100%',
dragMode: 'absolute',
fromElement: true,
allowScripts: 1,
storageManager: {
id: 'gjs-', // Prefix identifier that will be used inside storing and loading
type: 'local', // Type of the storage
autosave: false, // Store data automatically
autoload: false, // Autoload stored data on init
stepsBeforeSave: 1, // If autosave enabled, indicates how many changes are necessary before store method is triggered
storeComponents: true, // Enable/Disable storing of components in JSON format
storeStyles: true, // Enable/Disable storing of rules in JSON format
storeHtml: true, // Enable/Disable storing of components as HTML string
storeCss: true, // Enable/Disable storing of rules as CSS string
urlStore: '/plant',
urlLoad: '/plant',
params: {}, // For custom values on requests
},
plugins: ['gjs-preset-webpage', 'grapesjs-tui-image-editor','gjs-component-countdown','grapesjs-lory-slider',
'grapesjs-tabs','grapesjs-tooltip','grapesjs-custom-code','gjs-social','gjs-modal','grapesjs-typed',],
pluginsOpts: {
'gjs-preset-webpage': {},
'grapesjs-tui-image-editor': { some: 'value' },
'gjs-component-countdown': {},
'grapesjs-lory-slider': {},
'grapesjs-tabs': {},
'grapesjs-tooltip': { some: 'value' },
'grapesjs-custom-code': {},
'gjs-social': {},
'gjs-modal': { 'includeExternalLinks' : true },
'grapesjs-typed': {},
}
});
// Add the button
editor.Panels.addButton('options', [{
id: 'save-db',
className: 'fa fa-floppy-o icon-blank',
command: 'save-db',
attributes: {title: 'Save DB'}
}]);
// Add the command
editor.Commands.add
('save-db', {
run: function(editor, sender)
{
sender && sender.set('active'); // turn off the button
editor.store();
}
});
editor.on('storage:load', function(e) { console.log('Loaded ', e);});
editor.on('storage:store', function(e) { console.log('Stored ', e);});
`
I don't know what to do to do to create a button where the created templates are displayed or where they are saved or anything :( I want everything to be locally on my computerAnswers (1)
At the bare minimum you need commands for saving the templates and opening a modal that shows the saved templates, and to handle loading a template onto the editor.
To save a template using local storage you can use something like
let template = ""; //Use this to set the template name, you could set this value to listen to an input field
editor.Commands.add('save-template', {
run: function(editor, sender)
{
sender && sender.set('active'); // turn off the button
let components = editor.getComponents();
let style = editor.getStyle()
let templateData = {
components: components,
style: style
};
localStorage.setItem(template, JSON.stringify(temlateData));
}
});
To open a modal with the templates you can use
const modal = editor.Modal;
cmd.add('open-templates-modal', {
run: function(editor, sender)
{
sender && sender.set('active'); // turn off the button
modal.setTitle('<div>Choose Template</div>');
modal.setContent(/*Place your templates here*/);
modal.open();
modal.getModel().once('change:open', function () {
//do stuff before modal open
});
}
});
To load a template you can use something like
//given that each template is represented by an element with class gjs-template
document.getElementsByClassName('gjs-template').addEventListener('click', e => {
//given that each element representing a template has a data attribute that is it's key in local storage
let templateData = JSON.parse(localStorage.loadItem(e.currentTarget.dataset.name));
editor.setComponents(templateData.components);
editor.setStyle(templateData.style);
modal.close();
});
All you have to do now is find a way of making the visual representation of the templates i.e. what goes in modal.setContent.
Related Questions and Answers
Continue research with similar issue discussions.
Issue #4273
How to trigger the 'Import Template (modal)' on page load
Hello, Please i'm in need of the logic on how to the import template modal on initialization of the page... I'm using the newsletter preset...
Issue #3223
FEAT: Create the canvas from a URL
I've been playing with GrapesJS and trying to integrate it into a Symfony 5 project. In particular I want to be able to edit templates in t...
Issue #429
custom component save
hi @artf sorry to be a pain i really didn't want to open a issue ticket but i have been stuck for days trying to achieve my end goal i have...
Issue #1178
Want to replace wrapper div
Hello artf, I want to replace wrapper div, for example : When we create the newsletter template, wrapper div already exists there. On impor...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins →Premium plugins ship with support, regular updates, and production-ready features — save days of integration work.
Browse premium plugins →Related tutorials
In-depth guides on the same topic.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Embed GrapesJS in Your SaaS: A Weekend Guide
Embed GrapesJS in your SaaS and ship a white-label page builder over a weekend. Honest tradeoffs, real code, and the plugins that close the UX gap.
Tutorial
GrapesJS vs Webflow vs Builder.io vs Puck: Which Visual Builder to Choose in 2026
A practitioner's 2026 comparison of GrapesJS, Webflow, Builder.io, and Puck — pricing, AI features, lock-in, and a one-line rule for picking the right one
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.