Как загружать или не загружать JavaScript и CSS в зависимости от административных настроек модуля


(Дмитрий Федюк) #1

Шаг 1

Опишите Ваш блок в макете.
Обратите внимание, что если Ваше условие загрузки просто, то Вы можете реализовать его посредством ifconfig.
Если же условие более сложное, то Вы можете реализовать его непосредственно в классе-блоке.

Dfe/Markdown/view/adminhtml/layout/default.xml:

<?xml version='1.0'?>
<page 
	xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
	xsi:noNamespaceSchemaLocation='../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd'>
	<body>
		<referenceContainer name='root'>
			<block
				class='Dfe\Markdown\Block\Init'
				name='Dfe_Markdown_Block_Init'
				ifconfig='dfe_backend/markdown/enable'
			/>
		</referenceContainer>
	</body>
</page>

Шаг 2

При инициализации класса-блока вызовите метод \Magento\Framework\View\Page\Config::addPageAsset() для загрузки (добавления на страницу) JavaScript и CSS.
Если Ваше условие загрузки сложное, то здесь как раз подходящее место для его реализации на языке PHP:

Dfe/Markdown/Block/Init.php:

<?php
namespace Dfe\Markdown\Block;
class Init extends \Magento\Backend\Block\AbstractBlock {
	/**
	 * @override
	 * @see \Magento\Backend\Block\AbstractBlock::_construct()
	 * @return void
	 */
	protected function _construct() {
		/** http://devdocs.magento.com/guides/v2.0/architecture/view/page-assets.html#m2devgde-page-assets-api */
		/** @var \Magento\Framework\App\ObjectManager $om */
		$om = \Magento\Framework\App\ObjectManager::getInstance();
		/** @var \Magento\Framework\View\Page\Config $page */
		$page = $om->get('Magento\Framework\View\Page\Config');
		$page->addPageAsset('Dfe_Markdown::main.js');
		$page->addPageAsset('Dfe_Markdown::main.css');
	}
}

Шаг 3

Dfe/Markdown/view/adminhtml/web/main.js:

require(['jquery'], function($) {$(function() {
	console.log('HELLO, WORLD!');
});});

Как загрузить на страницу CSS, если макет уже построен