Skip to content

Content

CMS pages and blocks

Content, Pages and Content, Blocks are ordinary lists. See Working with lists.

Both have a quick-edit drawer, so clicking a row opens a panel with the common fields rather than the full edit screen. Use it to change a title, a URL key or a status without leaving the list. Open the full screen from the row's Edit action when you need the content itself.

The edit screens can be shown as one long form or as tabs. Two settings control that in Configuration under Nebula, Nebula Admin Theme, Settings: Enable CMS Page Edit Tabs and Enable CMS Block Edit Tabs.

The content field itself is the rich text editor described in Working with forms, including the HTML view.

Landing pages

Content, Landing Pages holds campaign pages that have their own address, their own content and their own store scope, separate from CMS pages.

Press New Landing Page to create one. The fields are grouped as follows, either as panels or as tabs depending on Enable Landing Page Edit Tabs in Configuration.

Group What it holds
General Title, URL Key, Enabled, Store View. Store View takes more than one store view
Content The page content, in the rich text editor
Products This page shows chooses content only, products only, or both. Below it you search for products and add them. They are listed in the order you added them, and the only way to move one is to remove it and add it again
Hub A List Heading and a list of other landing pages, added the same way, turning this page into an index of them. Left empty, the heading reads Explore these pages
Search Engine Optimization Meta Title, Meta Description, Meta Keywords, Robots and the canonical address
Google Preview Shows how the meta title, URL and meta description would read in a search result, updating as you type them
Campaign Window Live From and Live Until dates
Design The page layout

URL Key is the address the page answers on. Two pages in different store views may use the same key. A key that clashes with a category, a product or a CMS page in the same store is refused when you save.

Robots offers INDEX, FOLLOW, NOINDEX, FOLLOW, INDEX, NOFOLLOW and NOINDEX, NOFOLLOW. Canonical can point at this page, at another address you type, or be left off entirely.

Live From left empty means the page goes live as soon as it is enabled. After Live Until the URL stops resolving. Leave Live Until empty for a campaign with no end.

Acting on several pages at once

Tick rows in the list and four actions appear in the toolbar, acting across the selection. Selection, the count and the confirmation box behave as they do on every list, described in Working with lists.

Action What it does
Enable Switches every selected page on
Disable Switches every selected page off
Duplicate Writes one copy per selected page. The title gains (copy), the URL key gains -copy- and the original page's ID, and the copy arrives switched off. Content, layout, product settings, hub, SEO fields, campaign window and store views are carried over. Rename the copy and its URL key before you enable it
Delete Removes every selected page. It asks in its own words: Delete the selected landing pages? Their URLs stop resolving immediately.

The other three use the generic confirmation built from the action's label and the number of rows selected.

A row that cannot be processed is counted and skipped rather than stopping the batch, and the list reports how many were skipped. With nothing ticked you get No landing pages were selected. and nothing happens.

All four need the Landing Pages privilege, Nebula_LandingPage::manage, listed in ACL and events.

The setup drawer

How to build this page opens a drawer listing the steps in order, with a count of how many essentials are done. Each step names the tab it belongs to and gives a one-line hint. Steps you have completed are ticked, and steps that are not required are marked optional.

Click a step and the drawer takes you to the tab it names. Nothing is lost by saving before you have finished every step.

Marketing, Email Header and Footer edits the pieces shared by every transactional email. The screen is split: the markup on the left, a live preview on the right.

Control What it does
Source The template markup
Styles The template's own styles
Custom CSS Extra styles for this template
Visual Edit the content directly, styled with the store's email styles
Insert variable Inserts a store or order value at the cursor
Insert widget Inserts a widget at the cursor
Insert image Inserts a picture from the media library
Store view Which store view you are editing. The header and footer are stored per store view, so what you save applies to the store view shown here. Choose it before you start typing. Switching it reloads that store view's header and footer, and asks first if you have unsaved changes
Force theme Render the preview with a chosen theme instead of the store's own
Base CSS Which styles the preview loads. Theme email.css or Theme + Custom
Preview data Sample data, or a real record you choose
Desktop, Mobile The preview width
Reset to default Meant to put the shipped version back for the store view shown, immediately and without asking. See the warning below
Save Writes your changes

There is no Delete here. A header or footer partial is reverted, not removed. Delete belongs to the template editor.

Reset to default does not work in this build

The button posts to nebulaemail/partial/reset, and no controller ships for that route. Pressing it raises an error toast and changes nothing. To go back to the shipped header or footer for a store view, clear that store view's Email Header Template or Email Footer Template choice in the design configuration instead. Nebula saves your edits as a store-scoped override behind those two settings, so clearing the setting for the scope puts the shipped version back.

An Unsaved changes chip appears in the toolbar as soon as you edit, and leaving the page while it is showing raises the browser's own warning.

Custom CSS is a working pane, not a second stylesheet

Set Base CSS to Theme + Custom before you type in it. When you save, whatever is in the pane is appended to Styles and the Custom CSS pane is emptied. Your rules are still there, at the bottom of Styles. If Base CSS is left at Theme email.css, what you typed into Custom CSS is not saved at all.

The preview is close but not exact. Variables, layout blocks and sender data are simulated, so treat it as a guide and send a real test before a campaign.

Switching to Visual on a template built from tables will reformat that layout. Your markup is left alone until you actually make an edit in Visual mode, so you can look without committing.

Email templates

Marketing, Email Templates lists the transactional templates. It has a quick-edit drawer, so clicking a row lets you change the name and subject without opening the full editor.

A row's Edit action opens the same split editor as the header and footer, in template mode. The list's add button opens it empty. On top of everything described above it adds two fields, Template Name and Subject, and keeps the same Source, Styles, Custom CSS and Visual panes, insert buttons, preview and store view picker.

A template body is the same for every store view, so the store view picker here changes only what the preview is rendered against.

Set Preview data to Real record to search for an actual order or customer and render the template against it. You only get records your role is allowed to see, so a role without order access gets an empty picker rather than an error.

Delete asks Delete this email template? and returns you to the list once it has run.

The editor's routes, for developers

One route serves all three editing modes. nebulaemail/editor opens the template editor, mode=header and mode=footer switch it to the shared partials, and id selects a saved template, as in nebulaemail/editor/id/{id}. Every controller below is gated on Magento_Email::template.

Endpoint Method What it is for
nebulaemail/editor GET The editor page itself
nebulaemail/record/search?entityType=&q= GET Backs the Real record picker. An unknown or missing entityType returns an empty result rather than an error, and so does a caller who lacks the entity's own ACL. Magento_Email::template alone is not enough to search orders or customers
nebulaemail/preview/render POST Renders the preview from a PreviewRequest JSON body
nebulaemail/preview/sendtest POST Sends the test email
nebulaemail/template/save POST Saves the template, or the partial when the mode is header or footer
nebulaemail/template/delete POST Deletes a saved template

The four POST endpoints take a raw JSON body and carry the form key inside that body, which they validate themselves, because Magento's request-param CSRF check does not see a raw JSON body.

The editor's config blob also carries a resetUrl pointing at nebulaemail/partial/reset. No controller answers it. Do not build against it.

Newsletters

Three lists under Marketing cover newsletters.

List Columns you get Row actions
Newsletter Templates ID, code, subject, sender, type, added and modified dates Edit, Queue Newsletter, Preview
Newsletter Queue Subject, status, start and finish times, sent and total subscriber counts Edit
Newsletter Subscribers Email address, status, store view, when the status last changed View Customer, Unsubscribe

Preview opens the rendered newsletter in a window of its own so you can see it as a recipient would. Queue Newsletter starts the sending flow from that template.