Quand et comment les modèles phtml sont-ils générés dans view_preprocessed?

11

Je vois beaucoup de fichiers phtml générés dans var/view_preprocessed/html, à partir des modules de base ainsi que des modules personnalisés. Il semble que ce soient tous des modèles utilisés avec des espaces vides.

Alan Kent a écrit dans Comment mettre à jour les fichiers phtml de Magento 2 dans Grunt? :

Vous ne "déployez" pas les fichiers PHTML. Ils sont référencés par des blocs dans les fichiers de mise en page et traités côté serveur. Donc, "grognement" n'est pas pertinent ici, et le déploiement de contenu statique n'est pas non plus pertinent.

Et lors de l'analyse du déploiement de contenu statique et du workflow de grognement, je n'ai rien trouvé de lié aux modèles, donc je suppose que cela reste vrai.

Mais quand ces fichiers sont-ils générés? Et que se passe-t-il réellement là-bas et pourquoi?

Fabian Schmengler
la source
Comme je l'ai compris, ces fichiers seront générés avec la commande static-content: deploy. Pour une raison quelconque, vous devez supprimer tous les fichiers dans var / view_preprocessed pour que vos modifications fonctionnent.
Kevin Krieger

Réponses:

9

Lors de l'appel, bin/magento static-content:deployceci est appelé: \Magento\Deploy\Console\Command\DeployStaticContentCommand::execute()

Cette méthode appelle

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

ce qui se traduit par \Magento\Deploy\Model\Deployer::deploy. Au bas de cette méthode, vous trouverez

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

Si vous le souhaitez, vous pouvez creuser plus profondément \Magento\Framework\App\Utility::getPhtmlFilespour voir comment les modèles sont récupérés.
Version courte:
Il appelle accumulateModuleTemplateFileset accumulateThemeTemplateFilesde la même classe. Ces méthodes utilisent (à la fin) globet quelques expressions régulières pour récupérer tous les fichiers de modèle à partir des modules et des thèmes et la minification est effectuée par \Magento\Framework\View\Template\Html\Minifier(qui implémente \Magento\Framework\View\Template\Html\MinifierInterface) basée sur des expressions régulières étranges. (voir minifyméthode).
La chose que je ne sais pas encore, c'est comment ces modèles sont chargés pour utilisation. très probablement, ils sont chargés par le moteur de modèle. Je posterai ici si / quand je trouve cela.

[EDIT]
J'ai trouvé lorsque les modèles minifiés sont utilisés. Lorsque vous définissez la valeur Store->Configuration->Developer->Template Settings->Minify HTMLde Yeset lorsque vous êtes en mode production.

Marius
la source
Merci d'avoir répondu. J'ai constaté qu'il Store->Configuration->Developer->Template Settings->Minify HTMLne charge toujours pas le HTML minifié. Y a-t-il quelque chose qui peut bloquer cela? Est-ce que cela fonctionne uniquement en mode production?
TheBlackBenzKid