Файлы статики
Подключение Javascript и CSS файлов
Необходимые библиотеки подключаем непосредственно в шаблонах в начале файла. Иногда допускается вызов и из контроллера.
JS-файлы ядра приложения
tpl::includeJS('autocomplete', true); - одна библиотека
tpl::includeJS('autocomplete', true, 3); - одна библиотека с указанием версии
tpl::includeJS(array('autocomplete','comments'), true); - несколько библиотек
- второй параметр true указывает на необходимость подключения из ядра
- название доступных библиотек можно найти в реализации метода
JS-файлы приложения
- подключение файла /public_html/js/bootstrap3.min.js
tpl::includeJS('bootstrap3.min', false); - одна библиотека
- подключение файла c учетом версии /public_html/js/bootstrap3.min.js?v=3
tpl::includeJS('bootstrap3.min', false, 3); - одна библиотека с указанием версии
Внешние JS-файлы
- подключение jQuery
tpl::includeJS('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js');
- подключение jQuery с учетом текущего протокола
tpl::includeJS(Request::scheme().'://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js');
CSS-файлы ядра
- при подключение js библиотек ядра необходимые css-файлы подключаются автоматически
CSS-файлы приложения
- подключение файла и директории css
- второй параметр true указывает на необходимость подключения файла из директории css
tpl::includeCSS('style', true); - /css/style.css
- подключение файла из директории js
tpl::includeCSS(SITEURL_STATIC.'/js/fotorama', false); - /js/fotorama.css
Внешние CSS-файлы
tpl::includeCSS('//example.com/style', false); - //example.com/style.css
Инициализирующий Javascript
Код js объявляемый в шаблонах необходимо обворачивать в js::start/stop вызовы:
<script type="text/javascript">
<?php js::start(); ?>
$(function(){
// код
});
<?php js::stop(); ?>
</script>
Обрамление необходимо для возможности в дальнейшем управлять последовательным подключением библиотек и расположением js кода одним блоком в футере.
Именование javascript классов и файлов
В случае если JS код объявлен в модуле, он связан с данным модулем и зачастую с конкретной сущностью и логикой работы конкретной страницы. В таком случае именование должно быть следующим:
jUsersSearch - класс отвечающий за работу страницы поиска пользователей
-
j- обязательная приставка -
Users- обязательное название модуляUsers, если ключевых сущностей в модуле несколько, дополняем названием данной сущности, например:-
jOrdersOfferForm - форма добавления/редактирования заявки
Offerв модулеOrders(заказы) -
jOrdersOfferChat - работа с формой комментария к заявке
Offerв модулеOrders(заказы)
-
jOrdersOfferForm - форма добавления/редактирования заявки
- обязательное название страницы или логического блока, например:
- Search - страница поиска
- Form - страница добавления редактирования сущности
- Register - страница регистрации
JS файл именуется следующим образом:
users.search.js - файл реализующий класс работы со страницей поиска пользователей
- название формируется из названия js-класса, только без приставки
j, разделение через точку. - файл располагается в директории /public_html/js/
Пример базового JS класса и его инициализации
var jUsersRegister = (function(){
var o = {delay:100}, inited = false, a = 100, b = {};
function init()
{
privateMethod();
}
function privateMethod()
{
}
return {
init: function(options)
{
if(inited) return; inited = true;
o = $.extend(o, options || {});
$(function(){
init();
});
},
publicMethod: function()
{}
};
}());
JS класс имеет вид закрытого класса с базовым методом init и входящим параметром options.
В методе init выполняется базовая инициализация класса.
Также есть возможноть объявлять открытые методы, в примере publicMethod и закрытые методы, в примере privateMethod.
Все свойства закрыты, в примере свойства a, b;
Параметры js-класса определяются данными переданными в метод init и доступными через свойство o (options), например o.delay.
Инициализация данного класса в шаблоне .php должна выглядеть следующим образом:
<script type="text/javascript">
<?php js::start(); ?>
jUsersRegister.init(<?= func::php2js(array(
'delay' => 50,
'param' => $integer,
'login_url' => Users::url('login'),
'lang' => array(
'email' => _t('users', 'E-mail адрес указан некорректно'),
'pass' => _t('users', 'Укажите пароль'),
),
)) ?>);
<?php js::stop(); ?>
</script>
Подробнее:
- Обязательное обрамление в
js::start,js::stop - При вызове метода
initвыполняем формирование js hash-объекта при помощи вызова методаfunc::php2js, тем самым передаем необходимые данные из php в js - Параметр
langобязателен - необходим для передачи всех необходимых строк используемых в js-классе, обратите внимание на вызов_t()функций
Именование class / id элементов в HTML коде
Все class / id элементов связанных с js кодом обязательно объявляем с префиксом j-
Другими словами, не привязываемся к css классам задающим элементам стиль.
class="link j-order-link-toggler" - дописали необходимый j- класс для привязки js
class="tabs j-tabs"
id="j-orders-tabs"
id="j-header-menu"
ID используем для именование общих блоков, классы для внутренних элементов.
<div id="j-cabinet-tabs">
<a href="#" class="j-tab">tab 1</a>
<a href="#" class="j-tab">tab 2</a>
</div>
Библиотеки идущие с ядром
autocomplete - автодополнение, например при выборе региона / пользователя
autocomplete.fb - автодополнение в стиле Facebook, используется для выбора тегов
fancybox2 - галерея Fancybox 2.x
fotorama - галерея Fotorama
history - кроссбраузерная реализация работы с History API
jcrop - библиотека реализующая интерфейс работы с thumbnail-изображением
maps - классы работы с картой
qquploader - ajax загрузчик файлов
tablednd - класс реализующий перемещение (ротацию) строк в таблице <table>
wysiwyg - bffWysiwyg редактор
Базовые функции ядра
В ядре реализованы некоторые базовые функции, используемые повсеместно. Объявлены они в рамках глобального класса bff (/public_html/js/bff/bff.js).
Вот некоторые из основных:
bff.redirect - выполняет редирект на указанный URL
bff.isEmail - проверка строки на соответствие валидному e-mail адресу
bff.ajax - все ajax запросы в приложении должны выполняться при помощи этого метода
bff.iframeSubmit - самбит формы через iframe (ajax), для случаев когда в форме есть input=file поля
bff.ajaxURL - формирование URL для выполнения ajax запроса
bff.maxlength - реализация ограничителя кол-во допустимых символов + счетчика в полях типа textarea, input=text
bff.st.includeJS - реализация подключения *.js файлов из javascript
bff.st.includeCSS - реализация подключения *.css файлов из javascript
bff.declension - склонение вида "1 файл, 2 файла, 5 файлов"
bff.cookie - работа с cookie данными из javascript
bff.map - методы работы с картами (Google, Yandex) - инициализация, вспомогательные методы
Также есть несколько функций объявленных в глобальной области видимости:
nothing - реализация обрыва выполнения события выше (event)
intval - приведение переменной к числу
Дополнения к jQuery:
$.autogrow - реализация резинового textarea, высота пересчитывается в зависимости от текста
$.scrollTo - скроллинг к необходимому HTML блоку
$.deserialize - реализация заполнения формы из параметров строки запроса
Для админ. панели класс bff расширяется дополнительно необходимыми функциями, используемыми в формах и списках админ. панели (/public_html/js/bff/admin/bff.js).
Вот основные из них:
bff.confirm - подтверждение перед выполнением действия, обвертка стандартного alert
bff.adminLink - формирование админ. ссылки средствами js
bff.userinfo - вызов popup с краткой информацией о пользователе
bff.onTab - переключение табов
bff.error - вывод сообщения об ошибке
bff.success - вывод сообщения об успешно выполненном действии
bff.ajaxToggle - реализация ajax переключателей включен/выключен
bff.ajaxDelete - реализация ajax удаления записи
bff.rotateTable - инициализация ajax ротации строк в таблице <table>
bff.formChecker - проверка заполнения обязательных полей в форме
bff.generateKeyword - генерация keyword на основе title
bff.datepicker - инициализация компонента datepicker для выбора даты