...
Note |
---|
Backend documentation need to be added |
Clicking Duplicate from dropdown
...
Controller for displaying form to duplicate existing page
...
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;
}
} |
Clicking duplicate
vendor/creativestyle/magesuite-cms-duplicate/Controller/Adminhtml/Duplicate/Duplicate.php:43
Code Block |
---|
class Duplicate extends \Magento\Backend\App\Action { public function execute() { $data = $this->getRequest()->getPostValue(); /** @var \Magento\Framework\Controller\Result\Json $result */ $result = $this->resultJsonFactory->create(); if ($data) { try { $newPage = $this->pageDuplicator->duplicate($data['page_id'], $data['title'], $data['identifier'], $blockData); } ...... } return $result; } } |
Duplicate page - duplicate blocks and assign to components
vendor/creativestyle/magesuite-cms-duplicate/Service/PageDuplicator.php:39
Code Block |
---|
class PageDuplicator
{
public function duplicate($oldPageId, $newTitle, $newIdentifier, $blocksData = [])
{
$oldPage = $this->pageRepository->getById($oldPageId);
$duplicatedPage = clone $oldPage;
.....
if (!empty($blocksData)) {
$duplicatedBlocks = $this->duplicateBlocks($blocksData);
$this->assignDuplicatedBlocksToComponents($duplicatedBlocks, $duplicatedPage);
}
$duplicatedPage->save();
return $duplicatedPage;
}
protected function duplicateBlocks(array $blocks)
{
$this->validateIfNewBlocksIdentifiersDoesNotExist($blocks);
foreach ($blocks as &$block) {
$blockEntity = $this->blockRepository->getById($block['blockId']);
$blockEntity->setId(null);
$blockEntity->setIdentifier($block['blockIdentifier']);
$blockEntity->setTitle($block['blockTitle']);
$blockEntity->save();
$block['newBlockId'] = $blockEntity->getId();
}
return $blocks;
}
protected function assignDuplicatedBlocksToComponents($duplicatedBlocks, $oldPage)
{
$oldLayoutUpdateXml = $oldPage->getLayoutUpdateXml();
$oldComponentsConfiguration = $this->xmlToComponentConfigurationMapper->map($oldLayoutUpdateXml);
foreach ($duplicatedBlocks as $newBlock) {
foreach ($oldComponentsConfiguration as &$component) {
if ($component['id'] != $newBlock['componentIdentifier']) {
continue;
}
$component = $this->mapNewBlockDataToComponent($newBlock, $component);
}
}
$newLayoutUpdateXml = $this->componentConfigurationToXmlMapper->map($oldComponentsConfiguration, $oldLayoutUpdateXml);
$oldPage->setLayoutUpdateXml($newLayoutUpdateXml);
}
} |
vendor/creativestyle/magesuite-content-constructor-admin/Repository/Xml/ComponentConfigurationToXmlMapper.php:47
Code Block |
---|
class ComponentConfigurationToXmlMapper
{
/**
* Maps components configuration to corresponding XML Layout format
*/
public function map($components, $existingXml = '')
{
.....
}
} |
Frontend
No frontend to document.
...