Top Banner
35

Drupalcon Mumbai

Apr 13, 2017

Download

Technology

Sumit Kataria
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Drupalcon Mumbai
Page 2: Drupalcon Mumbai

A Brand New Website / App in AngulaJS | Ionic : Reusing your old siteA Brand New Website / App in AngulaJS | Ionic : Reusing your old site

Sumit KSumit K

Angular JSAngular JS

IonicIonic

http://goo.gl/ACi2tP

Page 3: Drupalcon Mumbai

Mobile App or A BrandNew Website in

AngularJS

By: SUMIT KATARIA

Page 4: Drupalcon Mumbai

What it means to me?What it means to me?

Better or Mess?Better or Mess?

DECOUPLING DRUPALDECOUPLING DRUPALREALLY?REALLY?

Page 5: Drupalcon Mumbai

Really can we save 70% of our budget and still get an amazingly fast CMS driven website?

So what is this content as a service and decoupled CMS? You can power multiple websites with one backend system. Easy to maintain.

ANDANDMOREMORE

FUNFUN

Page 6: Drupalcon Mumbai

Theming in Drupal is tedious and tricky

Reasons to go Decoupled

UI and backend are independent

More natural design process

Use advanced tools like grunt, gulp, bower etc

No CMS theming

Ease for themers

Page 7: Drupalcon Mumbai

For ThemersMr Themer, make arequest to theservice $http('/posts.json')in JavaScript in orderto obtain the data.You can write your ownCSS and HTML fromscratch.

Page 8: Drupalcon Mumbai

IONIC your mobile apps! and website.

AngularJS: MVC which elegantlyseparates controller, business, andmodel logic in your application.

Can power

Page 9: Drupalcon Mumbai

Clean Markup

<div class="row" > <div class="col-sm-3" ng-repeat="product in products"> <div class="panel panel-default text-center"> <div class="panel-heading"> <strong>{{product.node.title}}</strong> </div> <div class="panel-body"> <h3 class="panel-title price">${{product.node.amount}} <span class="price-cents"></span> <span class="price-month">mo.</span> </h3> </div> <ul class="list-group"> <li class="list-group-item">{{product.node.projects}} Projects</li> <li class="list-group-item">{{product.node.space_gb}} GB of Storage</li> <li class="list-group-item">Up to {{product.node.users}} Users</li> <li class="list-group-item">{{product.node.space_gb}} GB Bandwidth</li> <li class="list-group-item">{{product.node.special}}</li> <li class="list-group-item"><a class="btn btn-primary">Sign Up Now!</a> </li> </ul> </div> </div> </div>

Page 10: Drupalcon Mumbai

Nothing can replace authoring experience

Why still use a CMS

Media management

Communicating to 3rd party APIs

Securing user data

Structring with content types, taxonomies etc

Page 11: Drupalcon Mumbai

NPR's backend system has been on for 12years.

NPR and Netflix

Page 12: Drupalcon Mumbai

To built a backend systemwhich can offer

an API tomany client applications

Page 13: Drupalcon Mumbai

Great front end

Results

Very fast and responsive sites

Can build mobile apps on same platform

APIs can power other desktop/mobile apps

Easier upgrades

Faster development cycles

Page 14: Drupalcon Mumbai

Lose multilingual and localization out of the box

Problems with decoupled

Accessibility

Rebuild layout management

Accessibility improvements made to core: ARIA, data andschema.org attributes.

Page 15: Drupalcon Mumbai

Drupal 7 / 8

Drupal Architecture

RESTful / Services module

Little or NO custom code

Views datasource

Page 16: Drupalcon Mumbai

A web service exposes raw Drupal data atcertain URLs (endpoints) of your Drupal site.

Web Services

Page 17: Drupalcon Mumbai

REST is an architectural pattern guiding ourinteraction with data.

Rest API

Page 18: Drupalcon Mumbai

Core - Web Services (core) allows for all core entities to be exposed as

JSON+HAL; Views natively supports “REST export” as a new display type.

Drupal 8

WSCCI (Web Services and Context Core Initiative) incorporated Web

Services into Drupal 8 core.

Page 19: Drupalcon Mumbai

Data Flow

Page 20: Drupalcon Mumbai

Data Flow 2

Page 21: Drupalcon Mumbai

API Call

$http.get('http://headless:8888/api/blogs.json') .then(function(resp) { console.log(resp); $scope.blogs = resp.data['nodes']; // For JSON responses, resp.data contains the result }, function(err) { console.error('ERR', err); // err.status will contain the status code })

Page 22: Drupalcon Mumbai

Fetch using Service

app.factory('blogService', function($http) { return { getBlogs: function(callback) { $http.get('http://headless:8888/api/blogs.json').success(callback); } }});

Page 23: Drupalcon Mumbai

Fetching Single Node

app.factory('nodeService', function($http) { return { getNode: function(nid, callback) { $http.get('http://headless:8888/node/' + nid).success(callback); } }}

Page 24: Drupalcon Mumbai

Data

"nodes": [ { "node": { "title": "Antehabeo Distineo", "description": "Illum jumentum lucidus ulciscor. Ex in nobis torqueo. Letalis olim sino. Abdo antehabeo autem camur distineo duis enim ibidem singularis vulpes.\nCaecus esca nobis quis typicus ullamcorper vereor. Eu exerci mauris neo ut virtus voco. Abigo consectetuer interdico jugis praesent premo torqueo vero zelus. Consectetuer diam importunus melior pneum vicis vulpes..." "image": { "src": "http://headless:8888/sites/default/files/styles/600x300/public/portfolio-9.jpg?itok=5Vkhrbi7" "alt": "" }, "nid": "9", "date": "1 day 10 hours" } } }

Page 25: Drupalcon Mumbai

Angular Representation <div class="row" ng-repeat="blog in blogs"> <div class="col-md-1"> <p>{{blog.node.date}}</p> </div> <div class="col-md-5"> <a href="blog-post.html"> <img src="{{blog.node.image.src}}" class="img-responsive"> </a> </div> <div class="col-md-6"> <h3><a href="#/node/{{blog.node.nid}}">{{blog.node.title}}</a></h3> <p>by <a href="#">{{blog.node.author}}</a></p> <p>{{blog.node.description}}</p> <a class="btn btn-primary" href="#/node/{{blog.node.nid}}"> Read More <i class="fa fa-angle-right"></i> </a> </div> </div>

Page 26: Drupalcon Mumbai

Routingapp.config(['$routeProvider', function($routeProvider) { $routeProvider // Home .when("/", { templateUrl: "partials/home.html", controller: "HomeCtrl" }) // Pages .when("/about", { templateUrl: "partials/about.html", controller: "PageCtrl" }) .when("/faq", { templateUrl: "partials/faq.html", controller: "FAQCtrl" }) // else 404 .otherwise("/404", { templateUrl: "partials/404.html", controller: "PageCtrl" });}]);

Page 27: Drupalcon Mumbai

Integrat ingwith Cl ients

Page 28: Drupalcon Mumbai

Ionic based cordova apps (Angular JS)

Mobile / Web apps

AngularJS website

Page 29: Drupalcon Mumbai

For Drupal 7 + Services : https://github.com/easystreet3/angular-drupal

Angular - Drupal

Page 30: Drupalcon Mumbai

DEMOSDEMOS

Page 31: Drupalcon Mumbai

Progressive decoupling

Decouple only components of the page. Maintain Drupal functionality such as site

building tools, security, accessibility, andlayout management

Page 32: Drupalcon Mumbai

Other tools...

React JS

Ember

Others ...

Page 33: Drupalcon Mumbai

http://goo.gl/ACi2tPhttp://goo.gl/ACi2tP

Page 34: Drupalcon Mumbai

Thank U+http://sumitk.net

@sumitk d.o twitter

Page 35: Drupalcon Mumbai

Questions