12
12
*/
13
13
class Builder implements \Magento \Framework \View \Model \PageLayout \Config \BuilderInterface
14
14
{
15
+ const CACHE_KEY_LAYOUTS = 'THEME_LAYOUTS_FILES_MERGED ' ;
16
+
15
17
/**
16
18
* @var \Magento\Framework\View\PageLayout\ConfigFactory
17
19
*/
@@ -32,19 +34,27 @@ class Builder implements \Magento\Framework\View\Model\PageLayout\Config\Builder
32
34
*/
33
35
private $ configFiles = [];
34
36
37
+ /**
38
+ * @var \Magento\Framework\App\Cache\Type\Layout
39
+ */
40
+ protected $ cacheModel ;
41
+
35
42
/**
36
43
* @param \Magento\Framework\View\PageLayout\ConfigFactory $configFactory
37
44
* @param \Magento\Framework\View\PageLayout\File\Collector\Aggregated $fileCollector
38
45
* @param \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
46
+ * @param \Magento\Framework\App\Cache\Type\Layout $cacheModel
39
47
*/
40
48
public function __construct (
41
49
\Magento \Framework \View \PageLayout \ConfigFactory $ configFactory ,
42
50
\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
44
53
) {
45
54
$ this ->configFactory = $ configFactory ;
46
55
$ this ->fileCollector = $ fileCollector ;
47
56
$ this ->themeCollection = $ themeCollection ;
57
+ $ this ->cacheModel = $ cacheModel ;
48
58
$ this ->themeCollection ->setItemObjectClass (\Magento \Theme \Model \Theme \Data::class);
49
59
}
50
60
@@ -57,18 +67,25 @@ public function getPageLayoutsConfig()
57
67
}
58
68
59
69
/**
60
- * Retrieve configuration files.
70
+ * Retrieve configuration files. Caches merged layouts.xml XML files.
61
71
*
62
72
* @return array
63
73
*/
64
74
protected function getConfigFiles ()
65
75
{
66
76
if (!$ this ->configFiles ) {
67
77
$ 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 );
70
88
}
71
- $ this ->configFiles = array_merge (...$ configFiles );
72
89
}
73
90
74
91
return $ this ->configFiles ;
0 commit comments