MVC компонент способен подключать внутри себя все Javascript скрипты и CSS таблицы стилей с учетом всех зависимостей при необходимости. У вас более не будет ошибки, когда вы подключаете Jquery дважды - в главном шаблоне и во внутреннем. Вам не придется ставить Jquery в корень сайта, даже, если он там не используется, а используется только на второстепенной странице, тем самым увеличивая траффик и нагрузку на клиента. У вас не будет ошибки, когда вы подключаете JqueryUI до подключения Jquery, или вовсе забываете подключить при этом Jquery. Вам больше не придется вспоминать, где у вас лежит каждая из библиотек и вспоминать синтаксис, как их подключать. Вам больше не нужно будет вспоминать синтаксис включения версии библиотеки в зависимости от версии браузера.
Вам также не нужно беспокоиться по поводу оптимизации быстродействия, когда CSS должны подключаться в начале страницы, а JS в конце. Все происходит автоматически.
Для включения таблицы стилей или Javascript библиотек - используется скрипты
c\mvc::addJs($script);
c\mvc::addCss($script);
Вы можете указать в качестве аргумента абсолютный, или относительный путь к скрипту, или к таблице стилей.
Вы можете также обращаться к скриптам, используя ключевые слова. Но предварительно - вам нужно завести справочник ключевых слов. Для этого - в папке global-config
- нужно создать файл mvc.php
примерно следующего содержания
<?php
//css
self::$css_dict['bootstrap']='/css/bootstrap.min.css';
self::$css_dict['select2']='/css/select2.css';
self::$css_dict['jqueryui']=self::$css_dict['jquery_ui']=self::$css_dict['jquery-ui']='http://...';
self::$css_dict['responsive-tables']='...';
//js
self::$js_dict['jquery']='http://...';
self::$js_dict['bootstrap']=array('url'=>'http://.../bootstrap/bootstrap.min.js','requires'=>'jquery');
self::$js_dict['lazyload']='http://common.euroset.lan/js/lazyload.js';
self::$js_dict['jqueryui']=self::$js_dict['jquery_ui']=self::$js_dict['jquery-ui']=array('url'=>'http://.../jquery-ui.js','requires'=>'jquery');
self::$js_dict['sticky-tables']=array('url'=>'http://.../sticky-tables.js','requires'=>'jquery','if'=>'gt IE 8');
// core scripts
self::$js_dict['core_ajax']=self::$js_dict['core']=array('url'=>'http://.../core_ajax3.js','requires'=>'jquery');
//polifills
self::$js_dict['placeholder']=array('url'=>'http://.../placeholder.js','requires'=>'jquery','if'=>'lte IE 8');
Секция self::$css_dict
и self::$js_dict
- отвечает за справочники CSS и JS соответственно. Можно указывать значение, как строку. Javascript справочник можно дополнительно указать как массив, содержащий следующие элементы
url
- относительный путь/абсолютный путьrequires
- зависимые библиотеки. Можно указать, как строку, или как одномерный массив, если библиотек несколькоif
- условие, при котором библиотека будет включена. Строка использования библиотеки добавится, но браузер сам будет решать - грузить ее или нет ('if'=>'lte IE 8')version
- название версии скрипта. Используется, чтобы очистить кеш всех браузеров при обновлении библиотекиСтоит учесть, что css файлы лучше указывать, с ссылкой на тот же домен (относительные пути с копированием файлов), если вы еще поддерживаете IE8 и вынуждены подгонять адаптивную верстку @media
через respond.js. Если IE8 в прошлом - можете смело использовать абсолютные пути. Точно также следует учесть, что для подгрузки шрифтов - нужно добавить заголовок CORS через .htaccess
В файл очень желательно запихнуть путь к core_ajax, если вы собираетесь всецело использовать ajax компонено (описаный далее).
Элементы форм и таблиц будут искать sticky-tables и placeholder заголовки автоматически. Следует также их предусмотреть, если они нужны
В файле должны лежать только общие скрипты, доступные для всех ваших проектов. Стоит учесть, что в правильно построенном MVC компоненте - файлы index.css
и index.js
внутри папки app
автоматически подцепляются при обращении к конкретной странице и вам не нужно думать об их включении.
Часто, CSS и JS идут вместе одним компонентом. Bootstrap, Jquery-UI. Чтобы не писать подключение каждой из строк - существует альтернативный синтаксис.
c\mvc::addComponent($script);
Функция подгружает скрипты, более ничего.
У данного метода есть только одно ограничение - вы не можете использовать скрипты <script>$()</script>
с использованием сторонних библиотек, т.к. они включаются в самом конце страницы. Для решения данной ситуации - необходимо исользовать
Чтобы добавить произвольный скрипт в конец подгружаемых библиотек - вы можете использовать функцию
c\mvc::addScript($script);
Весь произвольный скрипт будет добавлен последовательно в очередь после загрузки всех вышестоящих скриптов. Также - можете все пользовательские скрипты подгружать через addJs или создав файл index.js в указаной папке app при полноценном использовании скелетона.
бывают случаи, когда вам нужно передать произвольную переменную в Javascript, включая массив. Чтобы это можно было легко сделать - необходимо использовать метод
c\mvc::addJsVar($var,$value);
В случае, когда нужно передать переменную, как массив, а не объект - используется метод
c\mvc::addJsVarAsArray($var,$value);
Если вы используете полноценный MVC компонент - скрипты будут выведены на экран автоматически в нужном месте. Если же вы хотите вывести скрипты вручную - используйте методы
c\mvc::drawJs();
c\mvc::drawCss();
Возможны ситуации, когда новый слой требует отключения ранее установленных скриптов и переменных. Скрипты можно удалить все разом, без возможности удалить их точечно
Для удаления скриптов, добавленных ранее - предусмотрены функции
c\mvc::clearScripts();
c\mvc::clearScriptsFull();
Первая удаляет все скрипты и стили, кроме помеченых признаком hard, то есть кроме системных скриптов, инициализировнных до начала инициализации приложения. Данный метод полезно использовать, когда вы задаете скрипты, единые для всего приложения и их нужно сохранить. Например, если вы удаляете вышестоящий лайаут и там не требуются некоторые старые стили. А также это сохраняет все отладочные скрипты
Второй - удаляет полностью все скрипты и стили без исключения
Соответственно - после удаления скриптов - все повторные стили необходимо набирать заново.
Создано при помощи сервиса Core CMS