@Kirill-Gorelov
С ума с IT

Как организовать разработку виджетов для самописного сайта?

Всем привет, парни.
Я возможно задаю вопрос немного не правильно, но тем не менее, попробую.

Хочу попробовать отображать виджеты на сайте для авторизованных пользователей.
И для примера хотел бы создать виджет конвертора валют.
С базой более менее понятно, что отображать этот виджет для того, кто его включил.
А вот как отобразить виджет в окне клиента, это не очень понятно. Ведь код храниться в файле. И код нужно отображать только для тех, кто его включил. И таких виджетов может быть несколько! Пример и что бы было понятно, что я имею ввиду. Это как у яндекс метрики, там можно добавлять виджеты, перемещать и тд. Привел как пример, потому что все знаю и все видели как это работает.

Извините за корявость, подскажите, пожалуйста.
  • Вопрос задан
  • 374 просмотра
Решения вопроса 1
@kulaeff
Front-end developer
Суть:
Хранить в БД инфу о том, какие виджеты включены у юзера, затем на странице, на которой нужно выводить эти виджеты делаем запрос в БД (аякс-запросом), получаем инфу, в цикле смотрим что это за виджет и инициализируем его.

Пример:
Предположим, имеется страница mysite.ru/widgets. Также имеется три виджета, код которых находится в файлах widget.simple.js, widget.chart.js и widget.table.js. Также примем по умолчанию, что ты используешь jQuery.
На этой странице делаем запрос на сервер (например, с помощью $.get), сервер достает из БД инфу о том, какие у юзера включены виджеты и отдает нам в таком виде:

[{
  type: 'simple',
  data: 100
}, {
  type: 'table',
  data: []
}, {
  type: 'chart',
  data: []
}]


что означает, что у юзера включены все три виджета. Теперь, когда мы получили данные, нужно пройтись по ним в цикле. Сам запрос и обработка результатов будут выглядеть примерно так:

$.get(url).done(function(widgets) {
    widgets.forEach(function(widget) {
        switch (widget.type) {
            case 'simple':
                new SimpleWidget(widget.data);
                break;
            case 'chart':
                new ChartWidget(widget.data);
                break;
            case 'table':
                new TableWidget(widget.data);
                break;
        }
    });
});


где url - это страница, которая будет отдавать нам json. Классы SimpleWidget, ChartWidget и TableWidget - сами виджеты. Конечно, тут все упрощено, ведь помимо данных для виджета ему еще нужно передавать инфу о том, где именно нужно отобразить виджет (например, в виде селектора, '.simple-widget-container') и прочую нужную информацию. Логика виджетов (а точнее паттерн, который они реализуют) тут не принципиальна, это выходит за рамки вопроса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Mirkom63
@Mirkom63
Я программист
Так если это для твоего же проекта, то концептуально ничего не меняется...
Подключаешь нужные js,css для работы виджета и подключаешь php-файл (или какой там у тебя язык) там где необходимо вывести виджет.
Просто называешь это виджетом.

Не правильно понял?
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Виджет - это html разметка + набор зависимостей (css, js, а может и картинки)
На сервере при формировании html, проверяем залогиен ли пользователь, есть ли у него отметка показывать виджет и соответственно вставлям его или нет, со всеми зависимостями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы