Kapan dan bagaimana templat phtml dihasilkan di view_preproses?

11

Saya melihat banyak file phtml dihasilkan var/view_preprocessed/html, dari modul inti maupun dari modul khusus. Sepertinya ini semua templat yang digunakan dengan spasi kosong.

Alan Kent menulis di Bagaimana saya memperbarui file phtml Magento 2 di Grunt? :

Anda tidak "menyebarkan" file PHTML. Mereka direferensikan oleh blok dalam file tata letak dan diproses di sisi server. Jadi "kasar" tidak relevan di sini, dan penyebaran konten statis juga tidak relevan.

Dan ketika menganalisis penyebaran konten statis dan alur kerja kasar saya tidak menemukan apa pun yang terkait dengan template, jadi saya kira ini masih berlaku.

Tetapi kapan file-file ini dihasilkan? Dan apa yang sebenarnya terjadi di sana dan mengapa?

Fabian Schmengler
sumber
Seperti yang saya ketahui, file-file ini akan dihasilkan dengan konten-statis: perintah deploy. Untuk beberapa alasan Anda harus menghapus semua file di var / view_preproses untuk membuat perubahan Anda berfungsi.
Kevin Krieger

Jawaban:

8

Saat memanggil bin/magento static-content:deployini dipanggil: \Magento\Deploy\Console\Command\DeployStaticContentCommand::execute()

Metode ini memanggil

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

yang diterjemahkan menjadi \Magento\Deploy\Model\Deployer::deploy. Di bagian bawah metode ini Anda akan menemukan

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

Jika mau, Anda dapat menggali lebih dalam \Magento\Framework\App\Utility::getPhtmlFilesuntuk melihat bagaimana templat diambil.
Versi singkat:
Memanggil accumulateModuleTemplateFilesdan accumulateThemeTemplateFilesdari kelas yang sama. Metode ini menggunakan (pada akhirnya) globdan beberapa ekspresi reguler untuk mengambil semua file templat dari modul dan dari tema dan minifying dilakukan oleh \Magento\Framework\View\Template\Html\Minifier(yang mengimplementasikan \Magento\Framework\View\Template\Html\MinifierInterface) berdasarkan pada beberapa ekspresi reguler yang aneh. (lihat minifymetode).
Masalahnya saya belum tahu, bagaimana template ini dimuat untuk digunakan. kemungkinan besar mereka dimuat oleh mesin template. Saya akan memposting kembali di sini jika / ketika saya menemukan itu.

[EDIT]
Saya temukan ketika templat yang diperkecil digunakan. Ketika Anda menetapkan nilai untuk Store->Configuration->Developer->Template Settings->Minify HTMLuntuk Yesdan ketika pada mode produksi.

Marius
sumber
Terima kasih atas jawabannya. Saya telah menemukan bahwa Store->Configuration->Developer->Template Settings->Minify HTMLitu masih tidak memuat HTML yang diperkecil. Adakah yang bisa menghalangi ini? Apakah ini hanya berfungsi dalam mode produksi?
TheBlackBenzKid