Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

Note

Backend documentation need to be added

Clicking Duplicate from dropdown - controller for form to duplicate existing page

vendor/creativestyle/magesuite-cms-duplicate/Controller/Adminhtml/Duplicate/Form.php:38
Code Block
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
Code Block
<?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
Code Block
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.

...