rocketweb/module-cms-import-export

CMS import and export CLI command extension that allows syncing CMS blocks & pages between environments

Installs: 2 377

Dependents: 0

Suggesters: 0

Security: 0

Stars: 5

Watchers: 1

Forks: 2

Open Issues: 0

Type:magento2-module

1.2.0 2025-01-28 12:46 UTC

This package is auto-updated.

Last update: 2025-03-28 14:37:32 UTC


README

A tool to manage CMS content (both blocks & pages) being imported/exported between environments using the repository. This tool comes handy for build and maintenance projects.

Ideas for using this:

  • allowing FED team to create a CMS block/page in admin but then modify the HTML content using proper IDEs that allow auto-complete & code-styling
  • allowing simpler deployments since there is no manual copy/paste of CMS data needed
  • allowing the client to modify staging content and having it ready for deployment
  • having an easy way to sync up production env to staging/dev/local by exporting on production and importing on staging/dev/local

Installation

Using composer:

composer require rocketweb/module-cms-import-export

Then enable module:

bin/magento module:enable RocketWeb_CmsImportExport

Once the tool is installed, we have two workflows, depending on what we are trying to do.

Export

Usage:

php bin/magento cms:dump:data [options]

Description:
Dumps cms pages/blocks to var/sync_cms_data for further import

Options:
-t, --type=TYPE                Which type are we dumping - block/page/all
-i, --identifier[=IDENTIFIER]  identifier to process (one or CSV list)
-a, --importAll                Flag to import all files
-r, --removeAll                Flag to remove all existing data

As you can see from the options, we need to define:

  • type - which can be CMS block, CMS page or both - required
  • identifier - either a CMS block or CMS page identifier - optional

With the combination of these two, we can export:

  • all CMS content (using --type=all)
  • all CMS pages (using --type=page)
  • all CMS blocks (using --type=block)
  • specific CMS page or pages (using --type=page --identifier=about-us.html,no-route)
  • specific CMS block or blocks (using --type=block --identifier=who-are-we,homepage-carousel)

CMS Page identifier is Url Key! Because of that, it can have .html suffix - it depends on what is set in the Magento Admin CMS Edit Page. Use the actual value from CMS Edit Page - Url Key!If the CMS Page Url Key has .html suffix, then the file %%IDENTIFIER%% will be: url_key_html.html (but for export or import, you still use the value from Url Key)

Once you execute the command, you will get the following folder structure:

var/sync_cms_data/cms/
- blocks
    - %%IDENTIFIER%%.html => contains the block HTML
    - %%IDENTIFIER%%.json => contains title, is_active, stores information
- pages
    - %%IDENTIFIER%%.html => contains the page HTML
    - %%IDENTIFIER%%.json => contains title, is_ative, page_layou, content_heading

You can modify the HTML directly in your editor which should give you more flexibility.

When you are done, commit the files (html & json) to the repository.

Import

Usage:
php bin/magento cms:import:data [options]

Description:
Import cms pages/blocks from var/sync_cms_data

Options:
-t, --type=TYPE                Which type are we importing - block/page/all
-i, --identifier[=IDENTIFIER]  identifier to process (one or CSV list)
-a, --importAll                Flag to import all files
-s, --store[STORE_CODE]        Store code to process only pages/blocks specific to this store

This command works by using files in var/sync_cms_data/cms/ path. As you can see from the options, we need to define:

  • type - which can be CMS block or CMS page - required
  • identifier - either a CMS block or CMS page identifier - optional There are optional parameters:
  • importAll - when identifiers not specified we'll import all blocks or pages
  • store - store code (like default) to import block(s)/pages(s) only for specific store With the combination of these two, we can import:
  • all CMS pages (using --type=page and importAll)
  • all CMS blocks (using --type=block and importAll)
  • specific CMS page or pages (using --type=page --identifier=about-us,homepage-new)
  • specific CMS block or blocks (using --type=block --identifier=who-are-we,homepage-carousel)
  • specific CMS page by store (using --type=page --identifier=about-us-default --store=default) Once you execute the command, the content will be created/updated in Magento Admin. By executing php bin/magento cache:flush you should be able to see the updated CMS content on frontend also!