Skip to content

Commit f2468b5

Browse files
author
Svyatoslav
committed
Improvement PageLayout Config Builder. Added save in cache config files.
1 parent 8513dfd commit f2468b5

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

app/code/Magento/Theme/Model/PageLayout/Config/Builder.php

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
class Builder implements \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface
1414
{
15+
const CACHE_KEY_LAYOUTS = 'THEME_LAYOUTS_FILES_MERGED';
16+
1517
/**
1618
* @var \Magento\Framework\View\PageLayout\ConfigFactory
1719
*/
@@ -32,19 +34,27 @@ class Builder implements \Magento\Framework\View\Model\PageLayout\Config\Builder
3234
*/
3335
private $configFiles = [];
3436

37+
/**
38+
* @var \Magento\Framework\App\Cache\Type\Layout
39+
*/
40+
protected $cacheModel;
41+
3542
/**
3643
* @param \Magento\Framework\View\PageLayout\ConfigFactory $configFactory
3744
* @param \Magento\Framework\View\PageLayout\File\Collector\Aggregated $fileCollector
3845
* @param \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
46+
* @param \Magento\Framework\App\Cache\Type\Layout $cacheModel
3947
*/
4048
public function __construct(
4149
\Magento\Framework\View\PageLayout\ConfigFactory $configFactory,
4250
\Magento\Framework\View\PageLayout\File\Collector\Aggregated $fileCollector,
43-
\Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
51+
\Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection,
52+
\Magento\Framework\App\Cache\Type\Layout $cacheModel
4453
) {
4554
$this->configFactory = $configFactory;
4655
$this->fileCollector = $fileCollector;
4756
$this->themeCollection = $themeCollection;
57+
$this->cacheModel = $cacheModel;
4858
$this->themeCollection->setItemObjectClass(\Magento\Theme\Model\Theme\Data::class);
4959
}
5060

@@ -57,18 +67,25 @@ public function getPageLayoutsConfig()
5767
}
5868

5969
/**
60-
* Retrieve configuration files.
70+
* Retrieve configuration files. Caches merged layouts.xml XML files.
6171
*
6272
* @return array
6373
*/
6474
protected function getConfigFiles()
6575
{
6676
if (!$this->configFiles) {
6777
$configFiles = [];
68-
foreach ($this->themeCollection->loadRegisteredThemes() as $theme) {
69-
$configFiles[] = $this->fileCollector->getFilesContent($theme, 'layouts.xml');
78+
$this->configFiles = $this->cacheModel->load(self::CACHE_KEY_LAYOUTS);
79+
if (!empty($this->configFiles)) {
80+
$this->configFiles = @unserialize($this->configFiles);//if value in cache is corrupted.
81+
}
82+
if (empty($this->configFiles)) {
83+
foreach ($this->themeCollection->loadRegisteredThemes() as $theme) {
84+
$configFiles[] = $this->fileCollector->getFilesContent($theme, 'layouts.xml');
85+
}
86+
$this->configFiles = array_merge(...$configFiles);
87+
$this->cacheModel->save(serialize($this->configFiles), self::CACHE_KEY_LAYOUTS);
7088
}
71-
$this->configFiles = array_merge(...$configFiles);
7289
}
7390

7491
return $this->configFiles;

app/code/Magento/Theme/Test/Unit/Model/PageLayout/Config/BuilderTest.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010
*/
1111
namespace Magento\Theme\Test\Unit\Model\PageLayout\Config;
1212

13+
use Magento\Framework\App\Cache\Type\FrontendPool;
14+
use Magento\Framework\App\Cache\Type\Layout as LayoutCache;
15+
use Magento\Framework\Cache\FrontendInterface;
1316
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1417
use Magento\Framework\View\PageLayout\Config;
1518
use Magento\Framework\View\PageLayout\File\Collector\Aggregated;
19+
use Magento\TestFramework\Helper\Bootstrap;
1620
use Magento\Theme\Model\PageLayout\Config\Builder;
1721
use Magento\Theme\Model\ResourceModel\Theme\Collection;
1822
use Magento\Theme\Model\Theme\Data;
1923
use PHPUnit\Framework\MockObject\MockObject;
2024
use PHPUnit\Framework\TestCase;
25+
use Magento\Framework\App\Cache\Type\Layout;
2126

2227
class BuilderTest extends TestCase
2328
{
@@ -41,6 +46,11 @@ class BuilderTest extends TestCase
4146
*/
4247
protected $themeCollection;
4348

49+
/**
50+
* @var Layout|MockObject
51+
*/
52+
protected $cacheModel;
53+
4454
/**
4555
* SetUp method
4656
*
@@ -58,21 +68,26 @@ protected function setUp(): void
5868
)->disableOriginalConstructor()
5969
->getMock();
6070

71+
$helper = new ObjectManager($this);
6172
$this->themeCollection = $this->getMockBuilder(Collection::class)
6273
->disableOriginalConstructor()
6374
->getMock();
75+
$this->cacheModel = $this->getMockBuilder(Layout::class)
76+
->disableOriginalConstructor()
77+
->getMock();
78+
6479
$this->themeCollection->expects($this->once())
6580
->method('setItemObjectClass')
6681
->with(Data::class)
6782
->willReturnSelf();
68-
6983
$helper = new ObjectManager($this);
7084
$this->builder = $helper->getObject(
7185
Builder::class,
7286
[
7387
'configFactory' => $this->configFactory,
7488
'fileCollector' => $this->fileCollector,
75-
'themeCollection' => $this->themeCollection
89+
'themeCollection' => $this->themeCollection,
90+
'cacheModel' => $this->cacheModel,
7691
]
7792
);
7893
}
@@ -84,6 +99,7 @@ protected function setUp(): void
8499
*/
85100
public function testGetPageLayoutsConfig()
86101
{
102+
$this->cacheModel->clean();
87103
$files1 = ['content layouts_1.xml', 'content layouts_2.xml'];
88104
$files2 = ['content layouts_3.xml', 'content layouts_4.xml'];
89105

0 commit comments

Comments
 (0)