Как реализовать отображение конкретных виджетов(компонентов) на странице?
Нужно реализовать проект на подобии конструктора сайтов (в моём случае конструктор админок)
В основном это виджеты(компоненты) такие как формы, таблицы, календари, графики и т.д.
За основу взят react и nodejs.
Сценарий следующий? в котором бы хотелось прояснить пару моментов:
1)Пользователь заходит в админ панель и переходит в раздел конструктора
2)Конструирует исходя из возможных виджетов(ранее созданых компонентов) свой проект
3)Публикует его
И тут есть моменты, которые хочу прояснить:
Когда пользователь создаёт админку, он, к примеру, видит в отдельном окне все доступные виджиты для создания проекта, на каждой новой странице он привязывает нужные ему элементы(виджиты) и вот тут вопрос:
1)Когда в опубликовонном проекте он заходит на свои страницы, как лучше реализовать вывод тех виджетов, что он указал ранее в конструкторе ?
2)Не перебирать же мне при каждом переходе пользователя на его страницах все доступные виджеты и смотреть какой из них привязан ?
3)Возможно нужно для создаваемого проекта билдить только ту часть кода, которая нужна для отображения конкретно указанных виджетов ?
Именно как генерация статичных html страниц и отдельных ресурсов(css, js, img и т.д.) не предусмотрено, только ssr.
Пункт 2 - это проектирование базы данных и из него можно решить другие пункты. Таблицы "widgets", "users", "user_widget" (т.е. связь многие-ко-многим), при входе на страницу админки найти у юзера все привязанные типы виджетов и исходя из набора подтянуть куски шаблонов.
Daria Motorina, то что в бд я должен прописывать тип шаблона и выстраивать связь я понимаю.
Вопрос в том как доставлять и хранить кодовую базу виджетов ?
К примеру пользователь создал проект, где на одной из страниц он выводит только таблицу с данными, на другой странице форму для добавления этих данных...
Такие виджеты как календарь или графики он не добавлял в свой проект и тут вопрос: что делать с теми виджетами которые не используются ? Не тянуть же их в проект пользователя ради 2 виджетов, когда вся библиотека состоит из 20+ виджетов...
iordania, ну виджет будет какой-то папкой модуля внутри папки widgets. У виджетов должен быть общий интерфейс. Для страницы выбранных пользователем виджетов будет что-то вроде этого (псевдокод):
function render_user_widgets(user_id) {
user = find_user(user_id);
widgets = user->get_widgets();
foreach (widgets as widget) {
widget->render();
}
}
Главное правило - чтобы виджеты имели одинаковый способ рендеринга. Если виджеты предоставляются одной вендорной библиотекой и ее нельзя поделить, то так и будет грузиться всё, а если она делима, то надо в коде организовать модульность виджетов. Это детали реализации