AngularJS front-end для
Drupal.
От этапа настройки до
готового проекта
❖ О проекте
❖ Почему AngularJS 1.x?
❖ Почему Angular 2+?
О проекте и условиях
● Платформа для саб-сайтов
Homepage: https://domain.com
Subsite homepage: https://domain.com/subsitename
● Система гибких виджетов
● Большой объем данных
● Сжатые сроки и неопытные члены команда
Почему AngularJS 1.x?
● Большая база знаний и готовых решений (ограниченное
время, фокус на бизнес логике)
● Активное, отзывчивое сообщество
(https://t.me/angular_js)
● Прост в освоении
● Все еще развивается
● Angular 2+ сайт написан на AngularJS :)
Почему Angular 2+?
● Отсутствие большой базы знаний и готовых решений
(менее ограниченное время)
● Активное, отзывчивое сообщество
(https://t.me/angular_ru).
● TypeScript
● ...
❖ Headless Drupal
❖ Drupal theme
Headless Drupal. Front End структура
Drupal theme
Подключение скриптов
HTML через $templateCache
Установка $templateCache
● Grunt
$ npm install grunt-angular-templates
● Gulp
$ npm install gulp-angular-templatecache
Headless Drupal
● полная автономия Angular от Drupal темы (+);
● удобно поддерживать и расширять (+).
Drupal тема
● авторизация админа и пользователей (+);
● drupalSettings (+);
● мультиязычность (+);
● интеграция модулей, админ toolbar и Drupal меню (+).
AngularJS generators
Angular сборка от yeoman
http://yeoman.io/ - инструмент для создания сборки.
https://github.com/yeoman/generator-angular - cборка
для Angular 1 (grunt, gulp)
Шаги :
● $ npm install -g grunt-cli bower yo
generator-karma generator-angular
● $ yo angular
Yeoman Angular generator
● Простота установки;
● gulp или grunt;
● templates и минификация проекта;
● console commands:
yo angular:service myService
yo angular:controller myController
● karma тесты.
❖ HTML5 push state
❖ UI Router
Routing. Subdomains
HTML5 pushState
● Красивый URL:
C pushState: https://domain.com/node-name
Без: https://domain.com/#!/node-name
● Настройка AngularJS
● Настройка сервера / Drupal
UI Router
● Path, query параметры, а также non-url параметры
● Архитектура приложения на основе state
● Tabs на основе state
● Resolve
● Subdomains
❖ Фильтрация и сортировка.
❖ Angular или Drupal
Angular сортировка или фильтрация
Drupal фильтрация и сортировка
.state('articles', {
url: '/articles?filter&page,
params: {
filter: {
value: 'A',
squash: true
},
page: {
value: '1',
squash: true
}
}
})
Запрос на сервер:
/articles/A/1?_format=json
➢ Необходим при
больших объемах
данных
➢ Сортировка,
фильтрация и
пейджинг.
DrupalAngular
➢ Небольших объемах
данных
➢ без лишних запросов
➢ Прост в применении
Интеграция AngularJS
templates и Drupal. Widgets
Интеграция AngularJS templates и Drupal
● Цель - страницы настраиваемые администратором
● Возможности Drupal
● Способы решения
Компонентный подход
Виджеты
“Подводные камни”
“Подводные камни”
➢ Прототипирование
➢ Local и Dev окружение
➢ Drupal как proxy для Web Services
➢ Drupal.t(), drupalSetting для Headless Drupal
➢ Drupal 404 page
AngularJS и SEO
AngularJS и SEO
● https://prerender.io/
● Deprecating of Google AJAX crawling scheme
(https://webmasters.googleblog.com/2015/10/deprecati
ng-our-ajax-crawling-scheme.html)
● Используйте Fetch as Google
(https://www.google.com/webmasters/tools/googlebot-f
etch)
● ⚠ Baidu поиcковик
Эпилог

Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk