sencha touch meets typo3

39
Sencha Touch meets TYPO3 Nils Dehl, Senior Developer / Trainer Twitter: @nilsdehl

Upload: nils-dehl

Post on 22-May-2015

1.875 views

Category:

Technology


8 download

DESCRIPTION

How to build mobile web applications with the JavaScript Framework Sencha Touch and feed it with content from TYPO3. After a introduction to Sencha Touch we will showcase some apps we builded. On a example we will talk about how to develop Sencha Touch applications. See how we can feed the app with content from TYPO3 and use a cloud service to optimize content images for mobile devices.

TRANSCRIPT

Page 1: Sencha Touch meets TYPO3

Sencha Touch meets TYPO3

Nils Dehl, Senior Developer / Trainer

Twitter: @nilsdehl

Page 2: Sencha Touch meets TYPO3

Agenda

About me

Introduce Sencha Touch

TYPO3 meets Sencha Touch

Demo

TYPO3 side

Sencha Touch side

Demo

Page 3: Sencha Touch meets TYPO3

Nils Dehl

Senior Developer

Trainer

Sencha Meetup Frankfurt

Conference Talks

Sencha Forum: mrsunshine

@nilsdehl

Page 4: Sencha Touch meets TYPO3

dkd Internet Service GmbH

We

plan

build

run

complex Websites based on TYPO3 CMS

specialized also in

Ruby on Rails

Sencha Touch / ExtJS

Page 5: Sencha Touch meets TYPO3

Sencha Touch 2

Page 6: Sencha Touch meets TYPO3

Sencha Touch 2

HTML5 mobile application framework

works on iOS, Android, BlackBerry, Kindle Fire, ...

Features

Smoother Scrolling and Animations

Adaptive Layouts

Native Packaging

Components: Lists, Dataviews, Toolbars, Charts, ...

Page 7: Sencha Touch meets TYPO3
Page 8: Sencha Touch meets TYPO3
Page 9: Sencha Touch meets TYPO3
Page 10: Sencha Touch meets TYPO3
Page 11: Sencha Touch meets TYPO3
Page 12: Sencha Touch meets TYPO3
Page 13: Sencha Touch meets TYPO3
Page 14: Sencha Touch meets TYPO3

TYPO3 meets

Sencha Touch

Page 15: Sencha Touch meets TYPO3

TYPO3 meets Sencha Touch

manage content in TYPO3

menu‘s from pages

content

text

text + image

news

display content in mobile Sencha Touch web application

Page 16: Sencha Touch meets TYPO3

Demo

Page 17: Sencha Touch meets TYPO3

TYPO3

Page 18: Sencha Touch meets TYPO3

Render JSON Content

json_content extension

registers a new cObject type JSON_CONTENT

con!gured by TypoScript

used in custom page types

renders content as JSON object

optional JSONP wrap for cross domain api calls

Page 19: Sencha Touch meets TYPO3

Page type for JSON CE‘s

jsonCEsPage = PAGEjsonCEsPage {  typeNum = 1000     config {    additionalHeaders = Content-type:application/json    disableAllHeaderCode = 1    xhtml_cleaning = 0    admPanel = 0    debug = 0    tx_realurl_enable = 0    absRefPrefix = http://typo3.local/typo3senchatouch/  }    10 = JSON_CONTENT  10 {    table = tt_content    select {      selectFields = uid, pid, CType, header, bodytext, image    }     fieldRendering {

Page 20: Sencha Touch meets TYPO3

Page type for JSON CE‘s

    fieldRendering {      image {                split{          token =,          cObjNum = 1          1 = COA          1 {            5 = IMG_RESOURCE            5{              file{                import.current = 1                import = uploads/pics/

              }            }            wrap = |,          }        }      }    }  }

Page 21: Sencha Touch meets TYPO3

Page type for JSON pages

jsonPages < jsonCEsPagejsonPages {  typeNum = 1001

  10 {    table = pages    select {      selectFields = uid, pid, title    }   }}

Page 22: Sencha Touch meets TYPO3

/index.php?id=51&type=1001

{ "success": true, "items": [ { "uid": "52", "pid": "51", "title": "History" }, { "uid": "53", "pid": "51", "title": "Community" } ], "total": 2}

Page 23: Sencha Touch meets TYPO3

/index.php?id=53&type=1000

{ success: true, items: [ { uid: "213", pid: "53", CType: "text", header: "TYPO3: Inspiring People to Share", bodytext: "The real driving force behind TYPO3’s development is its expanding,...", image: null }, { uid: "214", pid: "53", CType: "textpic", header: "Community Events", bodytext: "There are a number of recurring TYPO3 events and conferences. ...", image: "uploads/pics/team-t3board10.jpg," } ], total: 2}

Page 24: Sencha Touch meets TYPO3

Sencha Touch

Page 25: Sencha Touch meets TYPO3

Sencha Touch App

MVC

uses TYPO3 API to load

Pages

Content from a page

by page id and page type

Page 26: Sencha Touch meets TYPO3

Displaying Pages

Model

List View

Controller

Store

Page 27: Sencha Touch meets TYPO3

Model

Ext.define('T3.model.Page', { extend: 'Ext.data.Model',

config: { fields: [ { name: 'uid', type: 'int' }, { name: 'pid', type: 'int' }, { name: 'title', type: 'string' } ] }});

Page 28: Sencha Touch meets TYPO3

Store

Ext.define('T3.store.Pages', { extend: 'Ext.data.Store', config: { model: 'T3.model.Page', proxy: { type: 'jsonp', extraParams: { id: 51, type: 1001 }, url: 'http://typo3.local/typo3senchatouch/', reader: { type: 'json', idProperty: 'uid', rootProperty: 'items' } } }});

Page 29: Sencha Touch meets TYPO3

View - List

Ext.define('T3.view.PagesList', { extend: 'Ext.dataview.List',

config: { store: 'Pages', itemTpl: '{title}', items: [ { xtype: 'titlebar', title: 'Pages', docked: 'top' } ] }});

Page 30: Sencha Touch meets TYPO3

Controller

Ext.define('T3.controller.Pages', { extend: 'Ext.app.Controller', config: { refs: { contentView: 'contentlist' }, control: { 'pageslist': { itemtap: 'onPageItemTap' } } }, onPageItemTap: function(list, index, target, record) { var store = Ext.getStore('Content'), proxy = store.getProxy(), view = this.getContentView(), parentView = view.up('container');

proxy.setExtraParam( 'id', record.get('uid')); store.load(); view.down('titlebar').setTitle(record.get('title')); parentView.setActiveItem(view); }

Page 31: Sencha Touch meets TYPO3

Displaying Content Elements

Model

Data View

Controller

Store

Page 32: Sencha Touch meets TYPO3

DataView render CE‘s

Ext.define('T3.view.ContentList', { extend: 'Ext.dataview.DataView',

config: { store: 'Content', styleHtmlContent: true, itemTpl: [ '<div class="ce">', ' <h1>{header}</h1>', ' <div class="bodytext">{bodytext}</div>', ' <div class="images">', ' <tpl if="ctype == \'textpic\'">', ' <tpl for="images">', ' <img href="http://src.sencha.io/{.}" alt="" />', ' </tpl>', ' </tpl>', ' </div>', '</div>' ], }});

Page 33: Sencha Touch meets TYPO3

Sencha.io src cloud service

src.sencha.io

resize images

altering sizes

percentage sizing

data URLs

domain sharding

Page 34: Sencha Touch meets TYPO3

Template using src.sencha.io

itemTpl: ['<tpl if="ctype == \'textpic\'">', '<tpl for="images">', '<img src="http://src.sencha.io/{.}" />', '</tpl>','</tpl>']

Page 35: Sencha Touch meets TYPO3

Demo

Page 37: Sencha Touch meets TYPO3

d dkdevelopmentkommunikationdesign

thank you.