Когда и как создаются шаблоны phtml в view_preprocessed?

11

Я вижу множество phtml-файлов, сгенерированных как var/view_preprocessed/htmlиз основных модулей, так и из пользовательских модулей. Похоже, что это все используемые шаблоны с разделенными пробелами.

Алан Кент написал в Как я могу обновить phtml-файлы Magento 2 в Grunt? :

Вы не «развертываете» файлы PHTML. На них ссылаются блоки в файлах разметки и обрабатывают на стороне сервера. Таким образом, «ворчание» здесь не актуально, а развертывание статического контента также не актуально.

И при анализе развертывания статического контента и рабочего процесса я не нашел ничего, связанного с шаблонами, поэтому я думаю, что это все еще верно.

Но когда эти файлы генерируются? А что на самом деле там происходит и почему?

Фабиан Шменглер
источник
Как я выяснил, эти файлы будут созданы с помощью команды static-content: deploy. По какой-то причине вы должны удалить все файлы в var / view_preprocessed, чтобы ваши изменения работали.
Кевин Кригер

Ответы:

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чтобы увидеть, как извлекаются шаблоны.
Короткая версия:
звонит accumulateModuleTemplateFilesи accumulateThemeTemplateFilesиз того же класса. Эти методы используют (в конце концов) 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