Skip to content

Usage

Building a campaign

  1. Create a new NXPopup module and give it an admin title.
  2. On the Content tab, write the heading and body. Wrap words in <span> to highlight them.
  3. On the CTA Button tab, set the button text and URL. The button only appears when both are filled in.
  4. On the Display Behaviour tab, choose the audience and the open trigger.
  5. On the Dismissal tab, set how long a dismissal lasts and which close actions count.
  6. Assign the module to the relevant menu items, publish, and test in a private window.

Dismissal

A dismissal writes a timestamp to browser storage. While that timestamp is inside the Dismissal Period, the popup stays hidden for that visitor.

Which actions count

Each close path is switched independently, so "closing" and "dismissing" are not the same thing:

Close pathDefaultReasoning
Close buttonRecords a dismissalAn unambiguous "no thanks".
Escape keyRecords a dismissalEqually deliberate.
CTA clickRecords a dismissalThey acted; do not ask again.
Backdrop clickDoes not record a dismissalEasy to hit by accident.

The backdrop default is the one worth understanding. With a 10-day period, a single stray click outside the popup would otherwise hide your campaign from that visitor for ten days. Turn it on only if you treat clicking away as a real decision.

Resetting dismissal for everyone

Change the Storage Key Suffix to any new value — spring-2026, v2, today's date. The key changes, previous dismissals no longer match, and every visitor sees the popup again.

This is the correct way to relaunch a campaign. Editing the content alone does not reset dismissals.

Choosing a storage driver

DriverDismissal lastsUse when
Local storageAcross visits, up to the dismissal periodNormal campaigns.
Session storageUntil the tab closesShow once per visit, regardless of the period.

Neither uses cookies, and neither is transmitted to your server.

Multiple tabs

If a visitor dismisses the popup in one tab, other open tabs respect that immediately — a tab still waiting on its delay, scroll, or exit trigger will not open the popup afterwards. A popup already open in another tab is left alone rather than closing under the reader.

This applies to local storage, which is shared between tabs. Session storage is per-tab by design.

Running several popups

Each module instance is a separate campaign. Duplicate the module, change the content and targeting, and assign it to different menu items.

Instances are isolated automatically: DOM IDs and storage keys are scoped by module ID, so dismissing one campaign has no effect on another.

Two popups on the same page

Nothing prevents two eligible modules from opening at once, and there is no display queue. Use menu assignment, distinct triggers, or different page-view thresholds to keep campaigns apart.

Testing a campaign

Popups are designed not to reappear, which makes them awkward to test. Options:

  • Use a private window for each test. Storage is discarded when you close it.
  • Set Dismissal Period to 0 while building. The popup then opens on every page load. Remember to set it back.
  • Change the Storage Key Suffix to clear your own dismissal along with everyone else's.
  • Clear site data for your domain in the browser's developer tools, under Application → Storage.

To test the page-view gate, remember that a private window starts the count from zero.

Troubleshooting

The popup never appears

Work down the stages in order:

  1. Is the module published and assigned to this menu item?
  2. Is the position one your template actually renders?
  3. Does the Audience include you? Log out, or switch to a private window.
  4. Have you already dismissed it? Clear site data or change the storage key suffix.
  5. Is the page-view threshold higher than the number of pages you have viewed?
  6. For the scroll trigger, is the depth reachable on this page?
  7. For exit intent on a laptop, move the pointer up out of the window — not sideways.
  8. Check the browser console for a 404 on /media/mod_nxpopup/js/mod-nxpopup.js.

The popup appears for the wrong visitors

Check the Caching setting on the Advanced tab. Audience targeting requires No caching, because Joomla caches module output per module rather than per visitor.

The CTA button is missing

Both Button Text and Button URL must be set. Also confirm the URL uses http, https, mailto, or tel — other schemes are rejected.

Formatting disappears from the body

The body is filtered on save using your site's Text Filters (Global Configuration). Check the filter set for the user group that edited the module. Raising it there is the correct fix.

Markup disappears from the title

Only <span> survives in the title field, by design. Put richer markup in the body instead.

The popup is cut off on a small screen

The card shrinks to fit and its content scrolls. If it still clips, check for template CSS targeting dialog elements, and try switching Render Popup Border off, which reclaims 54px of vertical space.