Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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 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.

  • No labels