Your IP : 18.188.216.107


Current Path : /home/bitrix/ext_www/dev.home-comfort.in.ua/local/templates/home-comfort/_sources/
Upload File :
Current File : /home/bitrix/ext_www/dev.home-comfort.in.ua/local/templates/home-comfort/_sources/README.md

Работа с шаблоном
================

## Установка gulp ###

Для работы Gulp необходимо:

1. Установить на ПК [Node.js](https://nodejs.org/en/download/) *(на сервере разработки уже установлен, для него шаг пропускается)*
2. Установить Gulp глобально, команда в терминале: npm install -g gulp. *(на сервере разработки уже установлен, для него шаг пропускается)*
3. Установить локальные зависимости сборщика. В папке \_sources/ запустить команду: npm install
4. После завершения загрузки и установки зависимостей, можно запустить сборщик командой терминала gulp в папке \_sources/ *ключи запуска указаны ниже*

## Структура файлов и папок

```
(00) .
(01) +-- blocks
(02) |   +-- block-name
(03) |   |   +-- block-name.js
(03a)|   |   +-- block-name.dummy.js
(04) |   |   +-- block-name.scss
(05) |   |   +-- block-name.jade
(06) |   +-- ...
(07) +-- docs
(08) +-- fonts
(09) |   +-- FontAwesome
(10) +-- gulp_tasks
(11) |   +-- config.js
(12) |   +-- tasks
(13) |   |   +-- taskName.js
(14) |   |   +-- ...
(15) +-- gulpfile.js
(16) +-- img
(17) |   +-- content
(18) |   +-- logo.png
(19) |   +-- logo@2x.png
(20) |   +-- ...
(21) +-- js
(22) |   +-- vendor
(23) |   +-- global.js
(24) |   +-- script.js
(25) |   +-- tech.js
(26) +-- package.json
(27) +-- pages
(27a)|   +-- layout
(28) |   +-- page-name.jade
(29) |   +-- ...
(30) +-- public
(31) +-- sass
(32) |   +-- _layout.scss
(33) |   +-- _variables.scss
(34) |   +-- fontawesome.scss
(35) |   +-- global.scss
(36) |   +-- helpers
(37) |   |   +-- FontAwesome
(38) |   |   +-- _grid.scss
(39) |   |   +-- _mixins.scss
(40) |   |   +-- fonts.scss
(41) |   |   +-- optimize.scss
(42) |   +-- print.scss
(43) |   +-- tech.scss
(44) +-- tmp
```

#### (01) blocks

Тут располагаются блоки, каждый в своей папке. Папка блока должна называться строго названием блока. Внутри папки могут быть файлы scss, js, jade, каждый из которых называется строго по названию блока.
Не допускается в файле блока хранить более одного блока.

#### (03) block-name.js

Если для работы блока требуется js-код, он должен быть описан здесь. Js-функции должны быть обёрнуты в свой scope ```$(function() { ... });```.
Скрипт должен быть готов к тому, что блока на странице может не быть, либо он может встречаться несколько раз.

#### (03a) block-name.dummy.js

Если для демонстрации работы блока в статической версии требутся JSON-данные, либо аякс-запросы c "рыбными" ответами — это должно быть в отдельном файле (в этом). Файлы *.dummy.js не попадают в production-версию.

#### (04) block-name.scss

SCSS стили блока. Как правило имеют следующий вид:

```
.block-name {
   &__element {
      some-style: some-value;
   }
   &__another-element {
      some-style: some-value;
	  &.is-modificator {
	     some-style: some-value;
	  }
   }
   
   @media #{$media-phone-landscape} {
      &__element {
	     // модификация стилей для мобильной версии
	  }
	  &__another-element {
	     // модификация стилей для мобильной версии
	  }
   }
}

.block-name.is-modificator {
   .block-name {
      &__element {
	     // Стили элемента для блока с модификатором
		 // Эта конструкция компилируется в ".block-name.is-modificator .block-name__element"
	  }
   }
}
```

#### (05) block-name.jade

Jade (pug) разметка блока. Позволяет собирать страницы из блоков локально. Иногда может расходиться с тем, что привязано на сайте.
Используется для вёрстки новых блоков перед их привязкой в шаблон компонента.

#### (07) docs

Кое-какая документация. Здесь лежит инструкция по адаптивной сетке (Webrofy Grid)

#### (08) fonts

Шрифты. Здесь лежит FontAwesome, здесь должен лежать кастомный иконочный шрифт, если он используется на проекте. Здесь в __редких__ случаях должны лежать файлы web-шрифтов, используемых на сайте.
Обычно шрифты подключаются через GoogleFonts или Adobe TypeKit и не требуют локальных файлов.

#### (10) gulp_tasks

Задачи для Gulp. Разложены по отдельным файлам.

#### (16) img

Картинки. Должны лежать все в корне, кроме картинок для контента.

#### (17) content

Изображения для контента — фотографии, баннеры. Всё то, что потом будет загружаться через админку (и изменит свой URL).
В SCSS-стилях не должно быть ссылок на изображения из этой папки.

#### (19) logo@2x.png

Ретина-версии картинок (в удвоенном разрешении) должны называться аналогично стандартной версии картинки, но с окончанием @2x

#### (21) js

Общие скрипты

#### (22) vendor

jQuery, jQuery-ui, fancybox, slick slider и прочие вендорные скрипты.

Для добавления нового js плагина нужно положить его в /js/vendor/%Название скрипта%/%файл скрипта%.js, а также **обязательно** добавить файл /js/vendor/%Название скрипта%/%файл скрипта%.jade, в котором прописан код 
```- scriptList[1].push('./js/vendor/%Название скрипта%/%файл скрипта%.js');```
Примеры есть в папке, так он автоматически включится в сборку.

#### (23) global.js и (24) script.js

Глобальные функции. По нелепой случайности оказавшиеся разеделенными на два разных файла. В будущем будут слиты в один общий.

#### (25) tech.js

Скрипт используется только в локальной сборке для демонстрации блоков.

#### (27) pages

Статическая вёрстка страниц в формате jade (pug). В теле страницы как правило переопределяются только конкретные области дефолтного шаблона страницы.

#### (27a) layout

Шаблоны страниц, наследуются конкретными страницами.

#### (30) public

В эту папку генерируются файлы при локальной сборке. Безопасно её очищать.

#### (31) sass

Папка с общими sass-стилями

#### (32) _layout.scss

Блок layout отвечает за основную разметку страницы. Управляет расположением других блоков (позиционирует их друг относительно друга).

#### (33) _variables.scss

Переменные. Для удобства большая часть стилей "по-умолчанию" завязана за переменные. Стилизацию вёрстки следует начинать именно с этого файла.
Все переменные для конкретного проекта также должны быть добавлены сюда.

#### (35) global.scss

Глобальные стили. Здесь определяются общие стили (h1, h2, p, ul...), стили контента (.content-area) 

#### (36) helpers

Прочие включаемые файлы

#### (38) _grid.scss

Адаптивная сетка. См. описание в папке /docs

#### (39) _mixins.scss

Наши миксины. Обязательно изучить

#### (40) fonts.scss

Подключение иконочных и кастомных шрифтов

#### (41) optimize.scss

Аналог reset.css

#### (42) print.scss

Стили для печати

#### (43) tech.scss

Используется только в локальной сборке для демонстрации блоков

#### (44) tmp

Временная папка, используется сборщиком

## Ключи запуска ##
- --local 

Исключает ключ --production, сборка идёт в папки public/js, public/css и т.п.; собираются блоки в public/blocks.html, страницы в public/*.html, изображения копируются в public/img, шрифты в public/fonts, запускается browserSync.

Ключ используется в случае локальной сборки (без битрикс).

- --production 

Исключает ключ --local, сборка идёт в папку шаблона сайта: ../css, ../js, ../img, ../fonts (т. е на уровень выше, в корень шаблона сайта на битрикс); не собираются блоки и страницы, собирается быстро

- --fast 

Используется с ключом --local, позволяет собирать только изменённые страницы, а не все, работает быстрее

- --page название-страницы

Локальная сборка базовой страницы. Заменяет ключи --local и --fast, пересобирает jade конкретной страницы на каждом изменении jade блока или страницы. Например: gulp --jade news-list-default

## Команды запуска ##
- gulp

Сборка вёрстки. Скрипт компилирует sass и собирает в один css, собирает и объединяет js, логика сборки определяется ключами запуска

- gulp clean. 

Удаляет автоматически собираемые файлы. Нужно использовать с ключами --local или --production. Если появляется ошибка, связанная с правами файлов, запускается эта команда. *По умолчанию один из модулей пытается выполнить chmod, на что прав не хватает. Но при этом у gulp хватает прав эти файлы удалять.*

## Как добавить вендорный js ##



## Что ещё нужно знать ##
Не надо запускать отдельные таски, например gulp sass --production. В сборщике есть неочевидные зависимости, каких-то файлов может не хватать при запуске одной команды. Все возможные отдельные команды запуска указаны выше.

Почему jade, а не pug? Несмотря на то, что jade уже переименовался в pug, мы продолжаем его использовать из-за проблем с производительностью. Пока мы ждём исправления этой ошибки или другого решения, приходится создавать файлы jade и запускать соответствующие устаревшие модули.

Сборка с ключом --local на сервере работает медленно, эта проблема известна, но нормального решения пока нет. Локально собирается обычно быстрее. В плане есть небольшое обходное решение: указывать параметром название страницы, чтобы он не собирал всё подряд, но это пока не реализовано.