AssetManager в MoonShine предоставляет удобный способ управления CSS и JavaScript ресурсами вашей административной панели.
Он поддерживает различные типы ресурсов, включая внешние файлы, встроенный код и версионирование.
В MoonShine есть несколько типов ресурсов:
MoonShine\AssetManager\Js - js через тег <script src>,
MoonShine\AssetManager\Css - css через тег <link>,
MoonShine\AssetManager\InlineCss - css через тег <style>,
MoonShine\AssetManager\InlineJs - js через тег <script>,
MoonShine\AssetManager\Raw - произвольный контент в head.
JavaScript файлы
use MoonShine\AssetManager\Js;
Js::make('/js/app.js');
Js::make('/js/app.js')->defer();
Js::make('/js/app.js')->customAttributes([
'data-module' => 'main'
]);
namespaces
use MoonShine\AssetManager\Js;
// Базовое подключение
Js::make('/js/app.js');
// С отложенной загрузкой
Js::make('/js/app.js')->defer();
// С атрибутами
Js::make('/js/app.js')->customAttributes([
'data-module' => 'main'
]);
use MoonShine\AssetManager\Js;
// Базовое подключение
Js::make('/js/app.js');
// С отложенной загрузкой
Js::make('/js/app.js')->defer();
// С атрибутами
Js::make('/js/app.js')->customAttributes([
'data-module' => 'main'
]);
namespaces
use MoonShine\AssetManager\Js;
// Базовое подключение
Js::make('/js/app.js');
// С отложенной загрузкой
Js::make('/js/app.js')->defer();
// С атрибутами
Js::make('/js/app.js')->customAttributes([
'data-module' => 'main'
]);
use MoonShine\AssetManager\Js;
// Базовое подключение
Js::make('/js/app.js');
// С отложенной загрузкой
Js::make('/js/app.js')->defer();
// С атрибутами
Js::make('/js/app.js')->customAttributes([
'data-module' => 'main'
]);
CSS файлы
use MoonShine\AssetManager\Css;
Css::make('/css/styles.css');
Css::make('/css/styles.css')->defer();
Css::make('/css/styles.css')->customAttributes([
'media' => 'print'
]);
namespaces
use MoonShine\AssetManager\Css;
// Базовое подключение
Css::make('/css/styles.css');
// С отложенной загрузкой
Css::make('/css/styles.css')->defer();
// С атрибутами
Css::make('/css/styles.css')->customAttributes([
'media' => 'print'
]);
use MoonShine\AssetManager\Css;
// Базовое подключение
Css::make('/css/styles.css');
// С отложенной загрузкой
Css::make('/css/styles.css')->defer();
// С атрибутами
Css::make('/css/styles.css')->customAttributes([
'media' => 'print'
]);
namespaces
use MoonShine\AssetManager\Css;
// Базовое подключение
Css::make('/css/styles.css');
// С отложенной загрузкой
Css::make('/css/styles.css')->defer();
// С атрибутами
Css::make('/css/styles.css')->customAttributes([
'media' => 'print'
]);
use MoonShine\AssetManager\Css;
// Базовое подключение
Css::make('/css/styles.css');
// С отложенной загрузкой
Css::make('/css/styles.css')->defer();
// С атрибутами
Css::make('/css/styles.css')->customAttributes([
'media' => 'print'
]);
Встроенный JavaScript
use MoonShine\AssetManager\InlineJs;
InlineJs::make(<<<'JS'
document.addEventListener("DOMContentLoaded", function() {
console.log("Loaded");
});
JS);
namespaces
use MoonShine\AssetManager\InlineJs;
InlineJs::make(<<<'JS'
document.addEventListener("DOMContentLoaded", function() {
console.log("Loaded");
});
JS);
use MoonShine\AssetManager\InlineJs;
InlineJs::make(<<<'JS'
document.addEventListener("DOMContentLoaded", function() {
console.log("Loaded");
});
JS);
namespaces
use MoonShine\AssetManager\InlineJs;
InlineJs::make(<<<'JS'
document.addEventListener("DOMContentLoaded", function() {
console.log("Loaded");
});
JS);
use MoonShine\AssetManager\InlineJs;
InlineJs::make(<<<'JS'
document.addEventListener("DOMContentLoaded", function() {
console.log("Loaded");
});
JS);
Встроенный CSS
use MoonShine\AssetManager\InlineCss;
InlineCss::make(<<<'CSS'
.custom-class {
color: red;
}
CSS);
namespaces
use MoonShine\AssetManager\InlineCss;
InlineCss::make(<<<'CSS'
.custom-class {
color: red;
}
CSS);
use MoonShine\AssetManager\InlineCss;
InlineCss::make(<<<'CSS'
.custom-class {
color: red;
}
CSS);
namespaces
use MoonShine\AssetManager\InlineCss;
InlineCss::make(<<<'CSS'
.custom-class {
color: red;
}
CSS);
use MoonShine\AssetManager\InlineCss;
InlineCss::make(<<<'CSS'
.custom-class {
color: red;
}
CSS);
Raw-контент
use MoonShine\AssetManager\Raw;
Raw::make('<link rel="preconnect" href="https://fonts.googleapis.com">');
namespaces
use MoonShine\AssetManager\Raw;
Raw::make('<link rel="preconnect" href="https://fonts.googleapis.com">');
use MoonShine\AssetManager\Raw;
Raw::make('<link rel="preconnect" href="https://fonts.googleapis.com">');
namespaces
use MoonShine\AssetManager\Raw;
Raw::make('<link rel="preconnect" href="https://fonts.googleapis.com">');
use MoonShine\AssetManager\Raw;
Raw::make('<link rel="preconnect" href="https://fonts.googleapis.com">');
AssetManager позволяет управлять порядком загрузки ресурсов.
Мы рекомендуем использовать DI, чтобы начать взаимодействие с AssetManager, за сервис отвечает интерфейс MoonShine\Contracts\AssetManager\AssetManagerContract.
Также MoonShine предоставляет удобные методы взаимодействия с AssetManager в разных сущностях, таких как CrudResource, Page, Layout, Component и Field.
use MoonShine\AssetManager\Js;
$assetManager->append([
Js::make('/js/last.js')
]);
$assetManager->prepend([
Js::make('/js/first.js')
]);
$assetManager->add([
Js::make('/js/middle.js')
]);
namespaces
use MoonShine\AssetManager\Js;
// Добавить ресурсы в конец
$assetManager->append([
Js::make('/js/last.js')
]);
// Добавить ресурсы в начало
$assetManager->prepend([
Js::make('/js/first.js')
]);
// Добавить ресурсы в порядке добавления
$assetManager->add([
Js::make('/js/middle.js')
]);
use MoonShine\AssetManager\Js;
// Добавить ресурсы в конец
$assetManager->append([
Js::make('/js/last.js')
]);
// Добавить ресурсы в начало
$assetManager->prepend([
Js::make('/js/first.js')
]);
// Добавить ресурсы в порядке добавления
$assetManager->add([
Js::make('/js/middle.js')
]);
namespaces
use MoonShine\AssetManager\Js;
// Добавить ресурсы в конец
$assetManager->append([
Js::make('/js/last.js')
]);
// Добавить ресурсы в начало
$assetManager->prepend([
Js::make('/js/first.js')
]);
// Добавить ресурсы в порядке добавления
$assetManager->add([
Js::make('/js/middle.js')
]);
use MoonShine\AssetManager\Js;
// Добавить ресурсы в конец
$assetManager->append([
Js::make('/js/last.js')
]);
// Добавить ресурсы в начало
$assetManager->prepend([
Js::make('/js/first.js')
]);
// Добавить ресурсы в порядке добавления
$assetManager->add([
Js::make('/js/middle.js')
]);
Метод append() всегда будет добавлять ресурсы до основного списка из CrudResource, Page, Layout, Component, Field, а prepend() после.
Метод add() будет зависеть от жизненного цикла приложения. Допустим, вы добавляете ассеты в ModelResource,
но перед отображением страницы будет вызван Layout, который также в свою очередь добавит ассеты, тем самым ассеты Layout добавятся в конце.
Вы также можете воспользоваться хелпером moonshine()->getAssetManager()
Вы можете модифицировать коллекцию ресурсов с помощью замыканий:
$assetManager->modifyAssets(function($assets) {
return array_filter($assets, function($asset) {
return !str_contains($asset->getLink(), 'remove-this');
});
});
$assetManager->modifyAssets(function($assets) {
// Модифицируем коллекцию ресурсов
return array_filter($assets, function($asset) {
return !str_contains($asset->getLink(), 'remove-this');
});
});
$assetManager->modifyAssets(function($assets) {
// Модифицируем коллекцию ресурсов
return array_filter($assets, function($asset) {
return !str_contains($asset->getLink(), 'remove-this');
});
});
$assetManager->modifyAssets(function($assets) {
// Модифицируем коллекцию ресурсов
return array_filter($assets, function($asset) {
return !str_contains($asset->getLink(), 'remove-this');
});
});
$assetManager->modifyAssets(function($assets) {
// Модифицируем коллекцию ресурсов
return array_filter($assets, function($asset) {
return !str_contains($asset->getLink(), 'remove-this');
});
});
AssetManager поддерживает версионирование ресурсов для управления кешированием,
по умолчанию будет использоваться версия MoonShine, но вы можете переопределить у конкретного ресурса:
use MoonShine\AssetManager\Js;
Js::make('/js/app.js')->version('1.0.0');
namespaces
use MoonShine\AssetManager\Js;
// Добавление версии к отдельному ресурсу
Js::make('/js/app.js')->version('1.0.0');
// Результат: /js/app.js?v=1.0.0
use MoonShine\AssetManager\Js;
// Добавление версии к отдельному ресурсу
Js::make('/js/app.js')->version('1.0.0');
// Результат: /js/app.js?v=1.0.0
namespaces
use MoonShine\AssetManager\Js;
// Добавление версии к отдельному ресурсу
Js::make('/js/app.js')->version('1.0.0');
// Результат: /js/app.js?v=1.0.0
use MoonShine\AssetManager\Js;
// Добавление версии к отдельному ресурсу
Js::make('/js/app.js')->version('1.0.0');
// Результат: /js/app.js?v=1.0.0
Версионирование автоматически добавляет параметр v к URL ресурса. Если URL уже содержит параметры запроса, версия будет добавлена через &.
use MoonShine\AssetManager\Js;
use MoonShine\Contracts\AssetManager\AssetManagerContract;
use MoonShine\Contracts\Core\DependencyInjection\ConfiguratorContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
public function boot(
CoreContract $core,
ConfiguratorContract $config,
AssetManagerContract $assets,
): void
{
$assets->add(Js::make('/js/app.js'));
}
// MoonShineServiceProvider
namespaces
use MoonShine\AssetManager\Js;
use MoonShine\Contracts\AssetManager\AssetManagerContract;
use MoonShine\Contracts\Core\DependencyInjection\ConfiguratorContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
public function boot(
CoreContract $core,
ConfiguratorContract $config,
AssetManagerContract $assets,
): void
{
$assets->add(Js::make('/js/app.js'));
}
// MoonShineServiceProvider
use MoonShine\AssetManager\Js;
use MoonShine\Contracts\AssetManager\AssetManagerContract;
use MoonShine\Contracts\Core\DependencyInjection\ConfiguratorContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
public function boot(
CoreContract $core,
ConfiguratorContract $config,
AssetManagerContract $assets,
): void
{
$assets->add(Js::make('/js/app.js'));
}
// MoonShineServiceProvider
namespaces
use MoonShine\AssetManager\Js;
use MoonShine\Contracts\AssetManager\AssetManagerContract;
use MoonShine\Contracts\Core\DependencyInjection\ConfiguratorContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
public function boot(
CoreContract $core,
ConfiguratorContract $config,
AssetManagerContract $assets,
): void
{
$assets->add(Js::make('/js/app.js'));
}
// MoonShineServiceProvider
use MoonShine\AssetManager\Js;
use MoonShine\Contracts\AssetManager\AssetManagerContract;
use MoonShine\Contracts\Core\DependencyInjection\ConfiguratorContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
public function boot(
CoreContract $core,
ConfiguratorContract $config,
AssetManagerContract $assets,
): void
{
$assets->add(Js::make('/js/app.js'));
}
use Illuminate\Support\Facades\Vite;
use MoonShine\AssetManager\Js;
final class MoonShineLayout extends CompactLayout
{
protected function assets(): array
{
return [
Js::make(Vite::asset('resources/js/app.js'))
];
}
}
namespaces
use Illuminate\Support\Facades\Vite;
use MoonShine\AssetManager\Js;
final class MoonShineLayout extends CompactLayout
{
protected function assets(): array
{
return [
Js::make(Vite::asset('resources/js/app.js'))
];
}
}
use Illuminate\Support\Facades\Vite;
use MoonShine\AssetManager\Js;
final class MoonShineLayout extends CompactLayout
{
protected function assets(): array
{
return [
Js::make(Vite::asset('resources/js/app.js'))
];
}
}
namespaces
use Illuminate\Support\Facades\Vite;
use MoonShine\AssetManager\Js;
final class MoonShineLayout extends CompactLayout
{
protected function assets(): array
{
return [
Js::make(Vite::asset('resources/js/app.js'))
];
}
}
use Illuminate\Support\Facades\Vite;
use MoonShine\AssetManager\Js;
final class MoonShineLayout extends CompactLayout
{
protected function assets(): array
{
return [
Js::make(Vite::asset('resources/js/app.js'))
];
}
}
use MoonShine\AssetManager\InlineJs;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
$this->getAssetManager()
->prepend(InlineJs::make('alert(1)'))
->append(Js::make('/js/app.js'));
}
namespaces
use MoonShine\AssetManager\InlineJs;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
$this->getAssetManager()
->prepend(InlineJs::make('alert(1)'))
->append(Js::make('/js/app.js'));
}
use MoonShine\AssetManager\InlineJs;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
$this->getAssetManager()
->prepend(InlineJs::make('alert(1)'))
->append(Js::make('/js/app.js'));
}
namespaces
use MoonShine\AssetManager\InlineJs;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
$this->getAssetManager()
->prepend(InlineJs::make('alert(1)'))
->append(Js::make('/js/app.js'));
}
use MoonShine\AssetManager\InlineJs;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
$this->getAssetManager()
->prepend(InlineJs::make('alert(1)'))
->append(Js::make('/js/app.js'));
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
parent::onLoad();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
parent::onLoad();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
parent::onLoad();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
parent::onLoad();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
protected function onLoad(): void
{
parent::onLoad();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
На лету
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\Layout\Box;
Box::make()->addAssets([
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
]);
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\Layout\Box;
Box::make()->addAssets([
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
]);
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\Layout\Box;
Box::make()->addAssets([
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
]);
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\Layout\Box;
Box::make()->addAssets([
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
]);
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\Layout\Box;
Box::make()->addAssets([
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
]);
При создании компонента
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
];
}
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
/**
* @return list<AssetElementContract>
*/
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
];
}
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
/**
* @return list<AssetElementContract>
*/
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
];
}
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
/**
* @return list<AssetElementContract>
*/
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
];
}
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
/**
* @return list<AssetElementContract>
*/
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css')
];
}
}
При создании компонента через AssetManager
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function booted(): void
{
parent::booted();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function booted(): void
{
parent::booted();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function booted(): void
{
parent::booted();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
}
namespaces
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function booted(): void
{
parent::booted();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
}
use MoonShine\AssetManager\Css;
use MoonShine\AssetManager\Js;
use MoonShine\UI\Components\MoonShineComponent;
final class MyComponent extends MoonShineComponent
{
protected function booted(): void
{
parent::booted();
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}
}
То же самое как и у Component, так как Field является компонентом.
Основная тема
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
Компактная тема
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/css/minimalistic.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/css/minimalistic.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/css/minimalistic.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/css/minimalistic.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>
<x-moonshine::layout.assets>
@vite([
'resources/css/main.css',
'resources/css/minimalistic.css',
'resources/js/app.js',
], 'vendor/moonshine')
</x-moonshine::layout.assets>