Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Direct.php
Go to the documentation of this file.
1 <?php
7 
10 
14 class Direct implements \Magento\Framework\View\Asset\MergeStrategyInterface
15 {
19  const MERGE_DELIMITER_JS = ';';
20 
22 
26  private $filesystem;
27 
31  private $cssUrlResolver;
32 
37  public function __construct(
38  \Magento\Framework\Filesystem $filesystem,
39  \Magento\Framework\View\Url\CssResolver $cssUrlResolver
40  ) {
41  $this->filesystem = $filesystem;
42  $this->cssUrlResolver = $cssUrlResolver;
43  }
44 
48  public function merge(array $assetsToMerge, Asset\LocalInterface $resultAsset)
49  {
50  $mergedContent = $this->composeMergedContent($assetsToMerge, $resultAsset);
51  $filePath = $resultAsset->getPath();
52  $staticDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
53  $tmpDir = $this->filesystem->getDirectoryWrite(DirectoryList::TMP);
54  $tmpDir->writeFile($filePath, $mergedContent);
55  $tmpDir->renameFile($filePath, $filePath, $staticDir);
56  }
57 
66  private function composeMergedContent(array $assetsToMerge, Asset\LocalInterface $resultAsset)
67  {
68  $result = [];
70  foreach ($assetsToMerge as $asset) {
71  $result[] = $this->preProcessBeforeMerging($asset, $resultAsset, $asset->getContent());
72  }
73  $delimiter = $this->_getFilesContentDelimiter($resultAsset->getContentType());
74  $result = $this->preProcessMergeResult($resultAsset, ltrim(implode($delimiter, $result)));
75  return $result;
76  }
77 
86  private function preProcessBeforeMerging(Asset\LocalInterface $item, Asset\LocalInterface $result, $content)
87  {
88  if ($result->getContentType() == 'css') {
89  $from = $item->getPath();
90  $to = $result->getPath();
91  return $this->cssUrlResolver->relocateRelativeUrls($content, $from, $to);
92  }
93  return $content;
94  }
95 
103  private function preProcessMergeResult(Asset\LocalInterface $result, $content)
104  {
105  if ($result->getContentType() == 'css') {
106  $content = $this->cssUrlResolver->aggregateImportDirectives($content);
107  }
108  return $content;
109  }
110 
117  protected function _getFilesContentDelimiter($contentType)
118  {
119  if ($contentType == 'js') {
121  }
123  }
124 }
merge(array $assetsToMerge, Asset\LocalInterface $resultAsset)
Definition: Direct.php:48
__construct(\Magento\Framework\Filesystem $filesystem, \Magento\Framework\View\Url\CssResolver $cssUrlResolver)
Definition: Direct.php:37
$filesystem