Quando e como os modelos phtml são gerados em view_preprocessed?

11

Eu vejo muitos arquivos phtml gerados var/view_preprocessed/html, a partir de módulos principais e também de módulos personalizados. Parece que todos esses modelos são usados ​​com espaço em branco removido.

Alan Kent escreveu em Como atualizo os arquivos phpml do Magento 2 no Grunt? :

Você não "implanta" arquivos PHTML. Eles são referenciados por blocos nos arquivos de layout e processados ​​no lado do servidor. Portanto, "grunhido" não é relevante aqui e a implantação de conteúdo estático também não é relevante.

E, ao analisar a implantação de conteúdo estático e o fluxo de trabalho pesado, não encontrei nada relacionado a modelos, então acho que isso ainda é verdade.

Mas quando esses arquivos são gerados? E o que realmente está acontecendo lá e por quê?

Fabian Schmengler
fonte
Como eu descobri, esses arquivos serão gerados com o comando static-content: deploy. Por algum motivo, você deve excluir todos os arquivos em var / view_preprocessed para que suas alterações funcionem.
Kevin Krieger

Respostas:

8

Ao chamar bin/magento static-content:deployisso é chamado: \Magento\Deploy\Console\Command\DeployStaticContentCommand::execute()

Este método chama

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

que se traduz em \Magento\Deploy\Model\Deployer::deploy. No final deste método, você encontrará

   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++;
    }

Se você quiser, pode se aprofundar \Magento\Framework\App\Utility::getPhtmlFilespara ver como os modelos são recuperados.
Versão curta:
Chama accumulateModuleTemplateFilese accumulateThemeTemplateFilesda mesma classe. Esses métodos estão usando (no final) globe algumas expressões regulares para recuperar todos os arquivos de modelo dos módulos e dos temas e a minificação é feita por \Magento\Framework\View\Template\Html\Minifier(que implementa \Magento\Framework\View\Template\Html\MinifierInterface) com base em algumas expressões regulares estranhas. (veja o minifymétodo).
O que eu ainda não sei é como esses modelos são carregados para uso. provavelmente eles são carregados pelo mecanismo de modelo. Vou postar aqui se / quando eu encontrar isso.

[EDIT]
Encontrei quando os modelos minificados são usados. Quando você definir o valor para Store->Configuration->Developer->Template Settings->Minify HTMLa Yese quando em modo de produção.

Marius
fonte
Obrigado pela resposta. Eu descobri que Store->Configuration->Developer->Template Settings->Minify HTMLele ainda não está carregando o HTML Minificado. Existe algo que possa estar bloqueando isso? Isso funciona apenas no modo de produção?
TheBlackBenzKid