Skip to content

Commit 1ddb601

Browse files
ENGCOM-7033: 26758 improved cms page custom layout update logic #27131
- Merge Pull Request #27131 from sergiy-v/magento2:26758-cms-page-specific-layout-improvements - Merged commits: 1. 53c78d5
2 parents 5a9fcab + 53c78d5 commit 1ddb601

File tree

5 files changed

+73
-2
lines changed

5 files changed

+73
-2
lines changed

app/code/Magento/Cms/Model/Page/CustomLayout/CustomLayoutManager.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ public function applyUpdate(PageLayout $layout, CustomLayoutSelectedInterface $l
147147
}
148148

149149
$layout->addPageLayoutHandles(
150-
['selectable' => $this->sanitizeIdentifier($page) .'_' .$layoutSelected->getLayoutFileId()]
150+
['selectable' => $this->sanitizeIdentifier($page) .'_' .$layoutSelected->getLayoutFileId()],
151+
'cms_page_view'
151152
);
152153
}
153154
}

dev/tests/integration/testsuite/Magento/Cms/Controller/PageTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,20 @@ public function testCustomHandles(): void
8585
$handles = $layout->getUpdate()->getHandles();
8686
$this->assertContains('cms_page_view_selectable_test_custom_layout_page_3_test_selected', $handles);
8787
}
88+
89+
/**
90+
* Check home page custom handle is applied when rendering a page.
91+
*
92+
* @return void
93+
* @throws \Throwable
94+
* @magentoDataFixture Magento/Cms/_files/home_with_custom_handle.php
95+
*/
96+
public function testHomePageCustomHandles(): void
97+
{
98+
$this->dispatch('/');
99+
/** @var LayoutInterface $layout */
100+
$layout = Bootstrap::getObjectManager()->get(LayoutInterface::class);
101+
$handles = $layout->getUpdate()->getHandles();
102+
$this->assertContains('cms_page_view_selectable_home_page_custom_layout', $handles);
103+
}
88104
}

dev/tests/integration/testsuite/Magento/Cms/Model/Page/CustomLayoutManagerTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ public function testCustomLayoutUpdate(): void
9797
$result = $this->resultFactory->create();
9898
$this->manager->applyUpdate($result, $this->repo->getFor($pageId));
9999
$this->identityMap->remove((int)$page->getId());
100-
$this->assertContains('___selectable_page100_select2', $result->getLayout()->getUpdate()->getHandles());
100+
$this->assertContains(
101+
'cms_page_view_selectable_page100_select2',
102+
$result->getLayout()->getUpdate()->getHandles()
103+
);
101104
}
102105
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Cms\Model\Page as PageModel;
9+
use Magento\Cms\Model\PageFactory as PageModelFactory;
10+
use Magento\TestFramework\Cms\Model\CustomLayoutManager;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
13+
$objectManager = Bootstrap::getObjectManager();
14+
15+
/** @var PageModelFactory $pageFactory */
16+
$pageFactory = $objectManager->get(PageModelFactory::class);
17+
/** @var CustomLayoutManager $fakeManager */
18+
$fakeManager = $objectManager->get(CustomLayoutManager::class);
19+
$layoutRepo = $objectManager->create(PageModel\CustomLayoutRepositoryInterface::class, ['manager' => $fakeManager]);
20+
21+
$customLayoutName = 'page_custom_layout';
22+
23+
/** @var PageModel $page */
24+
$page = $pageFactory->create(['customLayoutRepository' => $layoutRepo]);
25+
$page->load('home');
26+
$cmsPageId = (int)$page->getId();
27+
28+
$fakeManager->fakeAvailableFiles($cmsPageId, [$customLayoutName]);
29+
$page->setData('layout_update_selected', $customLayoutName);
30+
$page->save();
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Cms\Api\PageRepositoryInterface;
9+
use Magento\Cms\Model\Page\CustomLayout\CustomLayoutRepository;
10+
use Magento\TestFramework\Helper\Bootstrap;
11+
12+
$objectManager = Bootstrap::getObjectManager();
13+
14+
/** @var PageRepositoryInterface $pageRepository */
15+
$pageRepository = $objectManager->get(PageRepositoryInterface::class);
16+
$cmsPage = $pageRepository->getById('home');
17+
$cmsPageId = (int)$cmsPage->getId();
18+
19+
/** @var CustomLayoutRepository $customLayoutRepository */
20+
$customLayoutRepository = $objectManager->get(CustomLayoutRepository::class);
21+
$customLayoutRepository->deleteFor($cmsPageId);

0 commit comments

Comments
 (0)