2. Vorbereitung
jQuery Mobile herunterladen
http://jquerymobile.com/download/
Hinweis: jQuery Mobile setzt jQuery voraus. Im Package sind entsprechende Examples vorhanden, die besonders am Anfang
unterstützen und bei der Einbindung helfen können. Bei allen Examples ist auch eine Version von jQuery enthalten. Besonders zu
Beginn empfiehlt es sich diese Version zu verwenden um Inkompatibilitäten mit einer neueren Version zu vermeiden.
Beim Upload der Files muss der Order „images“ ebenfalls hochgeladen werden und sich im selben Verzeichnis wie die CSS-
Dateien befinden, in meinem Fall wäre der richtige Pfad fileadmin/templates/css/images/ Oder man passt den Pfad in den CSS-
Dateien an.
Peter Schuhmann, Dynamic Lines GmbH
3. Vorbereitung
CSS Einbinden
page.includeCSS {
file1 = fileadmin/templates/css/jquery.mobile.structure-1.1.1.min.css
file1.media = all
file2 = fileadmin/templates/css/jquery.mobile.theme-1.1.1.min.css
file2.media = all
file3 = fileadmin/templates/css/jquery.mobile-1.1.1.min.css
file3.media = all
}
Javascript Einbinden
page.includeJS {
file1 = fileadmin/templates/js/jquery.js
file2 = fileadmin/templates/js/jquery.mobile-1.1.1.min.js
}
Wichtig: jQuery muss vor jQuery Mobile eingebunden werden.
Peter Schuhmann, Dynamic Lines GmbH
4. zu jQuery Mobile
Template Aufbau
<!DOCTYPE html>
<html>
! <head>
! <title>My Page</title>
! <meta name="viewport" content="width=device-width, initial-scale=1">
! <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
! <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
! <script src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>
</head>
<body>
<div data-role="page">
! <div data-role="header">
! ! <h1>My Title</h1>
! </div><!-- /header -->
! <div data-role="content">!
! ! <p>Hello world</p>! !
! </div><!-- /content -->
</div><!-- /page -->
</body>
</html>
Die einzelnen Subparts des Templates werden mit den Rollen festgelegt („data-role“).
Wichtig: Auf jQueryMobile.com findet man eine umfangreiche Dokumentation und Beispiele. Sollte man nicht wissen, wie das
Beispiel zustand gekommen ist, kann man einfach in den Seitenquelltext schauen, da dort der reine Quellcode ausgezeigt wird,
bevor Javascript diesen manipuliert hat.
Peter Schuhmann, Dynamic Lines GmbH
5. Template-Umsetzung mit Fluid
Da sowohl Header als auch Footer auf allen Seiten gleich sein sollen, bietet es sich an, diese Teile in Partials auszulagern.
Layouts/Default.html
<div data-role="page">
<div data-role="header">
<f:render partial="Header"/>
</div>
<div data-role="content">
<f:render section="main" />
</div>
<div data-role="footer">
<f:render partial="Footer"/>
</div>
</div>
Somit liefert der jeweilige ViewController die Inhalte für den Content-Bereich.
Peter Schuhmann, Dynamic Lines GmbH
6. jQuery Mobile „Stolpersteine“ mit Extbase
AJAX
jQuery Mobile läd Inhalte standardmäßig via AJAX und setzt anschließend die geladene URL als location.href. Durch dieses
Vorgehen funktionieren die Redirects von Extbase nicht mehr. Es gibt aber zwei Möglichkeiten um dieses Problem zu lösen. Zum
einen kann man AJAX permanent deaktivieren, allerdings sind somit keine Page-Transitions mehr möglich. Als akzeptable
Alternative bietet es sich an, AJAX nur für die Actions zu deaktivieren, die ein Redirect auslösen. Um dies mit Extbase/Fluid
realisieren zu können, kann man die Extension „mak_html5_viewhelper“ verwenden, was ich in den weiteren Slides erläutern
werde.
Peter Schuhmann, Dynamic Lines GmbH
7. Partial „Header“
header.html
In der header.html legen wir die Navigation fest. Ziel ist dabei folgende Darstellung:
Code:
<div data-role="navbar">
<ul>
<li><f:link.action action="list" controller="Teacher">Teacher</f:link.action></li>
<li><f:link.action action="list" controller="Student">Student</f:link.action></li>
<li><f:link.action action="list" controller="Parent">Parent</f:link.action></li>
</ul>
</div><!-- /navbar -->
Ergebnis:
Peter Schuhmann, Dynamic Lines GmbH
8. Partial „Footer“
footer.html
In der footer.html legen wir in diesem Fall nur eine Überschrift fest. Weitere Beispiele für Footers findet man hier:
http://jquerymobile.com/demos/1.1.1/docs/toolbars/docs-footers.html
Code:
<h4>School Management</h4>
Ergebnis:
Peter Schuhmann, Dynamic Lines GmbH
11. Bearbeiten
Edit View (Edit.html):
<f:layout name="Default" />
{namespace x=Tx_MakHtml5Viewhelper_ViewHelpers}
<f:section name="main">
<f:flashMessages />
<f:render partial="FormErrors" />
<ul data-role="listview" data-inset="true">
<li data-theme="a"><h3>Edit Student</h3></li>
<li>
Ergebnis:
<x:form action="update" name="student" object="{student}"
attributes="{data-ajax : 'false'}">
<f:render partial="Student/FormFields"
arguments="{student:student}" />
<f:form.submit value="Save" />
</x:form>
</li>
</ul>
</f:section>
Hinweis: Beim Absenden des Formulars wird die Seite nicht via AJAX übermittelt.
Verantwortlich dafür ist die Angabe attributes="{data-ajax : 'false'}"
Peter Schuhmann, Dynamic Lines GmbH
12. Anlegen
New View (New.html):
<f:layout name="Default" />
{namespace x=Tx_MakHtml5Viewhelper_ViewHelpers}
<f:section name="main">
<f:flashMessages />
<f:render partial="FormErrors" />
<ul data-role="listview" data-inset="true">
<li data-theme="a"><h3>New Student</h3></li>
Ergebnis:
<li>
<x:form action="create" name="student" object="{student}"
attributes="{data-ajax : 'false'}">
<f:render partial="Student/FormFields"
arguments="{student:student}" />
<f:form.submit value="Create" />
</x:form>
</li>
</ul>
</f:section>
Hinweis: Beim Absenden des Formulars wird die Seite nicht via AJAX übermittelt.
Verantwortlich dafür ist die Angabe attributes="{data-ajax : 'false'}"
Peter Schuhmann, Dynamic Lines GmbH
13. Theming
Standard Themes:
Ein Theme wird immer über das Attribut „data-theme“ festgelegt. Ein Beispiel dafür
findet man in der List View (List.html).
Peter Schuhmann, Dynamic Lines GmbH
14. Darstellung optimieren
Viewport:
Bei wem die Darstellung auf dem mobilen Endgerät noch nicht optimal aussieht, dem fehlt wahrscheinlich der Viewport-
Parameter. Der nachfolgende Code sollte das Problem beheben:
page.headerData.5 = COA
page.headerData.5 {
10 = HTML
10.value = <meta name="viewport" content="width=device-width, initial-
scale=1.0; maximum-scale=1.0; user-scalable=0;" />
}
Genauere Beschreibung des Viewport-Parameters:
https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag
Peter Schuhmann, Dynamic Lines GmbH