何时以及如何在view_preprocessed中生成phtml模板?


11

我看到了在var/view_preprocessed/html中从核心模块以及自定义模块生成的许多phtml文件。看起来这些都是带空格的已使用模板。

艾伦·肯特(Alan Kent)在“ 如何在Grunt中更新Magento 2 phtml文件”中写道

您无需“部署” PHTML文件。它们由布局文件中的块引用,并在服务器端进行处理。因此,“咕gr声”在这里不相关,并且静态内容部署同样不相关。

在分析静态内容部署和繁琐的工作流程时,我没有发现与模板相关的任何内容,因此我认为这仍然成立。

但是何时生成这些文件?那里到底发生了什么,为什么?


如我所知,这些文件将通过static-content:deploy命令生成。由于某些原因,您必须删除var / view_preprocessed中的所有文件才能使更改生效。
凯文·克里格

Answers:


9

调用时bin/magento static-content:deploy被调用: \Magento\Deploy\Console\Command\DeployStaticContentCommand::execute()

该方法调用

    $deployer = $this->objectManager->create(
        'Magento\Deploy\Model\Deployer',
        ['filesUtil' => $filesUtil, 'output' => $output, 'isDryRun' => $options[self::DRY_RUN_OPTION]]
    );
    $deployer->deploy($this->objectManagerFactory, $languages);

转换为\Magento\Deploy\Model\Deployer::deploy。在此方法的底部,您会发现

   foreach ($this->filesUtil->getPhtmlFiles(false, false) as $template) {
        $this->htmlMinifier->minify($template);
        if ($this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
            $this->output->writeln($template . " minified\n");
        } else {
            $this->output->write('.');
        }
        $this->count++;
    }

如果需要,您可以更深入\Magento\Framework\App\Utility::getPhtmlFiles地了解如何检索模板。
短版:
调用accumulateModuleTemplateFilesaccumulateThemeTemplateFiles来自同一类。这些方法使用(最后)glob和一些正则表达式从模块和主题中检索所有模板文件,并且最小化是由\Magento\Framework\View\Template\Html\Minifier(实现\Magento\Framework\View\Template\Html\MinifierInterface)基于一些奇怪的正则表达式完成的。(请参见minify方法)。
我还不知道的事情是,如何加载这些模板以供使用。它们很可能是由模板引擎加载的。如果/当我找到时,我会发回这里。

[编辑]
我发现使用缩小的模板时。当您设置的值Store->Configuration->Developer->Template Settings->Minify HTML,以Yes当生产模式。


感谢你的回答。我发现Store->Configuration->Developer->Template Settings->Minify HTML它仍然没有加载Minified HTML。有什么可以阻止这一点吗?这仅适用于生产模式吗?
TheBlackBenzKid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.