The Magnolia Campaign Publisher module allows you to define campaigns consisting of pages, assets and other resources within Magnolia. The module provides a status for each campaign and a way to review each included resource. You can publish the campaign as a whole instead of having to publish each resource separately.


See Installing a module on how to install the bundle using JARs or Maven dependencies.

Magnolia Campaign Publisher module is not bundled with Magnolia. You can download it from our Nexus repository or include it in your custom webapp by adding following Maven dependency to your pom.



To uninstall a module, remove the module JAR file from the /WEB-INF/lib folder and restart Magnolia.

(warning) However, this is rarely enough. Modules add and modify configuration during installation. The use of a module also changes content. Removing all of these changes is difficult without knowing the installation tasks in detail.

To test a module, use the embedded Derby database and take a backup of your repositories folder. Install the module and try it. When you are done testing, remove the module JAR and restore the repositories folder from the backup. This way you can go back to square one.

We also recommend that you segregate the development and production environments. Take regular backups for disaster recovery so you can revert to a prior state in a routine fashion.


The module is configured under Configuration > /modules/campaign-publisher.

Node name
















Adding a campaign

To create, rename or delete a campaign:

  1. Open the Campaign Publisher app.
  2. Click Add campaign and
  3. Name the campaign and save.

 Later, when the campaign is published and no longer needed, you can delete or archive it. An archived campaign is hidden from the view.

You can also create a campaign on the fly. Start by selecting the content you wish to add to the campaign, for example in the Pages app.

Adding content to a campaign

To add content to a campaign:

  1. Open the app where the content is managed such as Pages, Assets, Contacts, Resources, Templates or Configuration.
  2. Select the content and click Add to campaign.

You can select multiple pieces of content at the same time. Hold down the Cmd or Ctrl key and click to select the items you want to add.

Including referenced content

Check the Dependencies box to include any resources referenced from the selected content. This option is available only for Pages by default but you can enable it for your custom apps. Referenced content will include all assets and other content that is referenced by the page in the campaign. Such content is recognized as referenced by the app. You can refresh such content in the campaign later and remove it automatically when it is no longer referenced by the page that brought it in originally or any other page in the campaign.

Campaign actions


Various actions listed above are available to those who wish to manage campaigns.

It is possible to merge multiple campaigns together using "Merge campaigns" action. Just select campaigns that need to be merged and click on the action. Duplicates will be removed automatically.

If your campaign includes referenced content and you are not sure that this content is up to date, click on "Update dependencies" to refresh all the dependent content. Warning will be shown should such action result in removal of no longer referenced content.

Sometimes, specially when creating a lot of new content or performing big restructuring of the site, it is possible that some of the content from the campaign can't be published because it's parent content is not published either. Use "Include unpublished content" action to automatically include all such parent items, should there be any, in the campaign to ensure successful publishing of all content in correct location. When doing so, please ensure that the included parent pages are reviewed and publishable before triggering publishing to ensure only desired content is made public.

Use "Delete" action to remove the campaign. Upon deletion, content in the campaign (pages, assets and other resources) will NOT be deleted.

Use "Publish" action to trigger publishing of all content in the campaign. Upon publishing, all content that can be published will be made public. Depending on your configuration, workflow might be triggered instead of direct publishing of the content.

Campaign item actions

Should campaign grow too big, it is possible to split it, just by selecting items in the campaign and clicking "Split campaign" action. New campaign will be created with selected items and those will be removed from the current campaign. New campaign will be named same as the original one but with numbered index.

Use "Preview" action to preview content of the campaign. When used for Pages, action will open current page in the preview app. When used for any other content, such content will be opened in the edit dialog of the app appropriate for previewed content.

Use "Review" action to mark content in the campaign as reviewed. The default, "unreviewed" (red) status will be changed to "reviewed" (green) upon clicking on the action for all selected content. Should the content be modified after the review, status will be automatically modified by Magnolia to "modified" (amber). Upon marking all content in the campaign as reviewed, whole campaign is marked as reviewed. If campaign contains modified or unreviewed content, it's status is always unreviewed.

Use "Un-review" action to revert accidentally set review status on content.

Use "Delete" action to remove content from the campaign. Removal of content from the campaign will NOT result in the deletion of the content. It is merely removed from the campaign.


Content can be part of multiple campaigns at the same time.

Adding Add to campaign action to custom apps

To add action for content inclusion in your custom app, simply add following to list of actions.





And don't forget to also add it to appropriate actionbar section/group.


#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))