SlideShare a Scribd company logo
1 of 88
Taking Your Website
Mobile with TYPO3
Jeremy Greenawalt
Hi.
I live in Dallas with my
beautiful wife,
Rebekah.
I live in Dallas with my
                 beautiful wife,
                 Rebekah.




We have a dog.
45678)4-#,29'-1
-1

#& )*0%&&
  %*($-B&
        &     :;9')("$)>&22)2-9.%)?."#)';&1)<""=
0D& 4+%#&
        &     !& O>+/(&(-'$)+5&$'(&.*1#",>/&39:;<&%#)./$%#0&
E5+#'%/-&
        &        >0+'?&3-.*45"+.%B&3#)./$6*+/$B&$'(&*%2#"&5*"#&
(& )*"#&&        %#52'*/*?+#0&

              !& !>0%*)+G#&(-'$)+5&)#'>0B&/*?*0B&$'(&
  )+G+'?&&       2#$(#"0&>0+'?&%"+5=0&-*>&1*'K%&E'(&+'&%2#&&
 $+/$A/#D&
                 *,E5+$/&(*5>)#'%$%+*'&
)./#& %*&&
*45"+.%B&&    !& O>+/(&5*'%#'%&#/#)#'%0&$'(&%#)./$%#&
                 #C%#'0+*'0&%*&*@#"2$>/&$'(&+)."*@#&&
                 39:;<K0&(#,$>/%&A$5=H#'(&#(+%+'?&#C.#"+#'5#
C$)./#&
>"& *1'&      !& N((&(-'$)+5&A$''#"0&$'(&/*?*0&%*&$'&#C+0%+'?&
 #D&9*>&         %#)./$%#&(#0+?'
 ?$%+*'B&
0&+'&%2#&     !& !"#$%#&5>0%*)&)#'>0&>0+'?&)>/%+./#&
)./$%#0&         $.."*$52#0&$'(&%#52'+F>#0                                                      ! " # # $ % & ' ( ) * + , - . & - % / - ) 0 & 1 ' & 2 2 - 3
 *>&1+//&
*'$/+G#&      !& !"#$%#&)>/%+./#&%#)./$%#0&1+%2*>%&
                 "#.#$%+'?&-*>"0#/,

              !& !>0%*)+G#&%2#&A$5=#'(&#(+%+'?&#C.#"+#'5#&
                                                                    7#"#)-&8"##'$1$/%




                 ,*"&0.#5+E5&%#)./$%#0



                                                                                        45678)4-#,29'-1
 $'%0&%*&
)>/%+./#&     !& N((&)>/%+./#&5*/>)'0&$'(&0.#5+$/&,*")$%%+'?&
#B&%2#'&         1+%2&Q#C+A/#&5*'%#'%&#/#)#'%0
(&>0#"0&      !& !"#$%#&.*1#",>/&5*'%#'%&#/#)#'%0&1+%2&
 #(+%+'?&        @$"+$A/#0&$'(&+'%#//+?#'%&,*")$%%+'?


             @)ABCBB)L4                                                                 !"#$%#&$'(&)*(+,-&%#)./$%#0&1+%2&3-.*45"+.%&$'(&3#)./$6*+/$
             D)8ECBB)LM


             :"+5#0&(*&'*%&+'5/>(#&
             /*5$/&0$/#0&%$C&*"&6N3&
             12#"#&$../+5$A/#




?B&O+")+'?2$)&H&P>)A$+
 9/='6$<C/"#                                                                            F-.-#()G.--%9>92'
Contact Me:
email: jeremy@vin56.com
twitter: @jgreenawalt
What We’re
Talking About:
•How much do you optimize for mobile
 devices?

•Mobile best practices

•Four basic paths to mobile devices using CSS,
 TypoScript, and TemplaVoila.
How much do you
optimize for mobile
devices?
Mobile design happens on a spectrum.
The Mobile
Development
Spectrum
Desktop       Native
Website       App
The Mobile
Development
Spectrum
Desktop                Native
Website                App
          Compatible
          Design
The Mobile
Development
Spectrum
Desktop                           Native
Website                           App
          Compatible   Mobile
          Design       Template
The Mobile
Development
Spectrum
Desktop                                     Native
Website                                     App
          Compatible   Mobile     Mobile
          Design       Template   Content
The Mobile
Development
Spectrum
Desktop                                               Native
Website                                               App
          Compatible   Mobile     Mobile    Mobile
          Design       Template   Content   Version
Mobile Best Practices
First, we learn from everybody else.
Mobile is about
context.
Mobile is not a screen size.
Mobile Users:
•Have a smaller screen

•Have limited bandwidth

•Need different information

•Need everything faster

•Don’t have keyboards or mice
Mobile Changes:
•Navigation

•Content

•Layout
Ideal target-size =
44x44
Apple HIG.
http://developer.apple.com/
Simplify Navigation
•Reduce menus to the minimum # of items.

•Highlight the menu items that people need
 in a mobile context.

•Don’t rely on hover or drop-down behavior.
Navigation
•Highlights most helpful
 links for mobile users

•Provides large buttons for
 highlighted links

•Provides link back to
 desktop version



            http://lifechurch.tv
Content
•Replace large or unnecessary images

•Make sure text is easily readable

•Optimize forms
Content
•Removed large images

•Readable text




         http://alistapart.com
Mobile Form
•Large target areas

•Minimal fields

•HTML5 and autofill
 helpers




       http://trinitychurch.org
Layout
•Reduce multi-column layouts

•Use simple design to highlight
 content

•Mimic mobile design patterns from
 native apps (sometimes)
Layout
•Simple design highlights
 content

•Single-column text with
 single large image




              http://wfaa.com
Layout
•Single-column layout

•Table mimics iOS and
 Android apps




          http://wfaa.com
Tools
•CSS

•TYPO3

 •TypoScript

 •TemplaVoila

•Mobile frameworks (e.g. Sencha Touch)
Advantages of TYPO3
•Built-in checks for browser, device, etc.

•Multiple templates for the same content.
Paths to Mobile
Devices
•Responsive web design

•Pure TypoScript

•TemplaVoila Subtemplates

•External mobile site (redirect)
Responsive Web
Design
The new awesomeness
Layout Techniques
•Fluid grids

•Responsive layouts

•Flexible images
Fluid Grids




   http://www.designinfluences.com/fluid960gs/
Responsive Layouts




             http://hicksdesign.co.uk/
Flexible Images
img,object { max-width: 100%; }



Internet Explorer:
img { width: 100%; }



http://unstoppablerobotninja.com/entry/fluid-images/
Media Queries
  •CSS

  •JavaScript
Single CSS Stylesheet
 /* Smartphones (portrait and landscape) ----------- */
 @media only screen
 and (min-device-width : 320px)
 and (max-device-width : 480px) {
 
   /* Styles */
 }

 /* Smartphones (landscape) ----------- */
 @media only screen
 and (min-width : 321px) {
 
   /* Styles */
 }

 /* Smartphones (portrait) ----------- */
 @media only screen
 and (max-width : 320px) {
 
   /* Styles */
 }
 "Hardboiled CSS3 Media Queries" by Andy Clarke
 http://stuffandnonsense.co.uk/blog/about/
 hardboiled_css3_media_queries
Separate CSS Stylesheets

<link media="only screen and (max-device-
width:480px)" href="iphone.css" type="text/css"
rel="stylesheet" />
JavaScript
http://code.google.com/p/css3-mediaqueries-js/
More Information




           http://abookapart.com
Pros
•Can be a great starting place

•Adaptable for screens of all sizes
Cons
•Introduces a whole new design process

•Not a complete “mobile solution”

•Still downloads large content

•No way to see full desktop site
TypoScript
The purest TYPO3 method
Original Site
Original vs. Final
TypoScript
Conditions
Example Condition
[browser = msie]

page.headerData.30.value = <link rel="stylesheet"
type="text/css" href="fileadmin/templates/
common_ie.css">

[else]

page.headerData.30.value = <link rel="stylesheet"
type="text/css" href="fileadmin/templates/common.css">

[end]
Useragent String
Condition
[useragent = agent]
What is a useragent
string?
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0
like Mac OS X; en-us) AppleWebKit/532.9
(KHTML, like Gecko) Version/4.0.5
Mobile/8A293 Safari/6531.22.7
What is a useragent
string?
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0
like Mac OS X; en-us) AppleWebKit/532.9
(KHTML, like Gecko) Version/4.0.5
Mobile/8A293 Safari/6531.22.7
iPhone useragent
condition
[useragent = *iPhone*]
Our mobile useragent
condition
[useragent = *iPhone*]||[useragent = *iPod*]||
[useragent = *Android*]||[useragent = *Opera
Mini*]||[useragent = *BlackBerry*]
 ## Mobile information
[end]
User Functions

[userFunc = function(parameter)]
Adding a user function
to localconf.php
 function mobile_check($cmd){
    switch($cmd){
        case "appleDevices":
 
    
    
   if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') ||
 strstr($_SERVER['HTTP_USER_AGENT'],'iPod') ||
 strstr($_SERVER['HTTP_USER_ AGENT'],'iPad')) {
 
    
    
   
    return true;
 
    
    
   }
 
    
    
   break;
 
    
    case "androidDevices":
 
    
    
   // ....
 
    
    
   break;
 
    }
 }
User Function
Condition
[userFunc = mobile_check(appleDevices)]
Our user function
condition
[userFunc = mobile_check(appleDevices)]||
[userFunc = mobile_check(androidDevices)]
 ## Mobile information
[end]
Loading Mobile CSS
with TypoScript
Why did we just learn conditions?
Mobile Stylesheet
/* Resize all fonts for mobile devices */
p, ul, div, h2, h3, h4, h5, h6 {

   font-size: 24px;

   line-height: 30px;
}

/* Resize menu items for mobile devices */
li.menu-item a {

   font-size: 30px;

   line-height: 36px;

   margin-right: 10px;
}
         
/* Reset all columns to 100% width and single-column */
#column_1, #column_2 {

   float: none;

   width: 100%;
}
Load CSS with TypoScript

[useragent = *iPhone*]||[useragent = *iPod*]||[useragent =
*Android*]||[useragent = *Opera Mini*]||[useragent =
*BlackBerry*]
page.headerData.30 = TEXT
page.headerData.30.value = <link rel="stylesheet"
type="text/css" href="fileadmin/templates/css/mobile.css" />
[end]
Updating TypoScript
Objects
Harnessing the power of TYPO3.
Common Objects to
Update
 •Images

 •Menus

 •Generated HTML
Updating an image
[useragent = *iPhone*]||[useragent = *iPod*]||[useragent =
*Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]
       
page.headerData.30 = TEXT
page.headerData.30.value = <link rel="stylesheet" type="text/css"
href="fileadmin/templates/css/mobile.css" />
       
lib.logo.file = fileadmin/templates/logo_mobile.png

lib.mainMenu >
lib.mainMenu = HMENU
lib.mainMenu {

   entryLevel = 0

   wrap = <ul id="menu-area">|</ul>

   1 = TMENU

   1.NO.allWrap = <li class="menu-item">|</li>
}

[end]
Updating an image
[useragent = *iPhone*]||[useragent = *iPod*]||[useragent =
*Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]
       
page.headerData.30 = TEXT
page.headerData.30.value = <link rel="stylesheet" type="text/css"
href="fileadmin/templates/css/mobile.css" />
       
lib.logo.file = fileadmin/templates/logo_mobile.png

lib.mainMenu >
lib.mainMenu = HMENU
lib.mainMenu {

   entryLevel = 0

   wrap = <ul id="menu-area">|</ul>

   1 = TMENU

   1.NO.allWrap = <li class="menu-item">|</li>
}

[end]
Bring it all together
[useragent = *iPhone*]||[useragent = *iPod*]||[useragent =
*Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]
       
page.headerData.30 = TEXT
page.headerData.30.value = <link rel="stylesheet" type="text/css"
href="fileadmin/templates/css/mobile.css" />
       
lib.logo.file = fileadmin/templates/logo_mobile.png

lib.mainMenu >
lib.mainMenu = HMENU
lib.mainMenu {

   entryLevel = 0

   wrap = <ul id="menu-area">|</ul>

   1 = TMENU

   1.NO.allWrap = <li class="menu-item">|</li>
}

[end]
Bring it all together
Adding a Link to the
Desktop Version
Some people still want the whole experience.
Global Variable
http://example.com/index.php?id=73&full=1
Set the link variable
config.linkVars = full

[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent =
*iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] &&
[globalVar = GP:full<1] || [useragent = *Opera Mini*] &&
[globalVar = GP:full<1] || [useragent = *BlackBerry*] &&
[globalVar = GP:full<1]

 ## Mobile information

 lib.footerLink {
   value = Full Version
   typolink {
     parameter.data = page:uid
     addQueryString = 1
     addQueryString.exclude = id
     additionalParams = &full=1
   }
 }

[end]
Check global variables
config.linkVars = full

[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent =
*iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] &&
[globalVar = GP:full<1] || [useragent = *Opera Mini*] &&
[globalVar = GP:full<1] || [useragent = *BlackBerry*] &&
[globalVar = GP:full<1]

 ## Mobile information

 lib.footerLink {
   value = Full Version
   typolink {
     parameter.data = page:uid
     addQueryString = 1
     addQueryString.exclude = id
     additionalParams = &full=1
   }
 }

[end]
Add link to full site
config.linkVars = full

[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent =
*iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] &&
[globalVar = GP:full<1] || [useragent = *Opera Mini*] &&
[globalVar = GP:full<1] || [useragent = *BlackBerry*] &&
[globalVar = GP:full<1]

 ## Mobile information

 lib.footerLink {
   value = Full Version
   typolink {
     parameter.data = page:uid
     addQueryString = 1
     addQueryString.exclude = id
     additionalParams = &full=1
   }
 }

[end]
Bring it all together
config.linkVars = full

[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent =
*iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] &&
[globalVar = GP:full<1] || [useragent = *Opera Mini*] &&
[globalVar = GP:full<1] || [useragent = *BlackBerry*] &&
[globalVar = GP:full<1]

 ## Mobile information

 lib.footerLink {
   value = Full Version
   typolink {
     parameter.data = page:uid
     addQueryString = 1
     addQueryString.exclude = id
     additionalParams = &full=1
   }
 }

[end]
Bring it all together
TemplaVoila
Subtemplates
Creating a mobile HTML template.
Mobile HTML
<!DOCTYPE HTML>
<html>

 <head>

 
 <meta charset="utf-8" />

 </head>

 <body>

 
 <div id="logo"></div>

 
 <ul id="menu-area">

 
 
 <li class="menu-item"><a href="">Menu Item</a></li>

 
 </ul>

 
 <div id="content">This is our content</div>

 
 <div id="print_link"></div>

 </body>
</html>
Page TSConfig
Page TSConfig
TCEFORM.tx_templavoila_tmplobj.rendertype.
addItems.mobile = Mobile version
Create new
template object
Setup subtemplate
TypoScript Setup
[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent =
*iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] &&
[globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar =
GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1]

page.10.childTemplate = mobile

## The rest of our mobile code

[end]
Original vs. Final
Mobile Site Redirect
“...if the user goals for your mobile site are
more limited in scope than its desktop
equivalent, then serving different content
to each might be the best approach.”



                                     Ethan Marcotte
    http://m.alistapart.com/articles/responsive-web-design/
TypoScript Redirect
[useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent
= *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*]
&& [globalVar = GP:full<1]

config.additionalHeaders = Location: m.example.com

[end]

[useragent = *Opera Mini*] && [globalVar = GP:full<1] ||
[useragent = *BlackBerry*] && [globalVar = GP:full<1]

## Generic mobile code goes here

[end]
TrinityChurch.org
Contact Me:
email: jeremy@vin56.com
twitter: @jgreenawalt
www: pocketrevolutionary.com
slides: slideshare.net/jeremygreenawalt

More Related Content

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Featured

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

Taking Your Website Mobile with TYPO3

  • 1. Taking Your Website Mobile with TYPO3 Jeremy Greenawalt
  • 2. Hi.
  • 3.
  • 4. I live in Dallas with my beautiful wife, Rebekah.
  • 5. I live in Dallas with my beautiful wife, Rebekah. We have a dog.
  • 6.
  • 7. 45678)4-#,29'-1 -1 #& )*0%&& %*($-B& & :;9')("$)>&22)2-9.%)?."#)';&1)<""= 0D& 4+%#& & !& O>+/(&(-'$)+5&$'(&.*1#",>/&39:;<&%#)./$%#0& E5+#'%/-& & >0+'?&3-.*45"+.%B&3#)./$6*+/$B&$'(&*%2#"&5*"#& (& )*"#&& %#52'*/*?+#0& !& !>0%*)+G#&(-'$)+5&)#'>0B&/*?*0B&$'(& )+G+'?&& 2#$(#"0&>0+'?&%"+5=0&-*>&1*'K%&E'(&+'&%2#&& $+/$A/#D& *,E5+$/&(*5>)#'%$%+*'& )./#& %*&& *45"+.%B&& !& O>+/(&5*'%#'%&#/#)#'%0&$'(&%#)./$%#& #C%#'0+*'0&%*&*@#"2$>/&$'(&+)."*@#&& 39:;<K0&(#,$>/%&A$5=H#'(&#(+%+'?&#C.#"+#'5# C$)./#& >"& *1'& !& N((&(-'$)+5&A$''#"0&$'(&/*?*0&%*&$'&#C+0%+'?& #D&9*>& %#)./$%#&(#0+?' ?$%+*'B& 0&+'&%2#& !& !"#$%#&5>0%*)&)#'>0&>0+'?&)>/%+./#& )./$%#0& $.."*$52#0&$'(&%#52'+F>#0 ! " # # $ % & ' ( ) * + , - . & - % / - ) 0 & 1 ' & 2 2 - 3 *>&1+//& *'$/+G#& !& !"#$%#&)>/%+./#&%#)./$%#0&1+%2*>%& "#.#$%+'?&-*>"0#/, !& !>0%*)+G#&%2#&A$5=#'(&#(+%+'?&#C.#"+#'5#& 7#"#)-&8"##'$1$/% ,*"&0.#5+E5&%#)./$%#0 45678)4-#,29'-1 $'%0&%*& )>/%+./#& !& N((&)>/%+./#&5*/>)'0&$'(&0.#5+$/&,*")$%%+'?& #B&%2#'& 1+%2&Q#C+A/#&5*'%#'%&#/#)#'%0 (&>0#"0& !& !"#$%#&.*1#",>/&5*'%#'%&#/#)#'%0&1+%2& #(+%+'?& @$"+$A/#0&$'(&+'%#//+?#'%&,*")$%%+'? @)ABCBB)L4 !"#$%#&$'(&)*(+,-&%#)./$%#0&1+%2&3-.*45"+.%&$'(&3#)./$6*+/$ D)8ECBB)LM :"+5#0&(*&'*%&+'5/>(#& /*5$/&0$/#0&%$C&*"&6N3& 12#"#&$../+5$A/# ?B&O+")+'?2$)&H&P>)A$+ 9/='6$<C/"# F-.-#()G.--%9>92'
  • 8.
  • 9.
  • 11. What We’re Talking About: •How much do you optimize for mobile devices? •Mobile best practices •Four basic paths to mobile devices using CSS, TypoScript, and TemplaVoila.
  • 12. How much do you optimize for mobile devices? Mobile design happens on a spectrum.
  • 14. The Mobile Development Spectrum Desktop Native Website App Compatible Design
  • 15. The Mobile Development Spectrum Desktop Native Website App Compatible Mobile Design Template
  • 16. The Mobile Development Spectrum Desktop Native Website App Compatible Mobile Mobile Design Template Content
  • 17. The Mobile Development Spectrum Desktop Native Website App Compatible Mobile Mobile Mobile Design Template Content Version
  • 18. Mobile Best Practices First, we learn from everybody else.
  • 19. Mobile is about context. Mobile is not a screen size.
  • 20. Mobile Users: •Have a smaller screen •Have limited bandwidth •Need different information •Need everything faster •Don’t have keyboards or mice
  • 22. Ideal target-size = 44x44 Apple HIG. http://developer.apple.com/
  • 23. Simplify Navigation •Reduce menus to the minimum # of items. •Highlight the menu items that people need in a mobile context. •Don’t rely on hover or drop-down behavior.
  • 24. Navigation •Highlights most helpful links for mobile users •Provides large buttons for highlighted links •Provides link back to desktop version http://lifechurch.tv
  • 25. Content •Replace large or unnecessary images •Make sure text is easily readable •Optimize forms
  • 26. Content •Removed large images •Readable text http://alistapart.com
  • 27. Mobile Form •Large target areas •Minimal fields •HTML5 and autofill helpers http://trinitychurch.org
  • 28. Layout •Reduce multi-column layouts •Use simple design to highlight content •Mimic mobile design patterns from native apps (sometimes)
  • 29. Layout •Simple design highlights content •Single-column text with single large image http://wfaa.com
  • 30. Layout •Single-column layout •Table mimics iOS and Android apps http://wfaa.com
  • 32. Advantages of TYPO3 •Built-in checks for browser, device, etc. •Multiple templates for the same content.
  • 33. Paths to Mobile Devices •Responsive web design •Pure TypoScript •TemplaVoila Subtemplates •External mobile site (redirect)
  • 36. Fluid Grids http://www.designinfluences.com/fluid960gs/
  • 37. Responsive Layouts http://hicksdesign.co.uk/
  • 38. Flexible Images img,object { max-width: 100%; } Internet Explorer: img { width: 100%; } http://unstoppablerobotninja.com/entry/fluid-images/
  • 39. Media Queries •CSS •JavaScript
  • 40. Single CSS Stylesheet /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { /* Styles */ } /* Smartphones (landscape) ----------- */ @media only screen and (min-width : 321px) { /* Styles */ } /* Smartphones (portrait) ----------- */ @media only screen and (max-width : 320px) { /* Styles */ } "Hardboiled CSS3 Media Queries" by Andy Clarke http://stuffandnonsense.co.uk/blog/about/ hardboiled_css3_media_queries
  • 41. Separate CSS Stylesheets <link media="only screen and (max-device- width:480px)" href="iphone.css" type="text/css" rel="stylesheet" />
  • 43. More Information http://abookapart.com
  • 44. Pros •Can be a great starting place •Adaptable for screens of all sizes
  • 45. Cons •Introduces a whole new design process •Not a complete “mobile solution” •Still downloads large content •No way to see full desktop site
  • 50. Example Condition [browser = msie] page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/ common_ie.css"> [else] page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/common.css"> [end]
  • 52. What is a useragent string? Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
  • 53. What is a useragent string? Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
  • 55. Our mobile useragent condition [useragent = *iPhone*]||[useragent = *iPod*]|| [useragent = *Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*] ## Mobile information [end]
  • 56. User Functions [userFunc = function(parameter)]
  • 57. Adding a user function to localconf.php function mobile_check($cmd){ switch($cmd){ case "appleDevices": if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod') || strstr($_SERVER['HTTP_USER_ AGENT'],'iPad')) { return true; } break; case "androidDevices": // .... break; } }
  • 58. User Function Condition [userFunc = mobile_check(appleDevices)]
  • 59. Our user function condition [userFunc = mobile_check(appleDevices)]|| [userFunc = mobile_check(androidDevices)] ## Mobile information [end]
  • 60. Loading Mobile CSS with TypoScript Why did we just learn conditions?
  • 61. Mobile Stylesheet /* Resize all fonts for mobile devices */ p, ul, div, h2, h3, h4, h5, h6 { font-size: 24px; line-height: 30px; } /* Resize menu items for mobile devices */ li.menu-item a { font-size: 30px; line-height: 36px; margin-right: 10px; }           /* Reset all columns to 100% width and single-column */ #column_1, #column_2 { float: none; width: 100%; }
  • 62. Load CSS with TypoScript [useragent = *iPhone*]||[useragent = *iPod*]||[useragent = *Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*] page.headerData.30 = TEXT page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/css/mobile.css" /> [end]
  • 64. Common Objects to Update •Images •Menus •Generated HTML
  • 65. Updating an image [useragent = *iPhone*]||[useragent = *iPod*]||[useragent = *Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]         page.headerData.30 = TEXT page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/css/mobile.css" />         lib.logo.file = fileadmin/templates/logo_mobile.png lib.mainMenu > lib.mainMenu = HMENU lib.mainMenu { entryLevel = 0 wrap = <ul id="menu-area">|</ul> 1 = TMENU 1.NO.allWrap = <li class="menu-item">|</li> } [end]
  • 66. Updating an image [useragent = *iPhone*]||[useragent = *iPod*]||[useragent = *Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]         page.headerData.30 = TEXT page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/css/mobile.css" />         lib.logo.file = fileadmin/templates/logo_mobile.png lib.mainMenu > lib.mainMenu = HMENU lib.mainMenu { entryLevel = 0 wrap = <ul id="menu-area">|</ul> 1 = TMENU 1.NO.allWrap = <li class="menu-item">|</li> } [end]
  • 67. Bring it all together [useragent = *iPhone*]||[useragent = *iPod*]||[useragent = *Android*]||[useragent = *Opera Mini*]||[useragent = *BlackBerry*]         page.headerData.30 = TEXT page.headerData.30.value = <link rel="stylesheet" type="text/css" href="fileadmin/templates/css/mobile.css" />         lib.logo.file = fileadmin/templates/logo_mobile.png lib.mainMenu > lib.mainMenu = HMENU lib.mainMenu { entryLevel = 0 wrap = <ul id="menu-area">|</ul> 1 = TMENU 1.NO.allWrap = <li class="menu-item">|</li> } [end]
  • 68. Bring it all together
  • 69. Adding a Link to the Desktop Version Some people still want the whole experience.
  • 71. Set the link variable config.linkVars = full [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] ## Mobile information lib.footerLink { value = Full Version typolink { parameter.data = page:uid addQueryString = 1 addQueryString.exclude = id additionalParams = &full=1 } } [end]
  • 72. Check global variables config.linkVars = full [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] ## Mobile information lib.footerLink { value = Full Version typolink { parameter.data = page:uid addQueryString = 1 addQueryString.exclude = id additionalParams = &full=1 } } [end]
  • 73. Add link to full site config.linkVars = full [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] ## Mobile information lib.footerLink { value = Full Version typolink { parameter.data = page:uid addQueryString = 1 addQueryString.exclude = id additionalParams = &full=1 } } [end]
  • 74. Bring it all together config.linkVars = full [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] ## Mobile information lib.footerLink { value = Full Version typolink { parameter.data = page:uid addQueryString = 1 addQueryString.exclude = id additionalParams = &full=1 } } [end]
  • 75. Bring it all together
  • 77. Mobile HTML <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> </head> <body> <div id="logo"></div> <ul id="menu-area"> <li class="menu-item"><a href="">Menu Item</a></li> </ul> <div id="content">This is our content</div> <div id="print_link"></div> </body> </html>
  • 82. TypoScript Setup [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] || [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] page.10.childTemplate = mobile ## The rest of our mobile code [end]
  • 85. “...if the user goals for your mobile site are more limited in scope than its desktop equivalent, then serving different content to each might be the best approach.” Ethan Marcotte http://m.alistapart.com/articles/responsive-web-design/
  • 86. TypoScript Redirect [useragent = *iPhone*] && [globalVar = GP:full<1] || [useragent = *iPod*] && [globalVar = GP:full<1] || [useragent = *Android*] && [globalVar = GP:full<1] config.additionalHeaders = Location: m.example.com [end] [useragent = *Opera Mini*] && [globalVar = GP:full<1] || [useragent = *BlackBerry*] && [globalVar = GP:full<1] ## Generic mobile code goes here [end]
  • 88. Contact Me: email: jeremy@vin56.com twitter: @jgreenawalt www: pocketrevolutionary.com slides: slideshare.net/jeremygreenawalt

Editor's Notes

  1. \n
  2. T\n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n