seditio / yukon

Cotonti Siena Admin Panel based on Bootstrap 5 and Font Awesome
1 stars 4 forks source link

Единый источник bootstrap для всей CMF #5

Open macik opened 10 years ago

macik commented 10 years ago

Я развиваю тему того, что для различных компонентов использующих Bootstrap (плагины/модули/темы оформления) необходим единый «контейнер» с файлами Bootstrap. Чтобы каждый плагин/тема не тащили свою копию, создавая зоопарк версий, и возможные коллизии.

Для этих целей написал небольшую оболочку для бутстрапа. За счет которой он устанавливается в систему, и предоставляет простой интерфейс для загрузки файлов из «единого источника» всем остальным модулям.

Вот тут расписал немного подробностей: http://www.cotonti.com/forums?m=posts&q=7681 https://github.com/Kilandor/cotonti.com/issues/11

Вот ссылка на сам плагин: https://github.com/macik/cot-bootstrap/ Тут некоторое описание на русском:
https://github.com/macik/cot-bootstrap/blob/master/README_ru.md

Если не вдаваться в подробности, то вот рабочий пример для «Юкона» — надо в блок загрузки ресурсов header.tpl добавить 2 условия (проверка на наличие бутсрапа в системе):

    <!-- IF {PHP.cfg.bootstrap} -->
    <link href="{PHP.cot_bootstrap.css_file}" type="text/css" rel="stylesheet" />
    <!-- ELSE -->
    <link href="http://yandex.st/bootstrap/3.0.3/js/bootstrap.min.css" type="text/css" rel="stylesheet" />
    <!-- ENDIF -->
    <link href="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/css/font-awesome.min.css" type="text/css" rel="stylesheet" />
    <link href="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/css/styles.css" type="text/css" rel="stylesheet" />
    <link href="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/css/overrides.css" type="text/css" rel="stylesheet" />
    <link href="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/css/modalbox.css" type="text/css" rel="stylesheet" />

    <!-- IF {PHP.cfg.bootstrap} -->
    <script src="{PHP.cot_bootstrap.js_file}" type="text/javascript"></script>
    <!-- ELSE -->
    <script src="http://yandex.st/bootstrap/3.0.3/js/bootstrap.min.js" type="text/javascript"></script>
    <!-- ENDIF -->
    <script src="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/js/jquery.cookie.js" type="text/javascript"></script>
    <script src="{PHP.cfg.themes_dir}/admin/{PHP.cfg.admintheme}/js/js.js" type="text/javascript"></script>

После этого весь бутстрап из дистрибутива Юкона можно смело выкидывать, он будет грузиться либо из центрального «источника», либо с CDN, если «оболочка» бутстрап не установлена в системе.

seditio commented 10 years ago

Мне идея нравится. Пожалуй, попробую потестировать.

seditio commented 10 years ago

Кстати, есть сайты, в которых тема на Bootstrap 2, а админка новая, на Bootstrap 3. Как в таких случаях поступать?

macik commented 10 years ago

Bootstrap wrapper в основном нацелен на клиентскую часть, т.е. темы оформления сайта и плагины использующие внутри себя бустрап. Админка же у нас, исторически, стоит несколько особняком. И в принципе мне такой подход нравится, т.к. сайт может быть (для) своих нужд архи-примитивным, но админка должна оставаться всё тем же удобным и функциональным инструментом. Такой подход (полное разделение), кстати, используют многие CMS.

Но…в чем суть cot-bootstrap? В том, чтобы удобно поддерживать единую (желательно актуальную) версию, где это возможно, для последующего простого обновления (плюс единое переключение на CDN, если нужно).

Поэтому если тема на BS2, то вероятно ей не нужен враппер.

seditio commented 10 years ago

Да все это понятно. Просто надо указать в описании номер версии и дать пояснение по таким вот случаям

macik commented 10 years ago

Номер версии соответствует версии плагина и наоборот. Немного дополнил README_ru.md

seditio commented 10 years ago

Ок, и еще: актуальная версия уже -- 3.2.0

macik commented 10 years ago

Да, в курсе. Затык в том что я внутри для рускоязычных я использую CDN яндекса, как самый быстрый. А они до сих пор не выложили на него свежих версий. Видимо придется для всех использовать CDN гугл или jsDelevr.

seditio commented 10 years ago

Раз такая пьянка пошла, сделай уж сразу и Font Awesome

macik commented 10 years ago

Ок. С очередной версией.

seditio commented 9 years ago

Так, а если в админке bootstrap нужен, а во front-end нет, что плагин будет делать?

macik commented 9 years ago

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

В нормальном режиме в конкретной теме (будь то админка или фронт-енд, в файле theme.rc.php) должен быть явный вызов для загрузки, типа такого:

global $cot_bootstrap;
    // Проверяем установлен ли плагин, версию бутстрапа и грузим необходимые файлы
    if ($cfg['bootstrap'] && version_compare($cfg['bootstrap'], '3.0.0', '>=')) {
        cot_rc_add_file($cot_bootstrap['css_file']);
        cot_rc_add_file($cot_bootstrap['theme_file']);
        cot_rc_link_footer($cot_bootstrap['js_file']);
    }

Исключение составляет включенный в настройках плагина параметр «автозагрузка» (по умолчанию он выключен) — тогда плагин сам загрузит файлы бутстрапа и в админке и в скине.