К содержанию
Medusa
Документация

Vite

Medusa\Helpers\Frontend\Vite отвечает за подключение ассетов и подготовку mount/state для frontend-приложений через fluent-API helper-класса.

Выбор frontend-сущности

Для работы с Vite используется конструктор new Medusa\Helpers\Frontend\Vite($entity), где $entity — имя каталога внутри одного из зарегистрированных source-каталогов frontend:

use Medusa\Helpers\Frontend;

$vite = new Frontend\Vite('themes');

Изменение имени entry-файла

По умолчанию helper использует файл entry.js. Имя entry-файла можно изменить методом $vite->setEntryFilename($filename) до первого получения секций:

$vite->setEntryFilename('entry.custom.js');

Метод возвращает текущий объект, поэтому его можно использовать в цепочке вызовов.

Регистрация entry-блока

Регистрация entry-блока выполняется методом $vite->include($name, $data = []), где $name — имя каталога внутри зарегистрированного source-каталога frontend, например, внутри www/frontend/{entity}/, а $data — состояние, передаваемое во frontend:

$vite->include('default', [
    'title' => 'Добро пожаловать!',
    'subTitle' => 'Это страница приветствия!',
]);

Метод include() возвращает текущий объект, поэтому может вызываться цепочкой несколько раз.

Получение preload-тегов

Получение тегов выполняется методом $vite->preload($toString = false):

$preload = $vite->preload(true);

Метод preload() по умолчанию возвращает массив тегов. Если передать аргумент $toString со значением true, метод вернёт готовую HTML-строку.

Получение CSS-тегов

Получение тегов выполняется методом $vite->css($toString = false):

$css = $vite->css(true);

Метод css() по умолчанию возвращает массив тегов. Если передать аргумент $toString со значением true, метод вернёт готовую HTML-строку.

Получение JavaScript-тегов

Получение тегов выполняется методом $vite->js($toString = false):

$js = $vite->js(true);

Метод js() по умолчанию возвращает массив тегов. Если передать аргумент $toString со значением true, метод вернёт готовую HTML-строку.

Получение JSON-данных состояния

Получение данных выполняется методом $vite->json($toString = false):

$json = $vite->json(true);

Метод json() по умолчанию возвращает массив тегов. Если передать аргумент $toString со значением true, метод вернёт готовую HTML-строку.

Получение mount-контейнера

Получение контейнера выполняется методом $vite->html($toString = false):

$html = $vite->html(true);

Метод html() по умолчанию возвращает массив тегов. Если передать аргумент $toString со значением true, метод вернёт готовую HTML-строку.


Пример содержимого файла www/frontend/themes/default/entry.js:

import {mount} from '@shared/js/mount';
import {state} from '@shared/js/state';

import {createApp} from 'vue';
import DefaultTheme from './DefaultTheme.vue';
import './style.css';

mount('default')
   .state(state)
   .each((node, props) => {
       createApp(DefaultTheme, props).mount(node);
   });

Пример содержимого файла www/frontend/themes/default/DefaultTheme.vue:

<script setup>
import {defaultThemeProps} from './props.js';

defineProps(defaultThemeProps);
</script>

<template>
 <h1>{{ title }}</h1>
 <p>{{ subTitle }}</p>
</template>

Пример содержимого файла www/frontend/themes/default/props.js:

export const defaultThemeProps = {
  title: {
    type: String,
    required: true,
  },
  subTitle: {
    type: String,
    required: true,
  },
};

Пример содержимого файла www/frontend/themes/default/style.css:

h1 {
   color: blue;
}

p {
   color: green;
}