Перейти к основному содержимому

Загрузка ассетов в интерфейсе администратора

Если вам необходимо загрузить ресурсы (JS, CSS) в интерфейс администратора (Admin UI) или в режим редактирования (Editmode), у вас есть два варианта в зависимости от того, делаете вы это из бандла Pimcore или из другого места.

Бандлы Pimcore

Просто добавьте интерфейс PimcoreBundleAdminClassicInterface в класс вашего бандла. Данный интерфейс предписывает реализацию следующих методов:

  • getJsPaths
  • getCssPaths
  • getEditmodeJsPaths
  • getEditmodeCssPaths

Для удобной реализации всех четырех методов, требуемых интерфейсом, вы можете использовать трейт BundleAdminClassicTrait.

Encore

Поскольку Pimcore использует Encore для сборки ресурсов, он предоставляет вспомогательный класс EncoreHelper для включения скомпилированных файлов в ваш бандл.

Вы можете использовать метод EncoreHelper::getBuildPathsFromEntryPoints, чтобы получить все пути к ресурсам и загрузить их с помощью методов, упомянутых выше.

Этот метод принимает путь к файлу entrypoints.json в виде строки и возвращает массив путей к собранным файлам.

Следующий пример иллюстрирует загрузку файлов, собранных через Encore:

use Pimcore\Extension\Bundle\AbstractPimcoreBundle;  
use Pimcore\Extension\Bundle\PimcoreBundleAdminClassicInterface;
use Pimcore\Extension\Bundle\Traits\BundleAdminClassicTrait;
use Pimcore\Extension\Bundle\Traits\PackageVersionTrait;
use Pimcore\Helper\EncoreHelper;

class EncoreBundle extends AbstractPimcoreBundle implements PimcoreBundleAdminClassicInterface
{
use BundleAdminClassicTrait;
use PackageVersionTrait;

public function getCssPaths(): array
{
return EncoreHelper::getBuildPathsFromEntrypoints($this->getPath() . '/public/build/encorebundle/entrypoints.json', 'css');
}

public function getJsPaths(): array
{
return EncoreHelper::getBuildPathsFromEntrypoints($this->getPath() . '/public/build/encorebundle/entrypoints.json');
}

public function getPath(): string
{
return \dirname(__DIR__);
}

// ...
}

На основе событий

Вы можете добавить дополнительные пути для загрузки, обрабатывая события, определенные в BundleManagerEvents. Например, чтобы загрузить JS-файл при инициализации интерфейса администратора, создайте слушатель событий (EventListener), как показано ниже (подробности реализации и регистрации слушателей см. в разделе События):

<?php  

namespace App\EventListener;

use Pimcore\Event\BundleManager\PathsEvent;
use Pimcore\Event\BundleManagerEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class AdminAssetsListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
BundleManagerEvents::JS_PATHS => 'onJsPaths'
];
}

public function onJsPaths(PathsEvent $event): void
{
$event->addPaths([
'/bundles/app/js/admin.js'
]);
}
}


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.