https://github.com/magesuite/cms-duplicate
This module provides an easy way of duplicating CMS pages in the admin panel.
Installation
This module is part of MageSuite metapackage
Installation if metapackage is not used:
composer require "creativestyle/magesuite-cms-duplicate" ^2.0.0
Admin settings
In order to duplicate CMS page select Duplicate
from the Action dropdown:
Fill fields in the modal and Save the page.
Settings:
Name | Note |
---|---|
New page identifier | Please provide new identifier (url key) for duplicated page. New identifier must be unique and cannot be used already by any other page. |
New page title | Please provide new title for duplicated page. Title does not have to be unique. |
Backend
Backend documentation need to be added
Clicking Duplicate from dropdown - controller for displaying form to duplicate existing page
vendor/creativestyle/magesuite-cms-duplicate/Controller/Adminhtml/Duplicate/Form.php:38
class Form extends \Magento\Backend\App\Action { public function execute() { ..... $block = $layout->createBlock(\MageSuite\CmsDuplicate\Block\Adminhtml\Duplicate\Form::class) ->toHtml(); ..... $resultRaw->setContents($block); return $resultRaw; } }
Template for form for new (duplicated) page
vendor/creativestyle/magesuite-cms-duplicate/view/adminhtml/templates/form.phtml
<?php /** @var \MageSuite\CmsDuplicate\Block\Adminhtml\Duplicate\Form $block */ $page = $block->getPage(); ?> <div id="duplicate-page-modal"> <form method="post" id="duplicate-cms-page-form" action="<?php echo $block->getUrl('cmspageduplicate/duplicate/duplicate') ?>"> ........... <?php $blocks = $block->getBlocksToDuplicate(); ?>
Getting page which we want to duplicate by page_id
vendor/creativestyle/magesuite-cms-duplicate/Block/Adminhtml/Duplicate/Form.php:47
class Form extends \Magento\Backend\Block\Template { protected $_template = 'MageSuite_CmsDuplicate::form.phtml'; public function getPage() { if (!$this->cmsPage) { $pageId = $this->getRequest()->get('page_id'); $this->cmsPage = $this->pageRepository->getById($pageId); } return $this->cmsPage; } public function getBlocksToDuplicate() { $page = $this->getPage(); $layoutXml = $page->getLayoutUpdateXml(); $components = $this->xmlToComponentConfigurationMapper->map($layoutXml); $blocks = []; foreach ($components as $component) { ..... $blockData = $this->getBlockData($component); $blocks[] = $blockData; } return $blocks; } }
Frontend
No frontend to document.