<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=37.49.33.84</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=37.49.33.84"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/37.49.33.84"/>
	<updated>2026-05-06T16:24:44Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=21263</id>
		<title>Typo3 Extensions - Backend Formulare und TCA Konfiguration</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=21263"/>
		<updated>2015-10-22T05:28:16Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Im TCA (Table Content Array) wird definiert wie ein Feld im Backend aussieht, wie es validiert wird etc. Außerdem wird es von Extbase genutzt um sich Informationen über die Validierung zu holen.&lt;br /&gt;
== TCA Beispiele ==&lt;br /&gt;
Ausschnitte aus der TCA mit verschiedenen Beispiel Definitionen&lt;br /&gt;
=== File Upload Feld ===&lt;br /&gt;
&lt;br /&gt;
== TCA - In Depth ==&lt;br /&gt;
=== Aussehen von Backend Formularen ===&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
Definiert im &amp;#039;&amp;#039;&amp;#039;TCA Array&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
In Extensions wird es in den Dateien &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
festgelegt. In tca.php wird z.B. mit&lt;br /&gt;
 ...&amp;quot;ctrl&amp;quot; =&amp;gt; $TCA[&amp;quot;tx_pupmanager_members&amp;quot;][&amp;quot;ctrl&amp;quot;],...&lt;br /&gt;
der Teil ctrl des TCA Arrays aus ext_tables übernommen. Man muß also nur in diesen beiden Dateien die Werte verändern um auf verschiedene Weise das Backend zu konfigurieren. Die Details findet man in:&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/&lt;br /&gt;
&lt;br /&gt;
Die Ebenen des Arrays sind wie folgt angelegt.&lt;br /&gt;
&lt;br /&gt;
===== Schlüssel: ctrl =====&lt;br /&gt;
Bereich &amp;#039;&amp;#039;&amp;#039;ctrl&amp;#039;&amp;#039;&amp;#039; wird immer gleich geladen die anderen BEreiche erst dynamisch. Wenn sie benutzt werden mit &lt;br /&gt;
&lt;br /&gt;
 t3lib_loadTCA(&amp;#039;your_table_name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
nachladen&lt;br /&gt;
&lt;br /&gt;
===== Level 1 =====&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Schlüssel entsprechen den DB-Tabellen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Grundsätzliche Einstellungen in &amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===== Level 2 und 3 =====&lt;br /&gt;
&lt;br /&gt;
Diese beziehen sich auf die &amp;#039;&amp;#039;&amp;#039;Struktur eines Tabelleneintrags&amp;#039;&amp;#039;&amp;#039; (so sieht also ein Datensatz im Backend aus) und werden meist in &amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039; festgelegt.&lt;br /&gt;
==== Hilfetexte ====&lt;br /&gt;
Wenn die Extension im Builder vorbereitet ist, dann ist alles schon vorangelegt.&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
ext_tables.php -&amp;gt; bekannt machen der Hilfetextdatei&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
t3lib_extMgm::addLLrefForTCAdescr(&lt;br /&gt;
  &amp;#039;tx_meineExtension_DBTabelle&amp;#039;,&lt;br /&gt;
  &amp;#039;EXT:ExtensionKey/locallang_csh_ExtensionKey_DBTabelle.xml&amp;#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Schlüssel ist dann:&lt;br /&gt;
&lt;br /&gt;
meinFeld.description außerdem gibt es noch meinFeld.details&lt;br /&gt;
&lt;br /&gt;
== Validierung von Backend Formularen ==&lt;br /&gt;
Für Backendfelder steht der Bereich eval zur Verfügung. Dort gibt es vorgefertigte Evaluierungsmöglichkeiten. Es können auch mittels einer Extension eigene JavaScripte zur Evaluierung gebastelt werden. Eine Beispielextension steht auch zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/api/&lt;br /&gt;
&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname][&amp;#039;config&amp;#039;] / TYPE: &amp;quot;input&amp;quot;&lt;br /&gt;
 eval=&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
=== Eine Klasse für eigene Validierung einbauen ===&lt;br /&gt;
&lt;br /&gt;
==== Old School ====&lt;br /&gt;
Nachfolgendes bezieht sich auf alte Extensions ohne Extbase, bin mir nicht sicher ob das in Extbase anders funktioniert.&lt;br /&gt;
Folgende Schritte sind notwendig:&lt;br /&gt;
# Eine &amp;#039;&amp;#039;&amp;#039;Klasse zur Evaluierung&amp;#039;&amp;#039;&amp;#039; in der Extension anlegen in der Art: class.tx_meineextension_extraeval1&lt;br /&gt;
&lt;br /&gt;
## Diese Klasse enthält &amp;#039;&amp;#039;&amp;#039;zwei Funktionen&amp;#039;&amp;#039;&amp;#039;. Eine für die Evaluierung per &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bei der Eingabe und eine &amp;#039;&amp;#039;&amp;#039;php&amp;#039;&amp;#039;&amp;#039; Evaluierung nachdem der Datensatz gespeichert wurde. Unten steht die Beispielklasse aus der typo3.org API Dokumentation aus; sie fügt den eingegebenen Werten die unten gezeigten Strings hinzu.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;returnFieldJS()&amp;#039;&amp;#039; gibt den &amp;#039;&amp;#039;&amp;#039;JavaScript Code&amp;#039;&amp;#039;&amp;#039; zurück. Im JavaScript steht die Variable &amp;#039;&amp;#039;value&amp;#039;&amp;#039; zur Verfügung die den Wert des Feldes enthält.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;evaluateFieldValue ($value, $is_in, &amp;amp;$set)&amp;#039;&amp;#039; hat folgende Übergabewerte: &amp;#039;&amp;#039;$value&amp;#039;&amp;#039; ist der Feldinhalt, &amp;#039;&amp;#039;$is_in&amp;#039;&amp;#039; enthält die Werte aus der Typo3 Eval Funktion is_in (Filtert Zeichen aus), &amp;#039;&amp;#039;&amp;amp;$set&amp;#039;&amp;#039; ist Boolean und legt fest ob der Wert in die Datenbank geschrieben wird oder nicht. Wird per Referenz übergeben. &lt;br /&gt;
&lt;br /&gt;
# In ext_localconf.php muß die Klasse registriert werden damit sie zur Verfügung steht&lt;br /&gt;
&lt;br /&gt;
# In tca.php kann nun den Backendeingabefeldern die Evaluierung zugewiesen werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.tx_exampleextraevaluations_extraeval1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class tx_exampleextraevaluations_extraeval1 {&lt;br /&gt;
    function returnFieldJS() {&lt;br /&gt;
        return &amp;#039;&lt;br /&gt;
        return value + &amp;quot; [added by JS]&amp;quot;;&lt;br /&gt;
        &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
    function evaluateFieldValue($value, $is_in, &amp;amp;$set) {&lt;br /&gt;
        return $value.&amp;#039; [added by PHP]&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
# Register new evaluation method in the $TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;] array.&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;][&amp;#039;tx_exampleextraevaluations_extraeval1&amp;#039;] = &amp;#039;EXT:example_extraevaluations/class.tx_pupmanager_extraeval1.php&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Beispiel zum Aufruf in tca.php &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
 &amp;#039;eval&amp;#039; =&amp;gt; &amp;#039;trim,tx_exampleextraevaluations_extraeval1&amp;#039;,&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Felder in Abhängigkeit von anderen anzeigen oder verstecken ==&lt;br /&gt;
===Möglichkeit 1: in der Felddefinition===&lt;br /&gt;
Für jedes Feld das eventuell versteckt werden soll, wird eine Bedingung angegeben&lt;br /&gt;
Im TCA (tca.php) unter&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname] &lt;br /&gt;
 displayCond&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiele:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This example will require the field named &amp;quot;tx_templavoila_ds&amp;quot; to be true, otherwise the field for which this rule is set will not be displayed:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;FIELD:tx_templavoila_ds:REQ:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
This example requires the extension &amp;quot;static_info_tables&amp;quot; to be loaded, otherwise the field is not displayed. (This is useful if the field makes a look-up on a table coming from another extension!)&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;EXT:static_info_tables:LOADED:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
Wie man sieht ist der String mit : in verschiedene Bereiche aufgeteilt. &lt;br /&gt;
Teil 1 ist der Regeltyp. FIELD bezieht sich z.B. auf ein Feld im selben Datensatz. Je nachdem was im ersten Teil steht kann man weitere Teile angeben.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/4/2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 2: mit Paletten===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 3: ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Reihenfolge der Felder im Backend ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[&amp;#039;types&amp;#039;][key]&lt;br /&gt;
Beispiel:&lt;br /&gt;
 &amp;#039;types&amp;#039; =&amp;gt; Array (&lt;br /&gt;
 &amp;#039;0&amp;#039; =&amp;gt; Array(&amp;#039;showitem&amp;#039; =&amp;gt; &amp;#039;hidden;;1, type, title, test_template&amp;#039;),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The key &amp;quot;showitem&amp;quot; lists the order in which to define the fields: &amp;quot;hidden, type, title, test_template&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(nicht mit showRecordFieldList verwechseln - das legt nur Fest was überhaupt angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
== Default Werte in Backend-Feldern ==&lt;br /&gt;
useColumnsForDefaultValues&lt;br /&gt;
&lt;br /&gt;
Wenn Daten auf komplexere Weise im Backend manipuliert werden sollen geht es z.B. so:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 Hook im Backend beim Speichern von Datensätzen]]&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
[[Backend: Default-Werte per TSConfig setzen]]&lt;br /&gt;
&lt;br /&gt;
== Tabs in Backend Formularen ==&lt;br /&gt;
dividers2tabs(in types)&lt;br /&gt;
&lt;br /&gt;
== Funktion nach dem Speichern eines Datensatzes im Backend ausführen==&lt;br /&gt;
Kurzversion für Details siehe nachfolgender Abschnitt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; (Wenn nicht vorhanden Erstellen) Folgendes einfügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &lt;br /&gt;
&amp;#039;EXT:ext_name/hooks/class.tx_ext_name_tcemainhooks.php:tx_ext_name_tcemainhooks&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neue Datei&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.tx_ext_name_tcemainhooks.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class tx_gbglossary_tcemainhooks {&lt;br /&gt;
  function processDatamap_preProcessFieldArray(&amp;amp;$FieldArray, $table, $id, &amp;amp;$tceobj) {&lt;br /&gt;
    debug($FieldArray,&amp;quot;FieldArray&amp;quot;);&lt;br /&gt;
    debug($table,&amp;quot;Table&amp;quot;);&lt;br /&gt;
    debug($id,&amp;quot;id&amp;quot;);&lt;br /&gt;
    debug($tceobj,&amp;quot;tceobj&amp;quot;); &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktionen vor oder nach der Backendeingabe ausführen ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Verwendete Dateien:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ext_localconf.php (Hier wird der Hook registriert)&lt;br /&gt;
class.tx_myExtension_post-or whatever.php (Hier kommt der auszuführende Code)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies kann mit Hooks realisiert werden.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/development/articles/how-to-use-existing-hooks/page/2/&lt;br /&gt;
&lt;br /&gt;
http://www.koller-webprogramming.ch/tipps-tricks/typo3-extension-entwicklung/hook-im-backend/&lt;br /&gt;
&lt;br /&gt;
Daten die vom Backend übermittelt werden werden in der Klasse t3lib_tcemain bearbeitet. Das wäre der geeignete Ort um einzugreifen.&lt;br /&gt;
Diese liegt in &amp;#039;&amp;#039;&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;&amp;#039;&amp;#039;. Jetzt wäre es natürlich blöde in den Core Dateien herumzufuhrwerken. Aber es gibt ja das Hook Konzept, mit dem ein Programmierer Schnittstellen bereitstellen kann um die Funktionalität zu erweitern. Netterweise hat ein lieber Core Programmierer schon zwei Hooks vorgesehen die vor bzw. nachdem speichern der Daten im Backend genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Möglichkeiten den Hook zu nutzen. &amp;#039;&amp;#039;&amp;#039;callUserFunction&amp;#039;&amp;#039;&amp;#039; und the &amp;#039;&amp;#039;&amp;#039;getUserObj&amp;#039;&amp;#039;&amp;#039;. Wobei zweitere die schickere (weil ansatzweise Objektorientiert) ist. Auf die callUserFunction gehen wir zunächst hier nicht ein.&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;getUserObj Methode&amp;#039;&amp;#039;&amp;#039; stellt uns auch der folgende Hook zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schauen wir uns den Code des Post Process Hooks in der Datei class.t3li_tcemain.php an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Hook: processDatamap_postProcessFieldArray&lt;br /&gt;
reset($hookObjectsArr);&lt;br /&gt;
while (list(,$hookObj) = each($hookObjectsArr)) {&lt;br /&gt;
    if (method_exists ($hookObj, &amp;#039;processDatamap_postProcessFieldArray&amp;#039;)) {&lt;br /&gt;
        $hookObj-&amp;gt;processDatamap_postProcessFieldArray ($status, $table, $id, $fieldArray, $this);&lt;br /&gt;
    } &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im obigen Code-Schnipsel aus TCE-Main wird ein Array $hookObjectsArr übergeben und eine Methode processDatamap_postProcessFieldArray wird aufgerufen wenn dieses Existiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Klasse schreiben und Hook Funktion überschreiben===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wir schreiben einfach eine Klasse&amp;#039;&amp;#039;&amp;#039; in der wir die Funktion processDatamap_postProcessFieldArray überschreiben und hier unserer eigene Funktion bereitstellen.&lt;br /&gt;
&lt;br /&gt;
=== Registrieren des Hooks ===&lt;br /&gt;
in der Core Datei wird die &amp;#039;&amp;#039;&amp;#039;Funktion im Globalen Array $TYPO3_CONF_VARS registriert&amp;#039;&amp;#039;&amp;#039;. Genauso müssen wir das mit unserer neuen Funktion machen. Die neuen Methoden Registrieren wir in &amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Typo 3 hat seine Klasse so registriert:&lt;br /&gt;
&lt;br /&gt;
process_datamap function des Typo3 Core (obige Datei):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // First prepare user defined objects (if any) for hooks which extend this function:&lt;br /&gt;
$hookObjectsArr = array();&lt;br /&gt;
if (is_array ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;])) {&lt;br /&gt;
    foreach ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;] as $classRef) {&lt;br /&gt;
        $hookObjectsArr[] = &amp;amp;t3lib_div::getUserObj ($classRef);&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unserer neue Klasse soll genauso eine Instanz des Objekts in genau diesem Array $hookObjectsArr sein.&lt;br /&gt;
&lt;br /&gt;
Deshalb registrieren wir in der Datei &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;unserer Extension unsere Datei indem wir die Funktion genau wie oben im Array aufnehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &lt;br /&gt;
&amp;#039;tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2. Klassendatei laden ===&lt;br /&gt;
Jezt müssen wir noch aufpassen das die Klassendatei auch geladen wird wenn sie benötigt wird. Dazu können wir ein require_once statement in ext_tables.php unserer Extension hinzufügen oder besser folgendes machen.&lt;br /&gt;
&lt;br /&gt;
=== 2.3. Laden und Registrieren der Klasse gleichzeitig ===&lt;br /&gt;
&lt;br /&gt;
Die getUserObj Methode erlaubt uns die beiden Schritte gleichzeitig auszuführen. Das können wir dann beides in &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; machen. Dann sieht die Zeile von vorhin &amp;#039;&amp;#039;&amp;#039;etwas anders&amp;#039;&amp;#039;&amp;#039; aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &lt;br /&gt;
&amp;#039;EXT:myextension/class.myextension_tcemainprocdm.php:tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das hat zudem den Vorteil, das die Klasse nur dann aufgerufen wird wenn sie auch benötigt wird.&lt;br /&gt;
 &lt;br /&gt;
Another great advantage of this method is that your file will only be included if it&amp;#039;s really used! &lt;br /&gt;
postProcessFieldArray&amp;quot; in der Rubrik &amp;quot;processDatamap&lt;br /&gt;
&lt;br /&gt;
=== Wie Programmiert man ? ===&lt;br /&gt;
Für die Programmierung steht die Typo3 Core Engine zur Verfügung (TCE)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Konzept:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
When you are using TCE from your backend applications you need to prepare two arrays of information which contain the instructions to TCEmain of what actions to perform. They fall into two categories: Data and Commands.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Data&amp;quot; is when you want to write information to a database table or create a new record.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Commands&amp;quot; is when you want to move, copy or delete a record in the system.&lt;br /&gt;
&lt;br /&gt;
The data and commands are created as multidimensional arrays and to understand the API of TCEmain you simply need to understand the hierarchy of these two arrays.&lt;br /&gt;
&lt;br /&gt;
Commands Array ($cmd):&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Syntax:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
$cmd[ tablename ][ uid ][ command ] = value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unsere Funktion:&lt;br /&gt;
Wird aufgerufen wenn Datensatz gespeichert wird&lt;br /&gt;
Parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$status-&amp;gt;update oder new, &lt;br /&gt;
$table -&amp;gt; die im Moment bearbeitete Tabelle, &lt;br /&gt;
$id-&amp;gt; bei status new ein Zufallscode Newxxxxx sonst die uid des Datensatzen, &lt;br /&gt;
&amp;amp;$fieldArray -&amp;gt; hier kann man einen Wert aus dem gerade zu speichernden Datensatz überschreiben&lt;br /&gt;
$reference -&amp;gt; das komplette cObj&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_tcemainprocdm {&lt;br /&gt;
&lt;br /&gt;
    function processDatamap_postProcessFieldArray ($status, $table, $id, &amp;amp;$fieldArray, &amp;amp;$this) {&lt;br /&gt;
&lt;br /&gt;
        // here comes the code&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21262</id>
		<title>Formulare mit Extbase und Fluid</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21262"/>
		<updated>2015-10-22T05:22:17Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Upload Feld */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Index.html&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
* Falls nicht vorhanden gewünschte Action registrieren (localconf) und im Controller anlegen&lt;br /&gt;
* Fluid Form erstellen&lt;br /&gt;
* Mit Absenden oder AJAC Call ausführen&lt;br /&gt;
=== Formular Felder im Fluid Template ===&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form&lt;br /&gt;
 http://wiki.typo3.org/Fluid#form_fields&lt;br /&gt;
==== Input Feld ====&lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;rmaType&amp;quot; /&amp;gt;&lt;br /&gt;
==== Textarea ====&lt;br /&gt;
 &amp;lt;f:form.textarea name=&amp;quot;myExtName[nachricht]&amp;quot; /&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
 &amp;lt;f:form.textarea property=&amp;quot;nachricht&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radio Buttons ====&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form.radio&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Radio.html&lt;br /&gt;
&lt;br /&gt;
==== Form Tag (Action)====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;BestimmteFormAction&amp;quot; controller=&amp;quot;BestimmterControllerName&amp;quot; extension=&amp;quot;AndererExtensionName&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
Form-Felder&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;create&amp;quot; object=&amp;quot;{newProject}&amp;quot;&amp;gt;&lt;br /&gt;
 Projektname: &amp;lt;f:form.textbox property=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.submit value=&amp;quot;Speichern&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Controller Attribut&amp;#039;&amp;#039;&amp;#039; benötigt man &amp;#039;&amp;#039;&amp;#039;nur dann, wenn der Controller der die Daten auswerten soll nicht zum aktuellen View gehört.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== Name Attribute ====&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;name-Attribut&amp;#039;&amp;#039;&amp;#039; wird automatisch für das Plugin passend umgewandelt.&lt;br /&gt;
 &amp;lt;f:form.textfield name=&amp;quot;myField&amp;quot; /&amp;gt; &lt;br /&gt;
wird zu &lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tx_registierung_pi1[myField]&amp;quot; /&amp;gt;&lt;br /&gt;
Sendet das Formular nun z.B. an einen Controller: showAction, stehen die Werte als Argumente zur Verfügung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public function showAction() {&lt;br /&gt;
  $args = $this-&amp;gt;request-&amp;gt;getArguments();&lt;br /&gt;
  echo $args[&amp;#039;myField];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model &amp;#039;&amp;#039;&amp;#039;validiert automatisch&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Upload Feld ====&lt;br /&gt;
 &amp;lt;f:form.upload name=&amp;quot;myExtName[image]&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.upload property=&amp;quot;file&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.upload property=&amp;quot;image&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Zusätzliche Argumente im &amp;lt;f:link.action&amp;gt; View Helper ===&lt;br /&gt;
Standardmäßig sieht ein Action Link z.B. in der Listenansicht etwa so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{dinge}&amp;quot; as=&amp;quot;ding&amp;quot;&amp;gt;                 &lt;br /&gt;
    &amp;lt;f:link.action action=&amp;quot;show&amp;quot; arguments=&amp;quot;{ding : ding}&amp;quot;&amp;gt;Los&amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Es wird also ein ding-Objekt mit dem Bezeichner &amp;quot;ding&amp;quot; übergeben.&lt;br /&gt;
Möchte man weitere Argumente außer dem Objekt absetzen, z.B. ein String geht das so:&lt;br /&gt;
 arguments=&amp;quot;{ding : ding, key : &amp;#039;wert&amp;#039;}&amp;quot;&lt;br /&gt;
Es wird zusätzlich eine Variable key mit dem Wert &amp;#039;wert&amp;#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
Im Controller holt man sich den Wert wieder raus:&lt;br /&gt;
&lt;br /&gt;
Als Argument in der Controller Deklarierung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function showAction(\TYPO3\Extension\Domain\Model\Dinge $dinge, $key)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder im Controller selbst&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$key = $this-&amp;gt;request-&amp;gt;getArgument(&amp;#039;key&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dynamisch validieren je nach Auswahl ===&lt;br /&gt;
http://blog.teamgeist-medien.de/2015/05/typo3-extbase-dynamische-validierung-von-models-je-nach-formularauswahl.html&lt;br /&gt;
=== Typo3/Fluid: Verschiedene Models über ein Formular bedienen ===&lt;br /&gt;
Quelle: http://www.muenster-webdesign.net/blog/typo3fluid-verschiedene-models-ueber-ein-formular-bedienen/ (2015-03)&lt;br /&gt;
&lt;br /&gt;
Dank der form-ViewHelper lassen sich Formulare mittels Extbase/Fluid recht zügig umsetzen. Bei komplexeren Szenarien, bei denen in einem Formular mehrere verschiedene Models bedient werden sollen, stellt sich jedoch die Frage, wie sich dies umsetzen lässt.&lt;br /&gt;
&lt;br /&gt;
Die Lösung liegt darin, mit “namebased input”-Felder zu arbeiten. &amp;#039;&amp;#039;&amp;#039;Statt also wie üblich eine Eigenschaft im Fluid-Formular per “property”-Attribut an ein Objekt zu binden, definiert man stattdessen die Argumente “name” und “value” manuell.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel. Ein Formular ist per “object”-Attribut an ein Objekt “schornsteinfeger” gebunden. Soll im Formular nun gleichzeitig eine Eigenschaft “aussentemperatur” eines Objekts “wetter” bedient werden, könnte das Ganze etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form method=&amp;quot;post&amp;quot; action=&amp;quot;create&amp;quot; name=&amp;quot;schornsteinfeger&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; object=&amp;quot;{schornsteinfeger}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;f:form.textbox name=&amp;quot;wetter[aussentemperatur]&amp;quot; value={wetter.aussentemperatur} /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Felder validieren die nicht im Domain-Model vorhanden sind ===&lt;br /&gt;
Wenn man z.B. ein Captcha einbauen möchte braucht man Felder die nicht im Model sind. Die eingebauten Sicherheitsmechanismen in Extbase lassen dass aber nicht ohne weiteres zu. Hier wird ja automatisch jeder Wert mit dem Model abgeglichen.  &lt;br /&gt;
Möglichkeit 1 - Dummy Felder in das Model einbauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * CAPTCHA&lt;br /&gt;
 *&lt;br /&gt;
 * @var string&lt;br /&gt;
 * @validate NotEmpty, Tx_MyExt_Validation_Validator_CaptchaValidator&lt;br /&gt;
 */&lt;br /&gt;
protected $captcha;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Möglichkeit 2 - Validierer im Controller initialisieren&lt;br /&gt;
&lt;br /&gt;
http://blog.sebastiaandejonge.com/articles/2013/january/17/form-validation-of-non-domain-model-properties-with-extbase/&lt;br /&gt;
&lt;br /&gt;
=== Statische Optionen in Selectboxen ===&lt;br /&gt;
http://docs.typo3.org/typo3cms/ExtbaseGuide/stable/Fluid/BestPractice/OptionsForSelect.html&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen von Child Objekten (1:n Verbindung) ===&lt;br /&gt;
Quelle: http://snippets.in2code.de/index.php?id=273&amp;amp;tx_in2snippets_pi1%5Bsnippet%5D=74&amp;amp;tx_in2snippets_pi1%5Baction%5D=detail&amp;amp;tx_in2snippets_pi1%5Bcontroller%5D=Snippet&amp;amp;cHash=20bf6bed1ab88b5bd571fa8cc5aefd6b&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Snippet zum Speichern von 1:n relations in dynamisch erzeugten Formularen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Erklärung unter Verwendung der folgenden Problemstellung:&lt;br /&gt;
&lt;br /&gt;
Es sind die folgenden Objekte vorhanden:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Mutter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Kind&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Eine Mutter hat mehrere Kinder, diese werden in Extbase in einer Object Storage gespeichert.&lt;br /&gt;
Wenn man ein neues Kind hinzufügen will, wäre der Standardweg die newAction im ChildController aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Da man aber das Kind in dem Formular der Mutter &amp;#039;erzeugen&amp;#039; will, muss man entweder dem Formular ein neues Kind von Haus aus mitgeben (hiervon wird dringend abgeraten!) oder die Formularfelder für das Kind dynamisch erzeugen (javascript ftw).&lt;br /&gt;
&lt;br /&gt;
Fluid kennt das Objekt ObjectStorage und kann über den path syntax auch damit umgehen &lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;mother.children.0.firstName&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; der Vorname des ersten Kindes der Mutter.&lt;br /&gt;
&lt;br /&gt;
Schickt man das Formular so ab, bekommt man jedoch die Fehlermeldung, dass man &lt;br /&gt;
&lt;br /&gt;
a) properties nicht mappen darf und/oder &lt;br /&gt;
&lt;br /&gt;
b) dass das erzeugen neuer Objekte nicht erlaubt ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Der Core stellt dazu Methoden bereit&amp;#039;&amp;#039;&amp;#039;, die jedoch in keiner/keinem Docu/Manual auftauchen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes benötigt man eine &amp;#039;&amp;#039;&amp;#039;initialize&amp;lt;method&amp;gt;Action&amp;#039;&amp;#039;&amp;#039;, in diesem Fall:&lt;br /&gt;
&lt;br /&gt;
 protected function initializeUpdateAction() { ... }&lt;br /&gt;
&lt;br /&gt;
diese &amp;#039;&amp;#039;&amp;#039;wird vor der eigentlichen Methode aufgerufen&amp;#039;&amp;#039;&amp;#039; (updateAction) (Convention!). &lt;br /&gt;
Das ermöglich einem die PropertyMappingConfiguration anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die PropertyMappingConfiguration ist erstmal leer. Also baut man sich eine neue, die dann direkt injected wird :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function initializeUpdateAction() {	&lt;br /&gt;
  $mvcPropertyMappingConfiguration = \TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationBuilder::build(&lt;br /&gt;
     &amp;#039;TYPO3\\CMS\\Extbase\\Mvc\\Controller\\MvcPropertyMappingConfiguration&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
  $this-&amp;gt;arguments-&amp;gt;getArgument(&amp;#039;mother&amp;#039;)-&amp;gt;injectPropertyMappingConfiguration($mvcPropertyMappingConfiguration);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen die property-mapping-Einstellungen gemacht werden.&lt;br /&gt;
Extbase ist so aufgebaut, dass man Objekte nur über von Fluid erstellte Formulare ändern kann (trustedPropertiesToken). Dies verhindert genau das, was man hier erreichen möchte. Ein Objekt mit dynamisch erzeugten Formularfeldern verändern oder erzeugen. Geblockt ist die Funktion übrigens aus Sicherheitsgründen.&lt;br /&gt;
&lt;br /&gt;
Um das hinzufügen und erstellen neuer Objekte zuzulassen, gibt es mehrere Methoden in der PropertyMappingConfiguration:&lt;br /&gt;
&lt;br /&gt;
 1) allowAllProperties()&lt;br /&gt;
 2) allowAllPropertiesExcept(&amp;lt;string&amp;gt;)&lt;br /&gt;
 3) allowProperties(&amp;lt;csv-string&amp;gt;)&lt;br /&gt;
 4) allowCreationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
 5) allowModificationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Das tollste Feature dieser Methoden ist wohl, dass sie den Fluid path-syntax UND wildcards (&amp;#039;*&amp;#039;) unterstützen. Desweiteren bietet die Methode forProperty() den Zugriff auf tiefere Eigenschaften. Um also Kinder der Mutter hinzufügen zu dürfen, muss man das Extbase mit &lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowAllProperties();$propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowCreationForSubProperty(&amp;#039;*&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
klar machen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
allowAllProperties() gewährt einem dabei grundlegenden Zugriff auf die Eigenschaft children des Objekts und allowCreationForSubProperty(&amp;#039;*&amp;#039;) ermöglicht es, beliebig viele Kinder anzulegen. Das Wildcard ersetzt hierbei die Zahl im Fluid path-syntax.&lt;br /&gt;
&lt;br /&gt;
Damit man den Kindern noch Vornamen und Geburtstag (uv.m.) geben kann, muss man diese Eigenschaften noch &amp;#039;freischalten&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowAllProperties();&lt;br /&gt;
&lt;br /&gt;
Natürlich kann man auch den Zugriff auf bestimmte Eigenschaften beschränken:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowProperties(&amp;#039;firstname&amp;#039;,&amp;#039;birthday&amp;#039;,&amp;#039;birthplace&amp;#039;,&amp;#039;custody&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Nun gilt es noch zu beachten:&lt;br /&gt;
&lt;br /&gt;
Wenn die ObjectStorage einmal befüllt ist und ein neues Objekt hinzugefügt werden soll, müssen alle bisherigen Objekte erneut mitgegeben werden, sonst wird die Verbindung zu den alten Objekten gelöscht!&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21261</id>
		<title>Formulare mit Extbase und Fluid</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21261"/>
		<updated>2015-10-22T05:22:00Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Überblick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Index.html&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
* Falls nicht vorhanden gewünschte Action registrieren (localconf) und im Controller anlegen&lt;br /&gt;
* Fluid Form erstellen&lt;br /&gt;
* Mit Absenden oder AJAC Call ausführen&lt;br /&gt;
=== Formular Felder im Fluid Template ===&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form&lt;br /&gt;
 http://wiki.typo3.org/Fluid#form_fields&lt;br /&gt;
==== Input Feld ====&lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;rmaType&amp;quot; /&amp;gt;&lt;br /&gt;
==== Textarea ====&lt;br /&gt;
 &amp;lt;f:form.textarea name=&amp;quot;myExtName[nachricht]&amp;quot; /&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
 &amp;lt;f:form.textarea property=&amp;quot;nachricht&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radio Buttons ====&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form.radio&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Radio.html&lt;br /&gt;
&lt;br /&gt;
==== Form Tag (Action)====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;BestimmteFormAction&amp;quot; controller=&amp;quot;BestimmterControllerName&amp;quot; extension=&amp;quot;AndererExtensionName&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
Form-Felder&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;create&amp;quot; object=&amp;quot;{newProject}&amp;quot;&amp;gt;&lt;br /&gt;
 Projektname: &amp;lt;f:form.textbox property=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.submit value=&amp;quot;Speichern&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Controller Attribut&amp;#039;&amp;#039;&amp;#039; benötigt man &amp;#039;&amp;#039;&amp;#039;nur dann, wenn der Controller der die Daten auswerten soll nicht zum aktuellen View gehört.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== Name Attribute ====&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;name-Attribut&amp;#039;&amp;#039;&amp;#039; wird automatisch für das Plugin passend umgewandelt.&lt;br /&gt;
 &amp;lt;f:form.textfield name=&amp;quot;myField&amp;quot; /&amp;gt; &lt;br /&gt;
wird zu &lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tx_registierung_pi1[myField]&amp;quot; /&amp;gt;&lt;br /&gt;
Sendet das Formular nun z.B. an einen Controller: showAction, stehen die Werte als Argumente zur Verfügung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public function showAction() {&lt;br /&gt;
  $args = $this-&amp;gt;request-&amp;gt;getArguments();&lt;br /&gt;
  echo $args[&amp;#039;myField];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model &amp;#039;&amp;#039;&amp;#039;validiert automatisch&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Upload Feld ====&lt;br /&gt;
 &amp;lt;f:form.upload name=&amp;quot;myExtName[image]&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.upload property=&amp;quot;file&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.upload property=&amp;quot;image&amp;quot; /&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Zusätzliche Argumente im &amp;lt;f:link.action&amp;gt; View Helper ===&lt;br /&gt;
Standardmäßig sieht ein Action Link z.B. in der Listenansicht etwa so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{dinge}&amp;quot; as=&amp;quot;ding&amp;quot;&amp;gt;                 &lt;br /&gt;
    &amp;lt;f:link.action action=&amp;quot;show&amp;quot; arguments=&amp;quot;{ding : ding}&amp;quot;&amp;gt;Los&amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Es wird also ein ding-Objekt mit dem Bezeichner &amp;quot;ding&amp;quot; übergeben.&lt;br /&gt;
Möchte man weitere Argumente außer dem Objekt absetzen, z.B. ein String geht das so:&lt;br /&gt;
 arguments=&amp;quot;{ding : ding, key : &amp;#039;wert&amp;#039;}&amp;quot;&lt;br /&gt;
Es wird zusätzlich eine Variable key mit dem Wert &amp;#039;wert&amp;#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
Im Controller holt man sich den Wert wieder raus:&lt;br /&gt;
&lt;br /&gt;
Als Argument in der Controller Deklarierung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function showAction(\TYPO3\Extension\Domain\Model\Dinge $dinge, $key)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder im Controller selbst&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$key = $this-&amp;gt;request-&amp;gt;getArgument(&amp;#039;key&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dynamisch validieren je nach Auswahl ===&lt;br /&gt;
http://blog.teamgeist-medien.de/2015/05/typo3-extbase-dynamische-validierung-von-models-je-nach-formularauswahl.html&lt;br /&gt;
=== Typo3/Fluid: Verschiedene Models über ein Formular bedienen ===&lt;br /&gt;
Quelle: http://www.muenster-webdesign.net/blog/typo3fluid-verschiedene-models-ueber-ein-formular-bedienen/ (2015-03)&lt;br /&gt;
&lt;br /&gt;
Dank der form-ViewHelper lassen sich Formulare mittels Extbase/Fluid recht zügig umsetzen. Bei komplexeren Szenarien, bei denen in einem Formular mehrere verschiedene Models bedient werden sollen, stellt sich jedoch die Frage, wie sich dies umsetzen lässt.&lt;br /&gt;
&lt;br /&gt;
Die Lösung liegt darin, mit “namebased input”-Felder zu arbeiten. &amp;#039;&amp;#039;&amp;#039;Statt also wie üblich eine Eigenschaft im Fluid-Formular per “property”-Attribut an ein Objekt zu binden, definiert man stattdessen die Argumente “name” und “value” manuell.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel. Ein Formular ist per “object”-Attribut an ein Objekt “schornsteinfeger” gebunden. Soll im Formular nun gleichzeitig eine Eigenschaft “aussentemperatur” eines Objekts “wetter” bedient werden, könnte das Ganze etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form method=&amp;quot;post&amp;quot; action=&amp;quot;create&amp;quot; name=&amp;quot;schornsteinfeger&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; object=&amp;quot;{schornsteinfeger}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;f:form.textbox name=&amp;quot;wetter[aussentemperatur]&amp;quot; value={wetter.aussentemperatur} /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Felder validieren die nicht im Domain-Model vorhanden sind ===&lt;br /&gt;
Wenn man z.B. ein Captcha einbauen möchte braucht man Felder die nicht im Model sind. Die eingebauten Sicherheitsmechanismen in Extbase lassen dass aber nicht ohne weiteres zu. Hier wird ja automatisch jeder Wert mit dem Model abgeglichen.  &lt;br /&gt;
Möglichkeit 1 - Dummy Felder in das Model einbauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * CAPTCHA&lt;br /&gt;
 *&lt;br /&gt;
 * @var string&lt;br /&gt;
 * @validate NotEmpty, Tx_MyExt_Validation_Validator_CaptchaValidator&lt;br /&gt;
 */&lt;br /&gt;
protected $captcha;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Möglichkeit 2 - Validierer im Controller initialisieren&lt;br /&gt;
&lt;br /&gt;
http://blog.sebastiaandejonge.com/articles/2013/january/17/form-validation-of-non-domain-model-properties-with-extbase/&lt;br /&gt;
&lt;br /&gt;
=== Statische Optionen in Selectboxen ===&lt;br /&gt;
http://docs.typo3.org/typo3cms/ExtbaseGuide/stable/Fluid/BestPractice/OptionsForSelect.html&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen von Child Objekten (1:n Verbindung) ===&lt;br /&gt;
Quelle: http://snippets.in2code.de/index.php?id=273&amp;amp;tx_in2snippets_pi1%5Bsnippet%5D=74&amp;amp;tx_in2snippets_pi1%5Baction%5D=detail&amp;amp;tx_in2snippets_pi1%5Bcontroller%5D=Snippet&amp;amp;cHash=20bf6bed1ab88b5bd571fa8cc5aefd6b&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Snippet zum Speichern von 1:n relations in dynamisch erzeugten Formularen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Erklärung unter Verwendung der folgenden Problemstellung:&lt;br /&gt;
&lt;br /&gt;
Es sind die folgenden Objekte vorhanden:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Mutter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Kind&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Eine Mutter hat mehrere Kinder, diese werden in Extbase in einer Object Storage gespeichert.&lt;br /&gt;
Wenn man ein neues Kind hinzufügen will, wäre der Standardweg die newAction im ChildController aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Da man aber das Kind in dem Formular der Mutter &amp;#039;erzeugen&amp;#039; will, muss man entweder dem Formular ein neues Kind von Haus aus mitgeben (hiervon wird dringend abgeraten!) oder die Formularfelder für das Kind dynamisch erzeugen (javascript ftw).&lt;br /&gt;
&lt;br /&gt;
Fluid kennt das Objekt ObjectStorage und kann über den path syntax auch damit umgehen &lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;mother.children.0.firstName&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; der Vorname des ersten Kindes der Mutter.&lt;br /&gt;
&lt;br /&gt;
Schickt man das Formular so ab, bekommt man jedoch die Fehlermeldung, dass man &lt;br /&gt;
&lt;br /&gt;
a) properties nicht mappen darf und/oder &lt;br /&gt;
&lt;br /&gt;
b) dass das erzeugen neuer Objekte nicht erlaubt ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Der Core stellt dazu Methoden bereit&amp;#039;&amp;#039;&amp;#039;, die jedoch in keiner/keinem Docu/Manual auftauchen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes benötigt man eine &amp;#039;&amp;#039;&amp;#039;initialize&amp;lt;method&amp;gt;Action&amp;#039;&amp;#039;&amp;#039;, in diesem Fall:&lt;br /&gt;
&lt;br /&gt;
 protected function initializeUpdateAction() { ... }&lt;br /&gt;
&lt;br /&gt;
diese &amp;#039;&amp;#039;&amp;#039;wird vor der eigentlichen Methode aufgerufen&amp;#039;&amp;#039;&amp;#039; (updateAction) (Convention!). &lt;br /&gt;
Das ermöglich einem die PropertyMappingConfiguration anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die PropertyMappingConfiguration ist erstmal leer. Also baut man sich eine neue, die dann direkt injected wird :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function initializeUpdateAction() {	&lt;br /&gt;
  $mvcPropertyMappingConfiguration = \TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationBuilder::build(&lt;br /&gt;
     &amp;#039;TYPO3\\CMS\\Extbase\\Mvc\\Controller\\MvcPropertyMappingConfiguration&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
  $this-&amp;gt;arguments-&amp;gt;getArgument(&amp;#039;mother&amp;#039;)-&amp;gt;injectPropertyMappingConfiguration($mvcPropertyMappingConfiguration);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen die property-mapping-Einstellungen gemacht werden.&lt;br /&gt;
Extbase ist so aufgebaut, dass man Objekte nur über von Fluid erstellte Formulare ändern kann (trustedPropertiesToken). Dies verhindert genau das, was man hier erreichen möchte. Ein Objekt mit dynamisch erzeugten Formularfeldern verändern oder erzeugen. Geblockt ist die Funktion übrigens aus Sicherheitsgründen.&lt;br /&gt;
&lt;br /&gt;
Um das hinzufügen und erstellen neuer Objekte zuzulassen, gibt es mehrere Methoden in der PropertyMappingConfiguration:&lt;br /&gt;
&lt;br /&gt;
 1) allowAllProperties()&lt;br /&gt;
 2) allowAllPropertiesExcept(&amp;lt;string&amp;gt;)&lt;br /&gt;
 3) allowProperties(&amp;lt;csv-string&amp;gt;)&lt;br /&gt;
 4) allowCreationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
 5) allowModificationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Das tollste Feature dieser Methoden ist wohl, dass sie den Fluid path-syntax UND wildcards (&amp;#039;*&amp;#039;) unterstützen. Desweiteren bietet die Methode forProperty() den Zugriff auf tiefere Eigenschaften. Um also Kinder der Mutter hinzufügen zu dürfen, muss man das Extbase mit &lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowAllProperties();$propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowCreationForSubProperty(&amp;#039;*&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
klar machen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
allowAllProperties() gewährt einem dabei grundlegenden Zugriff auf die Eigenschaft children des Objekts und allowCreationForSubProperty(&amp;#039;*&amp;#039;) ermöglicht es, beliebig viele Kinder anzulegen. Das Wildcard ersetzt hierbei die Zahl im Fluid path-syntax.&lt;br /&gt;
&lt;br /&gt;
Damit man den Kindern noch Vornamen und Geburtstag (uv.m.) geben kann, muss man diese Eigenschaften noch &amp;#039;freischalten&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowAllProperties();&lt;br /&gt;
&lt;br /&gt;
Natürlich kann man auch den Zugriff auf bestimmte Eigenschaften beschränken:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowProperties(&amp;#039;firstname&amp;#039;,&amp;#039;birthday&amp;#039;,&amp;#039;birthplace&amp;#039;,&amp;#039;custody&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Nun gilt es noch zu beachten:&lt;br /&gt;
&lt;br /&gt;
Wenn die ObjectStorage einmal befüllt ist und ein neues Objekt hinzugefügt werden soll, müssen alle bisherigen Objekte erneut mitgegeben werden, sonst wird die Verbindung zu den alten Objekten gelöscht!&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Extbase_-_File_Abstraction_Layer_(FAL)&amp;diff=21256</id>
		<title>Extbase - File Abstraction Layer (FAL)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Extbase_-_File_Abstraction_Layer_(FAL)&amp;diff=21256"/>
		<updated>2015-10-21T15:47:51Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemein Dateien mit Extbase Handeln ==&lt;br /&gt;
&lt;br /&gt;
In general, you should be able to call getOriginalResource() on a \TYPO3\CMS\Extbase\Domain\Model\FileReference object. For more concrete examples, either refer to the doc links or have a look at the wiki for a example handling FileReferences.&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Basics ===&lt;br /&gt;
http://www.typo3tiger.de/blog/post/extbase-fal-beispiel.html&lt;br /&gt;
=== Beispiel Dateiupload ===&lt;br /&gt;
http://www.koller-webprogramming.ch/tipps-tricks/typo3-extension-entwicklung-extbase/dateien-und-bilder-mit-extbase-61-uploaddownload-via-fal-file-abstraction-layer/&lt;br /&gt;
=== Beispiel File Referenz dynamisch erzeugen ===&lt;br /&gt;
http://www.typo3tiger.de/blog/post/extbase-fal-filereference-im-controller-erzeugen.html&lt;br /&gt;
=== Upload Beispiel - Reusable Code ===&lt;br /&gt;
Um wiederverwendbar für alle Controller zu sein, darf der Code nicht im Controller sein. Dann wirds aber komplizierter. Hier ein Beispiel wie es geht:&lt;br /&gt;
 https://github.com/helhum/upload_example&lt;br /&gt;
 http://insight.helhum.io/post/85015526410/file-upload-using-extbase-and-fal-in-typo3-62&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21255</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21255"/>
		<updated>2015-10-20T21:44:30Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Hybrid Apps mit Ionic und PhoneGap Builder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
=== Links ===&lt;br /&gt;
 http://ionicframework.com/getting-started/&lt;br /&gt;
 https://www.youtube.com/watch?v=C-UwOWB9Io4&amp;amp;feature=youtu.be&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
&lt;br /&gt;
=== Schnelle App mit Ionic ===&lt;br /&gt;
# Install Ionic (s.o.)&lt;br /&gt;
# Create App&lt;br /&gt;
# Build and Test&lt;br /&gt;
&lt;br /&gt;
====Create====&lt;br /&gt;
Verzeichnis erstellen z.B. &lt;br /&gt;
 /myUserfolder/myApp&lt;br /&gt;
 ionic start myApp tabs&lt;br /&gt;
====Build and test ====&lt;br /&gt;
 cd myApp&lt;br /&gt;
 ionic platform add ios&lt;br /&gt;
 ionic build ios&lt;br /&gt;
 ionic emulate ios&lt;br /&gt;
 &lt;br /&gt;
=== Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to &amp;#039;&amp;#039;&amp;#039;use Sass&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with &amp;#039;&amp;#039;&amp;#039;live reload&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Add a platform&amp;#039;&amp;#039;&amp;#039; (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Build&amp;#039;&amp;#039;&amp;#039; your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Simulate&amp;#039;&amp;#039;&amp;#039; your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Run&amp;#039;&amp;#039;&amp;#039; your app &amp;#039;&amp;#039;&amp;#039;on a device&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Package&amp;#039;&amp;#039;&amp;#039; an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invite&amp;#039;&amp;#039;&amp;#039; anyone to preview &amp;#039;&amp;#039;&amp;#039;and test&amp;#039;&amp;#039;&amp;#039; your app&lt;br /&gt;
 ionic share EMAIL&lt;br /&gt;
&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;View App&amp;#039;&amp;#039;&amp;#039; http://view.ionic.io&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generate splash screens and icons&amp;#039;&amp;#039;&amp;#039; with ionic resource http://ionicframework.com/blog/automating-icons-and-splash-screens/&lt;br /&gt;
&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21254</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21254"/>
		<updated>2015-10-20T20:31:14Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Quicktips für Projekte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
=== Links ===&lt;br /&gt;
 http://ionicframework.com/getting-started/&lt;br /&gt;
 https://www.youtube.com/watch?v=C-UwOWB9Io4&amp;amp;feature=youtu.be&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to &amp;#039;&amp;#039;&amp;#039;use Sass&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with &amp;#039;&amp;#039;&amp;#039;live reload&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Add a platform&amp;#039;&amp;#039;&amp;#039; (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Build&amp;#039;&amp;#039;&amp;#039; your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Simulate&amp;#039;&amp;#039;&amp;#039; your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Run&amp;#039;&amp;#039;&amp;#039; your app &amp;#039;&amp;#039;&amp;#039;on a device&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Package&amp;#039;&amp;#039;&amp;#039; an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invite&amp;#039;&amp;#039;&amp;#039; anyone to preview &amp;#039;&amp;#039;&amp;#039;and test&amp;#039;&amp;#039;&amp;#039; your app&lt;br /&gt;
 ionic share EMAIL&lt;br /&gt;
&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;View App&amp;#039;&amp;#039;&amp;#039; http://view.ionic.io&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generate splash screens and icons&amp;#039;&amp;#039;&amp;#039; with ionic resource http://ionicframework.com/blog/automating-icons-and-splash-screens/&lt;br /&gt;
&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21253</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21253"/>
		<updated>2015-10-20T09:04:58Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Hybrid Apps mit Ionic und PhoneGap Builder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
=== Links ===&lt;br /&gt;
 http://ionicframework.com/getting-started/&lt;br /&gt;
 https://www.youtube.com/watch?v=C-UwOWB9Io4&amp;amp;feature=youtu.be&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to use Sass: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with live reload: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* Add a platform (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* Build your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Simulate your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Run your app on a device: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Package an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21252</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21252"/>
		<updated>2015-10-20T09:03:55Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Quickstart mit Ionic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to use Sass: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with live reload: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* Add a platform (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* Build your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Simulate your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Run your app on a device: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Package an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21251</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21251"/>
		<updated>2015-10-20T09:01:33Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Quickstart mit Ionic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Quickstart mit Ionic ==&lt;br /&gt;
 http://ionicframework.com/getting-started/&lt;br /&gt;
 https://www.youtube.com/watch?v=C-UwOWB9Io4&amp;amp;feature=youtu.be&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to use Sass: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with live reload: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* Add a platform (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* Build your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Simulate your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Run your app on a device: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Package an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21250</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21250"/>
		<updated>2015-10-20T09:01:15Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Quickstart mit Ionic ==&lt;br /&gt;
 https://www.youtube.com/watch?v=C-UwOWB9Io4&amp;amp;feature=youtu.be&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to use Sass: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with live reload: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* Add a platform (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* Build your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Simulate your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Run your app on a device: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Package an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21249</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21249"/>
		<updated>2015-10-20T08:59:16Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Hybrid Apps mit Ionic und PhoneGap Builder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
* Node.js falls nicht installiert (evtl, PATH anpassen)&lt;br /&gt;
* im Terminal über npm cordova ionic und gulp installieren&lt;br /&gt;
 sudo npm install -g cordova ionic gul&lt;br /&gt;
=== Erstes Projekt anlegen ===&lt;br /&gt;
Es gibt verschiedene Grundtemplates&lt;br /&gt;
*leer&lt;br /&gt;
 $ ionic start myApp blank&lt;br /&gt;
* tab navigation&lt;br /&gt;
 $ ionic start myApp tabs&lt;br /&gt;
* side navigation&lt;br /&gt;
 $ ionic start myApp sidemenu&lt;br /&gt;
&lt;br /&gt;
===Quicktips für Projekte===&lt;br /&gt;
* cd into your project: &lt;br /&gt;
  cd firstIonicAppOrAnotherName&lt;br /&gt;
* Setup this project to use Sass: &lt;br /&gt;
 ionic setup sass&lt;br /&gt;
* Develop in the browser with live reload: &lt;br /&gt;
 ionic serve&lt;br /&gt;
* Add a platform (ios or Android): &lt;br /&gt;
 ionic platform add ios [android]&lt;br /&gt;
Note: iOS development requires OS X currently&lt;br /&gt;
See the Android Platform Guide for full Android installation instructions: https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html&lt;br /&gt;
* Build your app: &lt;br /&gt;
 ionic build &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Simulate your app: &lt;br /&gt;
 ionic emulate &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Run your app on a device: &lt;br /&gt;
 ionic run &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
* Package an app using Ionic package service: &lt;br /&gt;
 ionic package &amp;lt;MODE&amp;gt; &amp;lt;PLATFORM&amp;gt;&lt;br /&gt;
For more help use ionic --help or ionic docs&lt;br /&gt;
Visit the Ionic docs: http://ionicframework.com/docs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ionic Account===&lt;br /&gt;
Create an ionic.io account to send Push Notifications and use the Ionic View app?&lt;br /&gt;
(Y/n):&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PATH_Variable_unter_MacOS&amp;diff=21248</id>
		<title>PATH Variable unter MacOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PATH_Variable_unter_MacOS&amp;diff=21248"/>
		<updated>2015-10-20T05:22:04Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ausgabe: &lt;br /&gt;
 echo &amp;quot;$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Für das Einrichten bestimmter Programme muss die PATH-Umgebungsvariable um eine neue Pfad-Angabe erweitert werden. Die ist z.B. nach der Installation von mysql der Fall. Damit die mysql-Kommandozeilen-Beffehle direkt verfügbar sind, muss die Systemvariable PATH um den Pfad /usr/local/mysql/bin erweitert werden.&lt;br /&gt;
Unter dem Mac gibt möchte ich dazu drei mögliche Varianten vorstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== I. Variante: /etc/paths (global) ==&lt;br /&gt;
&lt;br /&gt;
Bei dieser Variante wird die &amp;#039;&amp;#039;&amp;#039;zentrale Datei&amp;#039;&amp;#039;&amp;#039; /etc/paths editiert. In dieser Datei stehen alle Pfade, die zur PATH-Variable hinzugefügt werden sollen, zeilenweise unter einander. Um einen Pfad zu ergänzen, müssen folgende Schritte befolgt werden:&lt;br /&gt;
&lt;br /&gt;
1. Schritt: Öffnen eines Terminal-Fensters&lt;br /&gt;
&lt;br /&gt;
2. Schritt: Datei im Editor öffnen&lt;br /&gt;
 $ sudo vi /etc/paths&lt;br /&gt;
3. Schritt: Den gewünschten Path als neue Zeile anhängen&lt;br /&gt;
&lt;br /&gt;
4. Schritt: Datei speichern&lt;br /&gt;
&lt;br /&gt;
Der neue Pfad steht jetzt in einer neuen Shell zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Setzt die Pfade global für alle User!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== II. Variante: /etc/paths.d ==&lt;br /&gt;
&lt;br /&gt;
Stellt eine Abwandlung von Variante I. dar, die ich jedoch nicht unterschlagen möchte. Anstelle einer Datei wie /etc/paths, die alle Pfade beinhaltet, können Pfade in eigenen Dateien gruppiert werden. Dies macht die Administration der Pfade übersichtlicher. Dazu werden Dateien mit den gewünschten Pfad-Angaben (wie /etc/paths) in dem Verzeichnis /etc/paths.d angelegt. In unserem Beispiel verwenden wir eine Datei namens paths-example.  Hier macht es Sinn, der jeweiligen Datei den Namen der gewünschten Grupperierung zu geben, z.B. paths-databases.&lt;br /&gt;
&lt;br /&gt;
1. Schritt: Öffnen eines Terminal-Fensters&lt;br /&gt;
&lt;br /&gt;
2. Schritt: In Pfad wechseln&lt;br /&gt;
&lt;br /&gt;
 $ cd /etc/paths.d&lt;br /&gt;
3. Schritt: Eigene Pfad-Datei erzeugen&lt;br /&gt;
&lt;br /&gt;
 $ touch paths-example&lt;br /&gt;
&lt;br /&gt;
4. Schritt: Den gewünschten Path als neue Zeile anhängen&lt;br /&gt;
&lt;br /&gt;
5. Schritt: Datei speichern&lt;br /&gt;
&lt;br /&gt;
Hinweis: Setzt die Pfade global für alle User!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== III. Variante: .profile - User bezogen==&lt;br /&gt;
&lt;br /&gt;
Wer den &amp;#039;&amp;#039;&amp;#039;Standard-Weg&amp;#039;&amp;#039;&amp;#039; bevorzugt, setzt den Pfad manuell in der Datei .profile:&lt;br /&gt;
&lt;br /&gt;
1. Schritt: Öffnen eines Terminal-Fensters&lt;br /&gt;
&lt;br /&gt;
2. Schritt: Ist Datei .profile nicht um User-Home-Verzeichnis?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ touch .profile&lt;br /&gt;
&lt;br /&gt;
3. Schritt: Datei im Editor öffnen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ vi .profile&lt;br /&gt;
&lt;br /&gt;
4. Schritt: PATH-Variable setzen:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/mein/neuer/pfad&lt;br /&gt;
&lt;br /&gt;
4. Schritt: Datei speichern&lt;br /&gt;
&lt;br /&gt;
Der neue Pfad steht jetzt in einer neuen Shell zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Setzt die Pfade nur für den User, in dessen Homeverzeichnis die .profile angepasst wird!&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
http://www.sweeting.org/mark/blog/2008/05/26/mac-os-x-tip-setting-path-environment-variables&lt;br /&gt;
&lt;br /&gt;
== Pfad zur Laufzeit exportieren ==&lt;br /&gt;
Das funktioniert auch in der .profile Datei.&lt;br /&gt;
&lt;br /&gt;
Beispiel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Pfad angaben zur PATH variable hinzufügen&lt;br /&gt;
export PATH=&amp;quot;/opt/local/bin:/opt/local/sbin:$PATH&amp;quot;&lt;br /&gt;
# Finished adapting your PATH environment variable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21247</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21247"/>
		<updated>2015-10-20T05:17:33Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
 http://phonegap.com/blog/build/new-apple-app-store-submittal-rules/&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21246</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21246"/>
		<updated>2015-10-20T05:17:07Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
 http://www.adobe.com/devnet/phonegap/articles/apple-application-rejections-and-phonegap-advice.html&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21245</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21245"/>
		<updated>2015-10-20T05:16:31Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
Wichtig für iOS - man sollte die Design Richtlinien beachten, sonst kann es sein, daß Apps zurückgewiesen werden. Also einfach eine Website kapseln klappt nicht.&lt;br /&gt;
&lt;br /&gt;
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21244</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21244"/>
		<updated>2015-10-20T05:15:25Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* iUi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;br /&gt;
=== app-UI ===&lt;br /&gt;
http://triceam.github.io/app-UI/&lt;br /&gt;
&lt;br /&gt;
* Zu wenig Infos im Moment (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21243</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21243"/>
		<updated>2015-10-20T05:13:51Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Mobile Angular UI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;br /&gt;
=== iUi ===&lt;br /&gt;
http://www.iui-js.org/demo&lt;br /&gt;
&lt;br /&gt;
Sieht ein bischen Old-Fashioned aus.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21242</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21242"/>
		<updated>2015-10-20T05:12:26Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Subsonic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Supersonic UI ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus. Fork von Ionic.&lt;br /&gt;
* Benötigt kein PhoneGap - eigener Wrapper (AppGyver) ohne den es aber auch nicht mehr so gut nutzbar ist. Dafür ist der Wrapper auch Cordova Kompatibel.&lt;br /&gt;
* Nutzt AngularJS und das CSS UI von Ionic&lt;br /&gt;
* Extrem nativer Look, gutes Zusammenspiel von UI und HTML5&lt;br /&gt;
* Gute Data-Sets&lt;br /&gt;
&lt;br /&gt;
=== Intel App Framework ===&lt;br /&gt;
Sieht ein wenig eingeschlafen aus&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21241</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21241"/>
		<updated>2015-10-20T04:58:38Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Frameworks ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
Vergleiche:&lt;br /&gt;
==== Vergleich Hybrid Mobile App Frameworks ====&lt;br /&gt;
 http://www.gajotres.net/the-top-5-angularjs-hybrid-mobile-app-frameworks-proscons/&lt;br /&gt;
&lt;br /&gt;
http://www.gajotres.net/top-7-mobile-application-html5-frameworks/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Frameworks arbeiten oft mit darunterliegenden JavaScript Libs zusammen, z.B. React, AngularJS, jQuery... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reapp ===&lt;br /&gt;
http://reapp.io/ &lt;br /&gt;
&lt;br /&gt;
Arbeitet mit ReactJS&lt;br /&gt;
=== TouchstoneJS ===&lt;br /&gt;
http://touchstonejs.io&lt;br /&gt;
&lt;br /&gt;
Sieht laut Demo sehr vielversprechend aus. Arbeitet mit React.JS.&lt;br /&gt;
&lt;br /&gt;
=== Ionic ===&lt;br /&gt;
Nutzt AngularJS, funktioniert mit PhoneGap, soll eine gute Performance haben. Verbreitung 2015 recht gut, soll ein gutes Forum haben.&lt;br /&gt;
&lt;br /&gt;
=== Subsonic ===&lt;br /&gt;
Sieht auf den ersten Blick sehr schick aus.&lt;br /&gt;
&lt;br /&gt;
=== Mobile Angular UI ===&lt;br /&gt;
Setzt auf &amp;#039;&amp;#039;&amp;#039;Bootstrap 3&amp;#039;&amp;#039;&amp;#039; auf und ergänzt es mit einigen Komponenten wie switches, overlays, sidebars, scrollable areas, absolutely positioned top/bottom nav bars ohne Bouncing... Nicht von jQuery oder bootstrap.js abhängig. Nutzt stabile Libraries wie &amp;#039;&amp;#039;&amp;#039;fastclick.js&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;overthrow.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Gut geeignet, wenn eine Bootstrap Webapp besteht. Schlechte Doku, kleine Community (2015)&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21240</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21240"/>
		<updated>2015-10-19T15:36:16Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
== Links ==&lt;br /&gt;
http://reapp.io/&lt;br /&gt;
&lt;br /&gt;
http://ionicframework.com/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird. &lt;br /&gt;
&lt;br /&gt;
AngularJS ist ein Framework zur WebApp Entwicklung mit hoher Performance. Ionic steuert viele Komponenten und in MobileApp übliche Bedienelemente bei.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=NodeJS&amp;diff=21239</id>
		<title>NodeJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=NodeJS&amp;diff=21239"/>
		<updated>2015-10-19T15:32:32Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NodeJS oder node.js ist ein Server für JavaScript basierend auf Googles V8 JavaScript Engine. &lt;br /&gt;
&lt;br /&gt;
Entwickelt man Programme mit JavaScript nutzt man normalerweise die im Browser verbaute JavaScript Engine um diese Programme auszuführen. Installiert man NodeJS kann der Rechner selbst oder besser der NodeJS Server das JavaScript ausführen. Das geht wesentlich schneller.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Tools, vor allem bei der Entwicklung von HybridApps und Webapps, die das nutzen können.&lt;br /&gt;
&lt;br /&gt;
Auf dem Mac liegt Node normalerweise in: &lt;br /&gt;
 /usr/local/bin/node&lt;br /&gt;
&lt;br /&gt;
== Node Packet Manager ==&lt;br /&gt;
Node enthält den npm Manager, er dient als command line tool für viele JavaScript basierte Tools, z.b. Cordova, &lt;br /&gt;
&lt;br /&gt;
 npm was installed at&lt;br /&gt;
 /usr/local/bin/npm&lt;br /&gt;
 Make sure that /usr/local/bin is in your $PATH.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=NodeJS&amp;diff=21238</id>
		<title>NodeJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=NodeJS&amp;diff=21238"/>
		<updated>2015-10-19T15:26:59Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: Die Seite wurde neu angelegt: „NodeJS oder node.js ist ein Server für JavaScript basierend auf Googles V8 JavaScript Engine.   Entwickelt man Programme mit JavaScript nutzt man normalerweis…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NodeJS oder node.js ist ein Server für JavaScript basierend auf Googles V8 JavaScript Engine. &lt;br /&gt;
&lt;br /&gt;
Entwickelt man Programme mit JavaScript nutzt man normalerweise die im Browser verbaute JavaScript Engine um diese Programme auszuführen. Installiert man NodeJS kann der Rechner selbst oder besser der NodeJS Server das JavaScript ausführen. Das geht wesentlich schneller.&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Tools, vor allem bei der Entwicklung von HybridApps und Webapps, die das nutzen können.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21237</id>
		<title>Hybrid Apps Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Hybrid_Apps_Development&amp;diff=21237"/>
		<updated>2015-10-19T15:16:15Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: Die Seite wurde neu angelegt: „Siehe auch: App Entwicklung mit PhoneGap  Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.  PhoneGap ermöglicht Web Apps den Zugriff auf S…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch: [[App Entwicklung mit PhoneGap]]&lt;br /&gt;
&lt;br /&gt;
Hybride Apps sind im Prinzip Webapps im Gewand einer Native App.&lt;br /&gt;
&lt;br /&gt;
PhoneGap ermöglicht Web Apps den Zugriff auf Smartphone Funktionen indem es sie in einen nativen Wrapper packt. Nachteil ist aber das die Smartphone typischen Bedienung nicht genutzt wird, sondern i.d.R. über HTML nachgebildet werden müssen. Dazu gibt es verschiedene Frameworks. Früher war das z.B. jQuery Mobile, das allerdings keine besonders gute Perfomance hat.  Oder Sencha, das eine große Einarbeitungszeit erfordet. Inzwischen gibt es einige Alternativen.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Apps mit Ionic und PhoneGap Builder==&lt;br /&gt;
Ionic basiert auf AngularJS, mit diesen Tools erstellen wir die Webapp, die dann mit PhoneGap Builder zu einer Hybrid App gebündelt wird.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21236</id>
		<title>App Entwicklung mit PhoneGap</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21236"/>
		<updated>2015-10-19T15:11:11Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
[[Hybrid Apps Development]]&lt;br /&gt;
&lt;br /&gt;
== PhoneGap Quickstart ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Adobe PhoneGap Desktop App&amp;#039;&amp;#039;&amp;#039; auf dem PC installieren&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;PhoneGap Developer App&amp;#039;&amp;#039;&amp;#039; auf dem Smartphone installieren. Diese erlaubt es Apps unkompliziert auf dem Smartphone zu testen.&lt;br /&gt;
# Erste App herstellen...&lt;br /&gt;
=== Die erste App ===&lt;br /&gt;
Create Default PhoneGap Project - die Desktop App enthält bereits ein Default Projekt, das als Ausgangspunkt genutzt werden kann.&lt;br /&gt;
==== App erstellen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Neue App erstellen&amp;#039;&amp;#039;&amp;#039; mit dem Plus Symbol &amp;gt; Create New App &amp;gt; Benötigte Daten eintragen Fertig&lt;br /&gt;
==== App testen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;App Testen&amp;#039;&amp;#039;&amp;#039; - Die Desktop App enthält einen kleinen Server über den die Smartphone App sich das Paket laden kann. In der Desktop App den Play Button drücken falls der Server nicht aktiv ist (siehe unterer Rand). Dann die angezeigte Adresse in der Smartphone App eingeben um die App zu holen.&lt;br /&gt;
== App veröffentlichen ==&lt;br /&gt;
=== Apps mit Adobe Build veröffentlichen ===&lt;br /&gt;
Einfachster Weg weil die Kompilierung durch die Adobe Server zu großen Teilen übernommen werden. Ist für kommerzielle Projekte kostenpflichtig.&lt;br /&gt;
&lt;br /&gt;
== PhoneGap Entwicklung mit Dreamweaver ==&lt;br /&gt;
&lt;br /&gt;
== Wichtige Begriffe und Tools kurz erklärt ==&lt;br /&gt;
=== Adobe PhoneGap Desktop Application ===&lt;br /&gt;
Grafische Oberfläche um Drag and Drop Apps zu bauen. Im Gegensatz zum Command Line Interface&lt;br /&gt;
&lt;br /&gt;
=== PhoneGap Developer App ===&lt;br /&gt;
Ist eine Smartphone App, mit der man Apps unkompliziert auf dem Smartphone testen kann ohne den ganzen Kompilierungs Akt.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines zu PhoneGap ==&lt;br /&gt;
=== PhoneGap = Apache Cordova ===&lt;br /&gt;
http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-name/&lt;br /&gt;
&lt;br /&gt;
PhoneGap wurde Ende 2012 von Adobe übernommen. Die Code Basis wurde der Community übergeben und stehe jetzt als Apache Cordova unter der Apache Lizenz. PhoneGap bleibt als spezielle Adobe Distribution erhalten. Im Moment ist die Codebasis identisch (Anfang 2013). Die Basis für PhoneGap wird vermutlich auch Cordova bleiben.&lt;br /&gt;
&lt;br /&gt;
Über die Zeit werden bei PhoneGap wahrscheinlich einige Plugins und Komponenten dazukommen um die Verknüpfung mit anderen Adobe Tools zu realisieren. PhoneGap wird aber OpenSource und kostenlos bleiben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://phonegap.com/developer/&lt;br /&gt;
&lt;br /&gt;
http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/&lt;br /&gt;
&lt;br /&gt;
== Audio in Phonegap / Cordova ==&lt;br /&gt;
[[Audio in PhoneGap / Cordova]]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
Es gibt Compiler in der Cloud mit denen man arbeiten kann. Oder man nutzt die nativen Entwicklungsumgebungen der entsprechenden Plattformen.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Entwicklung ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
[[Android App Entwicklung mit Cordova / PhoneGap]]&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21235</id>
		<title>App Entwicklung mit PhoneGap</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21235"/>
		<updated>2015-10-19T12:51:58Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* = Apps mit Adobe Build veröffentlichen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PhoneGap Quickstart ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Adobe PhoneGap Desktop App&amp;#039;&amp;#039;&amp;#039; auf dem PC installieren&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;PhoneGap Developer App&amp;#039;&amp;#039;&amp;#039; auf dem Smartphone installieren. Diese erlaubt es Apps unkompliziert auf dem Smartphone zu testen.&lt;br /&gt;
# Erste App herstellen...&lt;br /&gt;
=== Die erste App ===&lt;br /&gt;
Create Default PhoneGap Project - die Desktop App enthält bereits ein Default Projekt, das als Ausgangspunkt genutzt werden kann.&lt;br /&gt;
==== App erstellen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Neue App erstellen&amp;#039;&amp;#039;&amp;#039; mit dem Plus Symbol &amp;gt; Create New App &amp;gt; Benötigte Daten eintragen Fertig&lt;br /&gt;
==== App testen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;App Testen&amp;#039;&amp;#039;&amp;#039; - Die Desktop App enthält einen kleinen Server über den die Smartphone App sich das Paket laden kann. In der Desktop App den Play Button drücken falls der Server nicht aktiv ist (siehe unterer Rand). Dann die angezeigte Adresse in der Smartphone App eingeben um die App zu holen.&lt;br /&gt;
== App veröffentlichen ==&lt;br /&gt;
=== Apps mit Adobe Build veröffentlichen ===&lt;br /&gt;
Einfachster Weg weil die Kompilierung durch die Adobe Server zu großen Teilen übernommen werden. Ist für kommerzielle Projekte kostenpflichtig.&lt;br /&gt;
&lt;br /&gt;
== PhoneGap Entwicklung mit Dreamweaver ==&lt;br /&gt;
&lt;br /&gt;
== Wichtige Begriffe und Tools kurz erklärt ==&lt;br /&gt;
=== Adobe PhoneGap Desktop Application ===&lt;br /&gt;
Grafische Oberfläche um Drag and Drop Apps zu bauen. Im Gegensatz zum Command Line Interface&lt;br /&gt;
&lt;br /&gt;
=== PhoneGap Developer App ===&lt;br /&gt;
Ist eine Smartphone App, mit der man Apps unkompliziert auf dem Smartphone testen kann ohne den ganzen Kompilierungs Akt.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines zu PhoneGap ==&lt;br /&gt;
=== PhoneGap = Apache Cordova ===&lt;br /&gt;
http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-name/&lt;br /&gt;
&lt;br /&gt;
PhoneGap wurde Ende 2012 von Adobe übernommen. Die Code Basis wurde der Community übergeben und stehe jetzt als Apache Cordova unter der Apache Lizenz. PhoneGap bleibt als spezielle Adobe Distribution erhalten. Im Moment ist die Codebasis identisch (Anfang 2013). Die Basis für PhoneGap wird vermutlich auch Cordova bleiben.&lt;br /&gt;
&lt;br /&gt;
Über die Zeit werden bei PhoneGap wahrscheinlich einige Plugins und Komponenten dazukommen um die Verknüpfung mit anderen Adobe Tools zu realisieren. PhoneGap wird aber OpenSource und kostenlos bleiben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://phonegap.com/developer/&lt;br /&gt;
&lt;br /&gt;
http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/&lt;br /&gt;
&lt;br /&gt;
== Audio in Phonegap / Cordova ==&lt;br /&gt;
[[Audio in PhoneGap / Cordova]]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
Es gibt Compiler in der Cloud mit denen man arbeiten kann. Oder man nutzt die nativen Entwicklungsumgebungen der entsprechenden Plattformen.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Entwicklung ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
[[Android App Entwicklung mit Cordova / PhoneGap]]&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21234</id>
		<title>App Entwicklung mit PhoneGap</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21234"/>
		<updated>2015-10-19T12:50:52Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* PhoneGap Quickstart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PhoneGap Quickstart ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Adobe PhoneGap Desktop App&amp;#039;&amp;#039;&amp;#039; auf dem PC installieren&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;PhoneGap Developer App&amp;#039;&amp;#039;&amp;#039; auf dem Smartphone installieren. Diese erlaubt es Apps unkompliziert auf dem Smartphone zu testen.&lt;br /&gt;
# Erste App herstellen...&lt;br /&gt;
=== Die erste App ===&lt;br /&gt;
Create Default PhoneGap Project - die Desktop App enthält bereits ein Default Projekt, das als Ausgangspunkt genutzt werden kann.&lt;br /&gt;
==== App erstellen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Neue App erstellen&amp;#039;&amp;#039;&amp;#039; mit dem Plus Symbol &amp;gt; Create New App &amp;gt; Benötigte Daten eintragen Fertig&lt;br /&gt;
==== App testen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;App Testen&amp;#039;&amp;#039;&amp;#039; - Die Desktop App enthält einen kleinen Server über den die Smartphone App sich das Paket laden kann. In der Desktop App den Play Button drücken falls der Server nicht aktiv ist (siehe unterer Rand). Dann die angezeigte Adresse in der Smartphone App eingeben um die App zu holen.&lt;br /&gt;
== App veröffentlichen ==&lt;br /&gt;
=== Apps mit Adobe Build veröffentlichen ==&lt;br /&gt;
Einfachster Weg weil die Kompilierung durch die Adobe Server zu großen Teilen übernommen werden. Ist für kommerzielle Projekte kostenpflichtig.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Begriffe und Tools kurz erklärt ==&lt;br /&gt;
=== Adobe PhoneGap Desktop Application ===&lt;br /&gt;
Grafische Oberfläche um Drag and Drop Apps zu bauen. Im Gegensatz zum Command Line Interface&lt;br /&gt;
&lt;br /&gt;
=== PhoneGap Developer App ===&lt;br /&gt;
Ist eine Smartphone App, mit der man Apps unkompliziert auf dem Smartphone testen kann ohne den ganzen Kompilierungs Akt.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines zu PhoneGap ==&lt;br /&gt;
=== PhoneGap = Apache Cordova ===&lt;br /&gt;
http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-name/&lt;br /&gt;
&lt;br /&gt;
PhoneGap wurde Ende 2012 von Adobe übernommen. Die Code Basis wurde der Community übergeben und stehe jetzt als Apache Cordova unter der Apache Lizenz. PhoneGap bleibt als spezielle Adobe Distribution erhalten. Im Moment ist die Codebasis identisch (Anfang 2013). Die Basis für PhoneGap wird vermutlich auch Cordova bleiben.&lt;br /&gt;
&lt;br /&gt;
Über die Zeit werden bei PhoneGap wahrscheinlich einige Plugins und Komponenten dazukommen um die Verknüpfung mit anderen Adobe Tools zu realisieren. PhoneGap wird aber OpenSource und kostenlos bleiben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://phonegap.com/developer/&lt;br /&gt;
&lt;br /&gt;
http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/&lt;br /&gt;
&lt;br /&gt;
== Audio in Phonegap / Cordova ==&lt;br /&gt;
[[Audio in PhoneGap / Cordova]]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
Es gibt Compiler in der Cloud mit denen man arbeiten kann. Oder man nutzt die nativen Entwicklungsumgebungen der entsprechenden Plattformen.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Entwicklung ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
[[Android App Entwicklung mit Cordova / PhoneGap]]&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21233</id>
		<title>App Entwicklung mit PhoneGap</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21233"/>
		<updated>2015-10-19T12:32:59Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PhoneGap Quickstart ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Adobe PhoneGap Desktop App&amp;#039;&amp;#039;&amp;#039; auf dem PC installieren&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;PhoneGap Developer App&amp;#039;&amp;#039;&amp;#039; auf dem Smartphone installieren. Diese erlaubt es Apps unkompliziert auf dem Smartphone zu testen.&lt;br /&gt;
# Erste App herstellen...&lt;br /&gt;
=== Die erste App ===&lt;br /&gt;
Create Default PhoneGap Project - die Desktop App enthält bereits ein Default Projekt, das als Ausgangspunkt genutzt werden kann.&lt;br /&gt;
==== App erstellen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Neue App erstellen&amp;#039;&amp;#039;&amp;#039; mit dem Plus Symbol &amp;gt; Create New App &amp;gt; Benötigte Daten eintragen Fertig&lt;br /&gt;
==== App testen ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;App Testen&amp;#039;&amp;#039;&amp;#039; - Die Desktop App enthält einen kleinen Server über den die Smartphone App sich das Paket laden kann. In der Desktop App den Play Button drücken falls der Server nicht aktiv ist (siehe unterer Rand). Dann die angezeigte Adresse in der Smartphone App eingeben um die App zu holen.&lt;br /&gt;
&lt;br /&gt;
=== PhoneGap = Apache Cordova ===&lt;br /&gt;
http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-name/&lt;br /&gt;
&lt;br /&gt;
PhoneGap wurde Ende 2012 von Adobe übernommen. Die Code Basis wurde der Community übergeben und stehe jetzt als Apache Cordova unter der Apache Lizenz. PhoneGap bleibt als spezielle Adobe Distribution erhalten. Im Moment ist die Codebasis identisch (Anfang 2013). Die Basis für PhoneGap wird vermutlich auch Cordova bleiben.&lt;br /&gt;
&lt;br /&gt;
Über die Zeit werden bei PhoneGap wahrscheinlich einige Plugins und Komponenten dazukommen um die Verknüpfung mit anderen Adobe Tools zu realisieren. PhoneGap wird aber OpenSource und kostenlos bleiben.&lt;br /&gt;
&lt;br /&gt;
=== Adobe PhoneGap Desktop Application ===&lt;br /&gt;
Grafische Oberfläche um Drag and Drop Apps zu bauen. Im Gegensatz zum Command Line Interface&lt;br /&gt;
&lt;br /&gt;
=== PhoneGap Developer App ===&lt;br /&gt;
Ist eine Smartphone App, mit der man Apps unkompliziert auf dem Smartphone testen kann ohne den ganzen Kompilierungs Akt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://phonegap.com/developer/&lt;br /&gt;
&lt;br /&gt;
http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/&lt;br /&gt;
&lt;br /&gt;
== Audio in Phonegap / Cordova ==&lt;br /&gt;
[[Audio in PhoneGap / Cordova]]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
Es gibt Compiler in der Cloud mit denen man arbeiten kann. Oder man nutzt die nativen Entwicklungsumgebungen der entsprechenden Plattformen.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Entwicklung ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
[[Android App Entwicklung mit Cordova / PhoneGap]]&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21232</id>
		<title>App Entwicklung mit PhoneGap</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=App_Entwicklung_mit_PhoneGap&amp;diff=21232"/>
		<updated>2015-10-19T12:09:04Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PhoneGap = Apache Cordova ==&lt;br /&gt;
http://phonegap.com/2012/03/19/phonegap-cordova-and-what%E2%80%99s-in-a-name/&lt;br /&gt;
&lt;br /&gt;
PhoneGap wurde Ende 2012 von Adobe übernommen. Die Code Basis wurde der Community übergeben und stehe jetzt als Apache Cordova unter der Apache Lizenz. PhoneGap bleibt als spezielle Adobe Distribution erhalten. Im Moment ist die Codebasis identisch (Anfang 2013). Die Basis für PhoneGap wird vermutlich auch Cordova bleiben.&lt;br /&gt;
&lt;br /&gt;
Über die Zeit werden bei PhoneGap wahrscheinlich einige Plugins und Komponenten dazukommen um die Verknüpfung mit anderen Adobe Tools zu realisieren. PhoneGap wird aber OpenSource und kostenlos bleiben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://phonegap.com/developer/&lt;br /&gt;
&lt;br /&gt;
http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/&lt;br /&gt;
&lt;br /&gt;
== Audio in Phonegap / Cordova ==&lt;br /&gt;
[[Audio in PhoneGap / Cordova]]&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
Es gibt Compiler in der Cloud mit denen man arbeiten kann. Oder man nutzt die nativen Entwicklungsumgebungen der entsprechenden Plattformen.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Entwicklung ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
[[Android App Entwicklung mit Cordova / PhoneGap]]&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Abstimmung_wordpress&amp;diff=21231</id>
		<title>Abstimmung wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Abstimmung_wordpress&amp;diff=21231"/>
		<updated>2015-10-14T08:13:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Umfrage erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;siehe auch [[DEKRA Direkt Blog]]&lt;br /&gt;
Der Blog &amp;#039;&amp;#039;&amp;#039;DEKRA Direkt&amp;#039;&amp;#039;&amp;#039; wird als interner Konzernblog verwendet und soll als Kontaktmittel der Mitarbeiter zur Vorstandsebene dienen. Dazu gibt es unter anderem die DEKRA Direkt Mitarbeiter Umfrage.&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
Besser zum Testen wäre es wenn die Umfrage zunächst in eine Kategorie Test geht die auf der Startseite nicht dargestellt wird. &lt;br /&gt;
&lt;br /&gt;
Wordpress Extension Yop Poll - verwendet bei Mascha im Blog intern:&lt;br /&gt;
&lt;br /&gt;
== yop poll Anpassungen ==&lt;br /&gt;
=== yop poll Tabellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
------------                -----------------                 --------------&lt;br /&gt;
yop_polls                   yop_poll_answers                  yop_poll_logs&lt;br /&gt;
------------                -----------------                 --------------&lt;br /&gt;
id          --------------| id               --------------|  id&lt;br /&gt;
name                      |-poll_id                        |  pn&lt;br /&gt;
question                    answer                         |  poll_id&lt;br /&gt;
total_votes                 votes                          |  vote_id&lt;br /&gt;
total_answers               ...                            |- answer_id&lt;br /&gt;
...                                                           --------------&lt;br /&gt;
------------                -----------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------      ----------------------------&lt;br /&gt;
yop_poll_custom_fields      yop_poll_votes_custom_fields&lt;br /&gt;
----------------------      ----------------------------&lt;br /&gt;
id                          id&lt;br /&gt;
poll_id                     poll_id&lt;br /&gt;
custom_field                vote_id&lt;br /&gt;
...                         custom_field_id&lt;br /&gt;
----------------------      user_id&lt;br /&gt;
                            custom_field_value&lt;br /&gt;
                            ----------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da bei einem custom text field bei der fragesstellung nur einzeiliger text möglich war, musst die datei &lt;br /&gt;
 /wp-content/plugins/yop-poll/inc/yop_poll_model.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der datenbank die Tabelle:&lt;br /&gt;
&lt;br /&gt;
 kas_wp_yop_poll_votes_custom_fields&lt;br /&gt;
&lt;br /&gt;
Feld: custom_field_value&lt;br /&gt;
&lt;br /&gt;
von varchar (255) auf Text geändert.&lt;br /&gt;
&lt;br /&gt;
== SQL-Abfragen für Antworten mit Kommentar ==&lt;br /&gt;
=== SQL nur Ergebnisse ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT `id` , `poll_id` , `answer_id` , `ip` , `http_referer` , `vote_date` , `pn`&lt;br /&gt;
FROM `kas_wp_yop_poll_logs`&lt;br /&gt;
WHERE `poll_id` =38&lt;br /&gt;
ORDER BY `answer_id` ASC&lt;br /&gt;
LIMIT 0 , 500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== SQL Abfrage mit Kommentaren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alte Abfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM `kas_wp_yop_poll_logs`&lt;br /&gt;
LEFT OUTER JOIN `kas_wp_yop_poll_votes_custom_fields` ON `kas_wp_yop_poll_logs`.`vote_id` = `kas_wp_yop_poll_votes_custom_fields`.`vote_id`&lt;br /&gt;
WHERE `kas_wp_yop_poll_logs`.`poll_id` =13&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weitere Abfragen ===&lt;br /&gt;
Welche Custom Fields gehören zu welchen Umfrage (Pivot Version)&lt;br /&gt;
&lt;br /&gt;
Dynamische Version (funktioniert noch nicht aber die Richtung dürfte stimmen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @sql = NULL;&lt;br /&gt;
SELECT&lt;br /&gt;
  GROUP_CONCAT(DISTINCT&lt;br /&gt;
    CONCAT(&lt;br /&gt;
      &amp;#039;max(case when custom_field = &amp;#039;&amp;#039;&amp;#039;,&lt;br /&gt;
      custom_field,&lt;br /&gt;
      &amp;#039;&amp;#039;&amp;#039; then custom_field end) AS &amp;#039;,&lt;br /&gt;
      custom_field&lt;br /&gt;
    )&lt;br /&gt;
  ) INTO @sql&lt;br /&gt;
FROM kas_wp_yop_poll_custom_fields;&lt;br /&gt;
&lt;br /&gt;
SET @sql = CONCAT(&amp;#039;SELECT poll_id, &amp;#039;, @sql, &amp;#039; &lt;br /&gt;
                  FROM kas_wp_yop_poll_custom_fields &lt;br /&gt;
                  GROUP BY poll_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
PREPARE stmt FROM @sql;&lt;br /&gt;
EXECUTE stmt;&lt;br /&gt;
DEALLOCATE PREPARE stmt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Neue Umfrage für DEKRA Connect durchführen ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Läuft 2 Wochen ab ca. Mitte des Monats. Danach Auswertung und Grafikerstellung.&lt;br /&gt;
&lt;br /&gt;
== Technischer Ablauf ==&lt;br /&gt;
Stand März 2015&lt;br /&gt;
&lt;br /&gt;
* Das Umfrage Plugin im WP ist auf &amp;#039;&amp;#039;&amp;#039;block by Personal Number&amp;#039;&amp;#039;&amp;#039; gestellt.&lt;br /&gt;
* Ein User kann nur Voten wenn eine id=12345 (Personalnummer) angehängt ist. Ansonsten wird zunächst auf das DEKRA Intranet weiter geleitet (über alert). &lt;br /&gt;
* Dort wird die Personalnummer als id=12345 an den Link angehängt und auf intern-blog.dekra.de/category/dekra-direkt/?id=12345 geleitet Nur wenn eine solche id vorhanden ist kann gevoted werden. Ist nicht supersicher weil die Nummer willkürlich geändert werden kann, nachträgliche Prüfung wäre mit Personalnummern Liste möglich. Verbesserungspotential wäre POST übermittlung, Gültigkeitsprüfung durch PN-Index oder Formel.&lt;br /&gt;
* Hat die id &amp;#039;&amp;#039;&amp;#039;schon gevotet&amp;#039;&amp;#039;&amp;#039; wird nur das Ergebnis angezeigt.&lt;br /&gt;
* Im DEKRA Intranet werden Links an die eine id angehängt werden soll mit dem Parameter &amp;#039;&amp;#039;&amp;#039;?id=public&amp;#039;&amp;#039;&amp;#039; Veröffentlicht. public wird dann automatisch durch die Personalnummer des Mitarbeiters ersetzt, bevor weitergeleitet wird. &lt;br /&gt;
&lt;br /&gt;
=== Umfrage erstellen ===&lt;br /&gt;
* Achtung manchmal kollidiert die Abfrage mit alten Cookies der letzten Umfrage. Genau ist das noch nicht geklärt. Hilfe bringt: &lt;br /&gt;
** dafür sorgen, daß die alte Umfrage nicht mit angezeigt wird&lt;br /&gt;
** Logs löschen&lt;br /&gt;
** Wenn nichts hilft die Stats Reseten (kann sein daß dies nicht nötig ist.)&lt;br /&gt;
&lt;br /&gt;
* 1 oder mehrere (Mascha will meist 3) Umfragen-Dummies erstellen (z.B. eine alte klonen - &amp;#039;&amp;#039;&amp;#039;Vorsicht: Einstellungen für Datum, Template und Blocking&amp;#039;&amp;#039;&amp;#039; werden nicht übernommen)&lt;br /&gt;
* Template: &amp;#039;&amp;#039;&amp;#039;DEKRA Umfrage mit Kommentar&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
** Mit dem Template &amp;#039;&amp;#039;&amp;#039;DEKRA Umfrage mit dynamischem Kommentar&amp;#039;&amp;#039;&amp;#039; kann man zusätzlich noch JavaScript Popups öffnen und auf die gewählte Antwort reagieren (siehe JS im Template)&lt;br /&gt;
* Blocking by auf &amp;#039;&amp;#039;&amp;#039;Personal Number&amp;#039;&amp;#039;&amp;#039; - dadurch wird die Abfrage des id Parameters gestartet. Zum Testen auf don&amp;#039;t Block stellen. Achtung IE hat manchmal Caching Probleme.&lt;br /&gt;
* Start und Enddatum setzen&lt;br /&gt;
* Abstimmung in einen &amp;#039;&amp;#039;&amp;#039;Beitrag in Kategorie Dekra Direkt&amp;#039;&amp;#039;&amp;#039; einpflegen (evtl. erst nach dem Testen) -&amp;gt; Startseite sichtbar&lt;br /&gt;
* Am Ende Umfrage auf &amp;#039;&amp;#039;&amp;#039;nur Antwort&amp;#039;&amp;#039;&amp;#039; !&lt;br /&gt;
* Geo-bit erstellt die Fragen, diese werden von Mascha angepasst und von Ihr in einem Beitrag veröffentlicht.&lt;br /&gt;
* Start der Umfrage durch setzen der Kategorie (todo ob das klappt)&lt;br /&gt;
&lt;br /&gt;
=== Test der Umfrage ===&lt;br /&gt;
* Vorige Tests sind sinnvoll. Ein Test von Geo-bit (einfach id anhängen). Ein Test von Dekra&lt;br /&gt;
=== Ende der Umfrage und Auswertung ===&lt;br /&gt;
Für die Auswertung benötigt Mascha eine &amp;#039;&amp;#039;&amp;#039;Excel-Tabelle&amp;#039;&amp;#039;&amp;#039; in der &amp;#039;&amp;#039;&amp;#039;nach Antworten und sortiert&amp;#039;&amp;#039;&amp;#039; ist. Ebenso die dazugehörigen Kommentare. Doppelte IPs rausschmeißen. Wenn Personalnummerliste vorhanden könnte man hier nach Gültigkeit prüfen.&lt;br /&gt;
* Umfrage mit Datum beenden oder auf Maschas Hinweis, &amp;#039;&amp;#039;&amp;#039;Umfrage auf don&amp;#039;t block&amp;#039;&amp;#039;&amp;#039;, damit die Umleitung auf Dekra nicht mehr aktiv ist, außerdem &amp;#039;&amp;#039;&amp;#039;Enddatum setzen&amp;#039;&amp;#039;&amp;#039; und auf &amp;#039;&amp;#039;&amp;#039;Ergebnis anzeigen nach Enddatum&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* SQL Abfrage (siehe Statement), Export als ods oder csv&lt;br /&gt;
* Doppelte überprüfen&lt;br /&gt;
* Umwandeln in Excel&lt;br /&gt;
* Schaubild aus Numbers&lt;br /&gt;
&lt;br /&gt;
=== Löschen unerwünschter Kommentare ===&lt;br /&gt;
&lt;br /&gt;
In&lt;br /&gt;
 Admin -&amp;gt; Yop poll -&amp;gt; All polls -&amp;gt; meineUmfrage -&amp;gt; votes&lt;br /&gt;
&lt;br /&gt;
hier auswählen und löschen&lt;br /&gt;
&lt;br /&gt;
=== Anpassungen  am Plugin Yop poll===&lt;br /&gt;
&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; admin.php&lt;br /&gt;
&lt;br /&gt;
Hier die DB mit prefix versehen. &amp;quot;kas_&amp;quot;&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; yop_poll_model.php&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; db_schema.php&lt;br /&gt;
 yop-poll =&amp;gt; js =&amp;gt; yop_poll_public.js&lt;br /&gt;
==== Kommentare ====&lt;br /&gt;
MUSS überarbeitet werden&lt;br /&gt;
 yop_poll_modell.php&lt;br /&gt;
&lt;br /&gt;
 return_poll_html -&amp;gt; &lt;br /&gt;
dort wird der Template Block  		&lt;br /&gt;
 [ANSWER_RESULT_CONTAINER]&lt;br /&gt;
 [/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
mit pregreplace über eine Callback Funktion ersetzt&lt;br /&gt;
 answer_result_callback(m$)&lt;br /&gt;
darin wiederum wird &lt;br /&gt;
 get_poll_comments($poll_id) &lt;br /&gt;
aufgerufen, dieses gibt ein array zurück das dann in HTML umgesetzt wird. Diese Ausgabe erfolbt über die Abfrage von &lt;br /&gt;
 $this-&amp;gt;is_view_poll_results()&lt;br /&gt;
Das bedeutet die Ausgabe erfolgt wenn im Backend die Bedingung für die Ausgabe der Results gesetzt ist (z.B. Results after End Date) Gute erweiterung wäre ein eigener Block für die Comments&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Im Template muß der Block natürlich auch gesetzt sein.&amp;#039;&amp;#039;&amp;#039; (beim entsprechenden Template)&lt;br /&gt;
&lt;br /&gt;
== Yop Poll Templates ==&lt;br /&gt;
Todo - Anpassen um ungenutzte Features zu nutzen (z.B. after End Date schöne Anzeige der Ergebnisse)&lt;br /&gt;
=== DEKRA Umfrage mit Kommentar ===&lt;br /&gt;
Vor Umfrage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot; style=&amp;quot;display:table-cell;height:130px;vertical-align:middle;&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			%POLL-ANSWER-CHECK-INPUT% &lt;br /&gt;
			%POLL-ANSWER-LABEL%&lt;br /&gt;
			&amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        [/ANSWER_CONTAINER]&lt;br /&gt;
		[OTHER_ANSWER_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			%POLL-OTHER-ANSWER-CHECK-INPUT% &lt;br /&gt;
			%POLL-OTHER-ANSWER-LABEL% &lt;br /&gt;
			&amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
			%POLL-OTHER-ANSWER-TEXT-INPUT% &lt;br /&gt;
            %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        [/OTHER_ANSWER_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-custom-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
		&amp;lt;li&amp;gt;%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;    &lt;br /&gt;
[CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-captcha-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-image-div&amp;quot; id=&amp;quot;yop-poll-captcha-image-div-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %CAPTCHA-IMAGE%&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop-poll-captcha-helpers-div&amp;quot; id=&amp;quot;yop-poll-captcha-helpers-div-%POLL-ID%&amp;quot;&amp;gt;%RELOAD-CAPTCHA-IMAGE% &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop_poll_clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    %CAPTCHA-LABEL%&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-input-div&amp;quot; id=&amp;quot;yop-poll-captcha-input-div-%POLL-ID%&amp;quot;&amp;gt;%CAPTCHA-INPUT%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[/CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-VOTE-BUTTON%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;yop-poll-results-%POLL-ID%&amp;quot;&amp;gt;%POLL-VIEW-RESULT-LINK%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot; style=&amp;quot;display:table-cell;height:130px;vertical-align:middle;&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;VORLÄUFIGES·ERGEBNIS·DER·ABSTIMMUNG&amp;lt;/div&amp;gt;	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-answer-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-feedback-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;span class=&amp;quot;pds-feedback-per-%POLL-ID%&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;div&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
           &amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;yop-poll-back-%POLL-ID%&amp;quot;&amp;gt;%POLL-BACK-TO-VOTE-LINK%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before Start Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is about to &amp;lt;br&amp;gt;&lt;br /&gt;
start at %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
and finish at %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After End Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_end&amp;quot;&amp;gt;Die Abstimmung ist beendet.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul class=&amp;quot;afterVote&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#yop-poll-container-%POLL-ID% {&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_poll_1.png&amp;quot;);&lt;br /&gt;
/*    border: 5px solid #3F8B43;*/&lt;br /&gt;
background-repeat:no-repeat;&lt;br /&gt;
    color: #555555;&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    width: 632px;&lt;br /&gt;
/*    height: 300px;*/&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-name-%POLL-ID% {&lt;br /&gt;
	font-size:14px;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-question-%POLL-ID% {&lt;br /&gt;
    color: #000000;&lt;br /&gt;
    font-size: 14pt;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    height: 80px;&lt;br /&gt;
    line-height: 26px;&lt;br /&gt;
    margin: 0 50px 0 0;&lt;br /&gt;
    padding-left: 215px;&lt;br /&gt;
    padding-top: 40px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    width: 300px;&lt;br /&gt;
margin-bottom: 100px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% { &lt;br /&gt;
 }&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul {&lt;br /&gt;
    list-style: none outside none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    left: 270px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li { &lt;br /&gt;
	font-style:normal;&lt;br /&gt;
	margin-bottom:10px;&lt;br /&gt;
	padding:0px;&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
   width: 190px !important;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li input { &lt;br /&gt;
	margin:0px; &lt;br /&gt;
	float:none;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li label { &lt;br /&gt;
	margin:0px; &lt;br /&gt;
	font-style:normal; &lt;br /&gt;
	font-weight:bold; &lt;br /&gt;
	font-size:16px; &lt;br /&gt;
	float:none;&lt;br /&gt;
        z-index: 10; &lt;br /&gt;
}&lt;br /&gt;
.yop-poll-results-%POLL-ID% {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    margin-left: 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-custom-%POLL-ID% {  }&lt;br /&gt;
#yop-poll-custom-%POLL-ID% ul {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    left: 270px;&lt;br /&gt;
    list-style: none outside none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    float: left;&lt;br /&gt;
    width: 375px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-custom-%POLL-ID% ul li { &lt;br /&gt;
	padding:0px;&lt;br /&gt;
	margin:0px;	&lt;br /&gt;
	font-size:14px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-container-%POLL-ID% input[type=&amp;#039;text&amp;#039;] { &lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    padding: 2%;&lt;br /&gt;
    text-indent: 2%;&lt;br /&gt;
    width: 92%;&lt;br /&gt;
    border: 1px solid #B9B8B8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-%POLL-ID% textarea {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    padding: 2%;&lt;br /&gt;
    text-indent: 2%;&lt;br /&gt;
    width: 92%;&lt;br /&gt;
    font-family: Verdana;&lt;br /&gt;
    color: #666;&lt;br /&gt;
    border: 1px solid #B9B8B8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-input-div-%POLL-ID% {&lt;br /&gt;
margin-top:5px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-captcha-helpers-div-%POLL-ID% {&lt;br /&gt;
width:30px;&lt;br /&gt;
float:left;&lt;br /&gt;
margin-left:5px;&lt;br /&gt;
height:0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-helpers-div-%POLL-ID% img {&lt;br /&gt;
margin-bottom:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-image-div-%POLL-ID% {&lt;br /&gt;
margin-bottom:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop_poll_captcha_image_%POLL-ID% {&lt;br /&gt;
float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop_poll_clear {&lt;br /&gt;
clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#yop-poll-vote-%POLL-ID% {&lt;br /&gt;
float:left; &lt;br /&gt;
/*width:100%; */&lt;br /&gt;
padding-left: 270px;&lt;br /&gt;
margin-top: 20px;&lt;br /&gt;
margin-bottom: 100px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
li.yop-poll-li-result-%POLL-ID% {&lt;br /&gt;
/*    margin-top: 50px;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% { background:#f5f5f5; height:10px;  }&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% div { background:#555; height:10px; }&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-vote-%POLL-ID% button { float:left; }&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    margin-top: -20px;&lt;br /&gt;
    width: auto;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-back-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div { float:left; width:100%; }&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-error-%POLL-ID% {&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
	font-style:italic;&lt;br /&gt;
	color:red;&lt;br /&gt;
    left: 290px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 270px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gb-btn {&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    border: medium none;&lt;br /&gt;
    border-radius: 10px 10px 10px 10px;&lt;br /&gt;
    color: #FFFFFF;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.9em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 40px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    width: 130px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gb_cust {&lt;br /&gt;
    color: #999999;&lt;br /&gt;
    font-size: 1.4em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    padding-left: 0px;&lt;br /&gt;
    padding-top: 40px;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% div{&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    height: 30px;&lt;br /&gt;
    margin-top: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% {&lt;br /&gt;
height: 30px;&lt;br /&gt;
width:99%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pds-answer-text-%POLL-ID% {&lt;br /&gt;
font-size: 0.85em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
color: #999;&lt;br /&gt;
/*    margin-top: -10px;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pds-feedback-per-%POLL-ID% {&lt;br /&gt;
   color: #999999;&lt;br /&gt;
    font-size: 1em;&lt;br /&gt;
    margin-left: 5px;&lt;br /&gt;
    margin-top: -25px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop_poll_vote_button{&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    border: medium none;&lt;br /&gt;
    border-radius: 10px 10px 10px 10px;&lt;br /&gt;
    color: #FFFFFF;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.9em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 40px;&lt;br /&gt;
    width: 250px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gb_end {&lt;br /&gt;
    color: #999999;&lt;br /&gt;
    font-size: 1.4em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    padding-bottom: 100px;&lt;br /&gt;
    padding-left: 250px;&lt;br /&gt;
    padding-top: 130px;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-%POLL-ID% textarea {&lt;br /&gt;
#max-width: 350px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-success-%POLL-ID% {&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
	font-style:italic;&lt;br /&gt;
	color:green;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
JS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function stripBorder_%POLL-ID%(object) {&lt;br /&gt;
	object.each(function() {&lt;br /&gt;
			if( parseInt(jQuery(this).width() ) &amp;gt; 0) {&lt;br /&gt;
				jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css(&amp;quot;border-left-width&amp;quot;)) - parseInt(jQuery(this).css(&amp;quot;border-right-width&amp;quot;)) );&lt;br /&gt;
			}&lt;br /&gt;
			else {&lt;br /&gt;
				jQuery(this).css(&amp;quot;border-left-width&amp;quot;, &amp;#039;0px&amp;#039;);&lt;br /&gt;
				jQuery(this).css(&amp;quot;border-right-width&amp;quot;, &amp;#039;0px&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function stripPadding_%POLL-ID%(object) {&lt;br /&gt;
	object.each(function() { &lt;br /&gt;
			jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css(&amp;quot;padding-left&amp;quot;)) - parseInt(jQuery(this).css(&amp;quot;padding-left&amp;quot;)) );&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function strip_results_%POLL-ID%() {&lt;br /&gt;
        stripPadding_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop_poll_li_result-%POLL-ID%&amp;quot;) );   &lt;br /&gt;
	stripBorder_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-result-bar-%POLL-ID%&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jQuery(document).ready(function(e) {&lt;br /&gt;
                if(typeof window.strip_results_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			strip_results_%POLL-ID%();&lt;br /&gt;
    &lt;br /&gt;
		if(typeof window.tabulate_answers_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			tabulate_answers_%POLL-ID%();&lt;br /&gt;
		&lt;br /&gt;
		if(typeof window.tabulate_results_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			tabulate_results_%POLL-ID%();&lt;br /&gt;
		&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function equalWidth_%POLL-ID%(obj, cols, findWidest ) {&lt;br /&gt;
 findWidest  = typeof findWidest  !== &amp;#039;undefined&amp;#039; ? findWidest  : false;&lt;br /&gt;
    if ( findWidest ) {&lt;br /&gt;
		obj.each(function() {&lt;br /&gt;
				var thisWidth = jQuery(this).width();&lt;br /&gt;
				width = parseInt(thisWidth / cols); &lt;br /&gt;
				jQuery(this).width(width);	&lt;br /&gt;
				jQuery(this).css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;);	&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		var widest = 0;&lt;br /&gt;
		obj.each(function() {&lt;br /&gt;
				var thisWidth = jQuery(this).width();&lt;br /&gt;
				if(thisWidth &amp;gt; widest) {&lt;br /&gt;
					widest = thisWidth; &lt;br /&gt;
				}	&lt;br /&gt;
		});&lt;br /&gt;
		width = parseInt( widest / cols); &lt;br /&gt;
		obj.width(width);	&lt;br /&gt;
		obj.css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;);	&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function tabulate_answers_%POLL-ID%() {&lt;br /&gt;
	equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID%&amp;quot;), %ANSWERS-TABULATED-COLS% );&lt;br /&gt;
        //equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div &amp;quot;), %ANSWERS-TABULATED-COLS%, true );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function tabulate_results_%POLL-ID%() {&lt;br /&gt;
	equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID%&amp;quot;), %RESULTS-TABULATED-COLS% );&lt;br /&gt;
        //equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div &amp;quot;), %RESULTS-TABULATED-COLS%, true );&lt;br /&gt;
}&lt;br /&gt;
			jQuery(document).ready(function(){&lt;br /&gt;
				runOnPollStateChange_%POLL-ID%();&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
			function runOnPollStateChange_%POLL-ID%() {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Dekra Poll Template für ID 2 (altes Template) ===&lt;br /&gt;
Vor Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;STIMMEN SIE JETZT AB !&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    [ANSWER_CONTAINER]&lt;br /&gt;
    &amp;lt;li class=&amp;quot;gb-ac yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
      %POLL-ANSWER-CHECK-INPUT% &lt;br /&gt;
      %POLL-ANSWER-LABEL%&lt;br /&gt;
      &amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %POLL-ANSWER-RESULT-LABEL%&lt;br /&gt;
      &amp;lt;/span&amp;gt;&lt;br /&gt;
      %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    [/ANSWER_CONTAINER]&lt;br /&gt;
    [OTHER_ANSWER_CONTAINER]&lt;br /&gt;
    &amp;lt;li class=&amp;quot;gb-oac yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
      %POLL-OTHER-ANSWER-CHECK-INPUT% &lt;br /&gt;
      %POLL-OTHER-ANSWER-LABEL% &lt;br /&gt;
      &amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %POLL-ANSWER-RESULT-LABEL%&lt;br /&gt;
      &amp;lt;/span&amp;gt;&lt;br /&gt;
      %POLL-OTHER-ANSWER-TEXT-INPUT% &lt;br /&gt;
      %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    [/OTHER_ANSWER_CONTAINER]&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
		&amp;lt;li&amp;gt;%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
[CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-captcha-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-image-div&amp;quot; id=&amp;quot;yop-poll-captcha-image-div-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %CAPTCHA-IMAGE%&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop-poll-captcha-helpers-div&amp;quot; id=&amp;quot;yop-poll-captcha-helpers-div-%POLL-ID%&amp;quot;&amp;gt;%RELOAD-CAPTCHA-IMAGE% &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop_poll_clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    %CAPTCHA-LABEL%&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-input-div&amp;quot; id=&amp;quot;yop-poll-captcha-input-div-%POLL-ID%&amp;quot;&amp;gt;%CAPTCHA-INPUT%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[/CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;poll-vote-button&amp;quot;&amp;gt;%POLL-VOTE-BUTTON%&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gb-storage&amp;quot; gb-poll-id=&amp;quot;%POLL-ID%&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Load check from Dean Edwards/Matthias Miller/John Resig&lt;br /&gt;
&lt;br /&gt;
function init() {&lt;br /&gt;
  if (arguments.callee.done) return;&lt;br /&gt;
  arguments.callee.done = true;&lt;br /&gt;
  if (_timer) clearInterval(_timer);&lt;br /&gt;
&lt;br /&gt;
  jQuery(document).ready(function() {&lt;br /&gt;
    // remove vote button&lt;br /&gt;
    jQuery(&amp;#039;.poll-vote-button&amp;#039;).html(&amp;#039;&amp;#039;);&lt;br /&gt;
    // add Buttons&lt;br /&gt;
    jQuery(&amp;#039;.gb-ac&amp;#039;).each(function(index,domEle){&lt;br /&gt;
      var answer_id;&lt;br /&gt;
      var label;&lt;br /&gt;
      var content;&lt;br /&gt;
      answer_id = jQuery(this).find(&amp;#039;input:first&amp;#039;).val();&lt;br /&gt;
      label = jQuery(this).find(&amp;#039;label:first&amp;#039;).html();&lt;br /&gt;
      content = &amp;#039;&amp;lt;button class=&amp;quot;gb-btn&amp;quot; value=&amp;quot;&amp;#039; + answer_id + &amp;#039;&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;&amp;#039; + label + &amp;#039;&amp;lt;/button&amp;gt;&amp;#039;;&lt;br /&gt;
      //jQuery(this).append(content);&lt;br /&gt;
      jQuery(this).html(content);&lt;br /&gt;
      //add click handler&lt;br /&gt;
      jQuery(this).find(&amp;#039;button:first&amp;#039;).click(function(){&lt;br /&gt;
        answer_id = jQuery(this).val();&lt;br /&gt;
        poll_id = jQuery(&amp;#039;.gb-storage:first&amp;#039;).attr(&amp;#039;gb-poll-id&amp;#039;);&lt;br /&gt;
        hidden_field = &amp;#039;&amp;lt;input id=&amp;quot;yop-poll-answer-&amp;#039; +answer_id + &amp;#039;&amp;quot; type=&amp;quot;hidden&amp;quot; name=&amp;quot;yop_poll_answer&amp;quot; value=&amp;quot;&amp;#039; + answer_id + &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
        jQuery(this).after(hidden_field);&lt;br /&gt;
        yop_poll_do_vote(poll_id);&lt;br /&gt;
        return false;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* for Mozilla/Opera9 */&lt;br /&gt;
if (document.addEventListener) {&lt;br /&gt;
  document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, init, false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* for Internet Explorer */&lt;br /&gt;
/*@cc_on @*/&lt;br /&gt;
/*@if (@_win32)&lt;br /&gt;
  document.write(&amp;quot;&amp;lt;script id=__ie_onload defer src=javascript:void(0)&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;);&lt;br /&gt;
  var script = document.getElementById(&amp;quot;__ie_onload&amp;quot;);&lt;br /&gt;
  script.onreadystatechange = function() {&lt;br /&gt;
    if (this.readyState == &amp;quot;complete&amp;quot;) {&lt;br /&gt;
      init(); // call the onload handler&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
/*@end @*/&lt;br /&gt;
&lt;br /&gt;
/* for Safari */&lt;br /&gt;
if (/WebKit/i.test(navigator.userAgent)) { // sniff&lt;br /&gt;
  var _timer = setInterval(function() {&lt;br /&gt;
    if (/loaded|complete/.test(document.readyState)) {&lt;br /&gt;
      init(); // call the onload handler&lt;br /&gt;
    }&lt;br /&gt;
  }, 10);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* for other browsers */&lt;br /&gt;
window.onload = init;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;VORLÄUFIGES ERGEBNIS DER ABSTIMMUNG&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;pds-answer-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;pds-feedback-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;div&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
           &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;pds-feedback-per-%POLL-ID%&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;!--&amp;lt;div id=&amp;quot;yop-poll-back-%POLL-ID%&amp;quot;&amp;gt;%POLL-BACK-TO-VOTE-LINK%&amp;lt;/div&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before Start Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is about to &amp;lt;br&amp;gt;&lt;br /&gt;
start at %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
and finish at %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After End Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is closed!&lt;br /&gt;
Poll activity: &amp;lt;br&amp;gt;&lt;br /&gt;
start_date %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
end_date %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Poll Results:&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-1&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-answer-text&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-feedback-result&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;span class=&amp;quot;pds-feedback-per&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;span class=&amp;quot;pds-clear&amp;quot; style=&amp;quot;display: block;clear: both;height:1px;line-height:1px;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
	%POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
		&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
%POLL-VOTE-BUTTON%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Log ==&lt;br /&gt;
8.8.13&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hallo Mascha und Clemens,&lt;br /&gt;
&lt;br /&gt;
folgende Funktionalität ist jetzt implementiert:&lt;br /&gt;
&lt;br /&gt;
- Zu einem Hauptbeitrag (Sozusagen 1.Ebene - entspricht dem Post in&lt;br /&gt;
Wordpress) kann ein normaler Benutzer eine Frage stellen.&lt;br /&gt;
- Zu den Fragen (das wäre dann die 2. Ebene) kann jeder Benutzer&lt;br /&gt;
beliebig viele Beiträge machen&lt;br /&gt;
- Benutzer ab Level 7 (Redakteure und Admins) können beliebig viele&lt;br /&gt;
Fragen stellen.&lt;br /&gt;
&lt;br /&gt;
- Labels sind jetzt: &amp;quot;Hinterlasse einen Beitrag&amp;quot; und &amp;quot;Beitrag abschicken&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Grüße,&lt;br /&gt;
&lt;br /&gt;
Stephan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11&lt;br /&gt;
&lt;br /&gt;
10/2014&lt;br /&gt;
- Kommentare in Spalten sortieren, je nach Antwort&lt;br /&gt;
- Overflow für Kommentarausgabe, damit die Felder nicht zu groß werden&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Abstimmung_wordpress&amp;diff=21230</id>
		<title>Abstimmung wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Abstimmung_wordpress&amp;diff=21230"/>
		<updated>2015-10-14T07:13:57Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Umfrage erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;siehe auch [[DEKRA Direkt Blog]]&lt;br /&gt;
Der Blog &amp;#039;&amp;#039;&amp;#039;DEKRA Direkt&amp;#039;&amp;#039;&amp;#039; wird als interner Konzernblog verwendet und soll als Kontaktmittel der Mitarbeiter zur Vorstandsebene dienen. Dazu gibt es unter anderem die DEKRA Direkt Mitarbeiter Umfrage.&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
Besser zum Testen wäre es wenn die Umfrage zunächst in eine Kategorie Test geht die auf der Startseite nicht dargestellt wird. &lt;br /&gt;
&lt;br /&gt;
Wordpress Extension Yop Poll - verwendet bei Mascha im Blog intern:&lt;br /&gt;
&lt;br /&gt;
== yop poll Anpassungen ==&lt;br /&gt;
=== yop poll Tabellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
------------                -----------------                 --------------&lt;br /&gt;
yop_polls                   yop_poll_answers                  yop_poll_logs&lt;br /&gt;
------------                -----------------                 --------------&lt;br /&gt;
id          --------------| id               --------------|  id&lt;br /&gt;
name                      |-poll_id                        |  pn&lt;br /&gt;
question                    answer                         |  poll_id&lt;br /&gt;
total_votes                 votes                          |  vote_id&lt;br /&gt;
total_answers               ...                            |- answer_id&lt;br /&gt;
...                                                           --------------&lt;br /&gt;
------------                -----------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------      ----------------------------&lt;br /&gt;
yop_poll_custom_fields      yop_poll_votes_custom_fields&lt;br /&gt;
----------------------      ----------------------------&lt;br /&gt;
id                          id&lt;br /&gt;
poll_id                     poll_id&lt;br /&gt;
custom_field                vote_id&lt;br /&gt;
...                         custom_field_id&lt;br /&gt;
----------------------      user_id&lt;br /&gt;
                            custom_field_value&lt;br /&gt;
                            ----------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da bei einem custom text field bei der fragesstellung nur einzeiliger text möglich war, musst die datei &lt;br /&gt;
 /wp-content/plugins/yop-poll/inc/yop_poll_model.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der datenbank die Tabelle:&lt;br /&gt;
&lt;br /&gt;
 kas_wp_yop_poll_votes_custom_fields&lt;br /&gt;
&lt;br /&gt;
Feld: custom_field_value&lt;br /&gt;
&lt;br /&gt;
von varchar (255) auf Text geändert.&lt;br /&gt;
&lt;br /&gt;
== SQL-Abfragen für Antworten mit Kommentar ==&lt;br /&gt;
=== SQL nur Ergebnisse ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT `id` , `poll_id` , `answer_id` , `ip` , `http_referer` , `vote_date` , `pn`&lt;br /&gt;
FROM `kas_wp_yop_poll_logs`&lt;br /&gt;
WHERE `poll_id` =38&lt;br /&gt;
ORDER BY `answer_id` ASC&lt;br /&gt;
LIMIT 0 , 500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== SQL Abfrage mit Kommentaren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alte Abfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM `kas_wp_yop_poll_logs`&lt;br /&gt;
LEFT OUTER JOIN `kas_wp_yop_poll_votes_custom_fields` ON `kas_wp_yop_poll_logs`.`vote_id` = `kas_wp_yop_poll_votes_custom_fields`.`vote_id`&lt;br /&gt;
WHERE `kas_wp_yop_poll_logs`.`poll_id` =13&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weitere Abfragen ===&lt;br /&gt;
Welche Custom Fields gehören zu welchen Umfrage (Pivot Version)&lt;br /&gt;
&lt;br /&gt;
Dynamische Version (funktioniert noch nicht aber die Richtung dürfte stimmen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @sql = NULL;&lt;br /&gt;
SELECT&lt;br /&gt;
  GROUP_CONCAT(DISTINCT&lt;br /&gt;
    CONCAT(&lt;br /&gt;
      &amp;#039;max(case when custom_field = &amp;#039;&amp;#039;&amp;#039;,&lt;br /&gt;
      custom_field,&lt;br /&gt;
      &amp;#039;&amp;#039;&amp;#039; then custom_field end) AS &amp;#039;,&lt;br /&gt;
      custom_field&lt;br /&gt;
    )&lt;br /&gt;
  ) INTO @sql&lt;br /&gt;
FROM kas_wp_yop_poll_custom_fields;&lt;br /&gt;
&lt;br /&gt;
SET @sql = CONCAT(&amp;#039;SELECT poll_id, &amp;#039;, @sql, &amp;#039; &lt;br /&gt;
                  FROM kas_wp_yop_poll_custom_fields &lt;br /&gt;
                  GROUP BY poll_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
PREPARE stmt FROM @sql;&lt;br /&gt;
EXECUTE stmt;&lt;br /&gt;
DEALLOCATE PREPARE stmt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Neue Umfrage für DEKRA Connect durchführen ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Läuft 2 Wochen ab ca. Mitte des Monats. Danach Auswertung und Grafikerstellung.&lt;br /&gt;
&lt;br /&gt;
== Technischer Ablauf ==&lt;br /&gt;
Stand März 2015&lt;br /&gt;
&lt;br /&gt;
* Das Umfrage Plugin im WP ist auf &amp;#039;&amp;#039;&amp;#039;block by Personal Number&amp;#039;&amp;#039;&amp;#039; gestellt.&lt;br /&gt;
* Ein User kann nur Voten wenn eine id=12345 (Personalnummer) angehängt ist. Ansonsten wird zunächst auf das DEKRA Intranet weiter geleitet (über alert). &lt;br /&gt;
* Dort wird die Personalnummer als id=12345 an den Link angehängt und auf intern-blog.dekra.de/category/dekra-direkt/?id=12345 geleitet Nur wenn eine solche id vorhanden ist kann gevoted werden. Ist nicht supersicher weil die Nummer willkürlich geändert werden kann, nachträgliche Prüfung wäre mit Personalnummern Liste möglich. Verbesserungspotential wäre POST übermittlung, Gültigkeitsprüfung durch PN-Index oder Formel.&lt;br /&gt;
* Hat die id &amp;#039;&amp;#039;&amp;#039;schon gevotet&amp;#039;&amp;#039;&amp;#039; wird nur das Ergebnis angezeigt.&lt;br /&gt;
* Im DEKRA Intranet werden Links an die eine id angehängt werden soll mit dem Parameter &amp;#039;&amp;#039;&amp;#039;?id=public&amp;#039;&amp;#039;&amp;#039; Veröffentlicht. public wird dann automatisch durch die Personalnummer des Mitarbeiters ersetzt, bevor weitergeleitet wird. &lt;br /&gt;
&lt;br /&gt;
=== Umfrage erstellen ===&lt;br /&gt;
* Achtung manchmal kollidiert die Abfrage mit alten Cookies der letzten Umfrage. Genau ist das noch nicht geklärt. Hilfe bringt: &lt;br /&gt;
** dafür sorgen, daß die alte Umfrage nicht mit angezeigt wird&lt;br /&gt;
** Logs löschen&lt;br /&gt;
** Wenn nichts hilft die Stats Reseten (kann sein daß dies nicht nötig ist.)&lt;br /&gt;
&lt;br /&gt;
* 1 oder mehrere (Mascha will meist 3) Umfragen-Dummies erstellen (z.B. eine alte klonen - &amp;#039;&amp;#039;&amp;#039;Vorsicht: Einstellungen für Datum, Template und Blocking&amp;#039;&amp;#039;&amp;#039; werden nicht übernommen)&lt;br /&gt;
* Template: &amp;#039;&amp;#039;&amp;#039;DEKRA Umfrage mit Kommentar&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;DEKRA Umfrage mit dynamischem Kommentar&amp;#039;&amp;#039;&amp;#039; (hier werden die Kommentare nach Antwort sortiert)&lt;br /&gt;
* Blocking by auf &amp;#039;&amp;#039;&amp;#039;Personal Number&amp;#039;&amp;#039;&amp;#039; - dadurch wird die Abfrage des id Parameters gestartet. Zum Testen auf don&amp;#039;t Block stellen. Achtung IE hat manchmal Caching Probleme.&lt;br /&gt;
* Start und Enddatum setzen&lt;br /&gt;
* Abstimmung in einen &amp;#039;&amp;#039;&amp;#039;Beitrag in Kategorie Dekra Direkt&amp;#039;&amp;#039;&amp;#039; einpflegen (evtl. erst nach dem Testen) -&amp;gt; Startseite sichtbar&lt;br /&gt;
* Am Ende Umfrage auf &amp;#039;&amp;#039;&amp;#039;nur Antwort&amp;#039;&amp;#039;&amp;#039; !&lt;br /&gt;
* Geo-bit erstellt die Fragen, diese werden von Mascha angepasst und von Ihr in einem Beitrag veröffentlicht.&lt;br /&gt;
* Start der Umfrage durch setzen der Kategorie (todo ob das klappt)&lt;br /&gt;
&lt;br /&gt;
=== Test der Umfrage ===&lt;br /&gt;
* Vorige Tests sind sinnvoll. Ein Test von Geo-bit (einfach id anhängen). Ein Test von Dekra&lt;br /&gt;
=== Ende der Umfrage und Auswertung ===&lt;br /&gt;
Für die Auswertung benötigt Mascha eine &amp;#039;&amp;#039;&amp;#039;Excel-Tabelle&amp;#039;&amp;#039;&amp;#039; in der &amp;#039;&amp;#039;&amp;#039;nach Antworten und sortiert&amp;#039;&amp;#039;&amp;#039; ist. Ebenso die dazugehörigen Kommentare. Doppelte IPs rausschmeißen. Wenn Personalnummerliste vorhanden könnte man hier nach Gültigkeit prüfen.&lt;br /&gt;
* Umfrage mit Datum beenden oder auf Maschas Hinweis, &amp;#039;&amp;#039;&amp;#039;Umfrage auf don&amp;#039;t block&amp;#039;&amp;#039;&amp;#039;, damit die Umleitung auf Dekra nicht mehr aktiv ist, außerdem &amp;#039;&amp;#039;&amp;#039;Enddatum setzen&amp;#039;&amp;#039;&amp;#039; und auf &amp;#039;&amp;#039;&amp;#039;Ergebnis anzeigen nach Enddatum&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* SQL Abfrage (siehe Statement), Export als ods oder csv&lt;br /&gt;
* Doppelte überprüfen&lt;br /&gt;
* Umwandeln in Excel&lt;br /&gt;
* Schaubild aus Numbers&lt;br /&gt;
&lt;br /&gt;
=== Löschen unerwünschter Kommentare ===&lt;br /&gt;
&lt;br /&gt;
In&lt;br /&gt;
 Admin -&amp;gt; Yop poll -&amp;gt; All polls -&amp;gt; meineUmfrage -&amp;gt; votes&lt;br /&gt;
&lt;br /&gt;
hier auswählen und löschen&lt;br /&gt;
&lt;br /&gt;
=== Anpassungen  am Plugin Yop poll===&lt;br /&gt;
&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; admin.php&lt;br /&gt;
&lt;br /&gt;
Hier die DB mit prefix versehen. &amp;quot;kas_&amp;quot;&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; yop_poll_model.php&lt;br /&gt;
 yop-poll =&amp;gt; inc =&amp;gt; db_schema.php&lt;br /&gt;
 yop-poll =&amp;gt; js =&amp;gt; yop_poll_public.js&lt;br /&gt;
==== Kommentare ====&lt;br /&gt;
MUSS überarbeitet werden&lt;br /&gt;
 yop_poll_modell.php&lt;br /&gt;
&lt;br /&gt;
 return_poll_html -&amp;gt; &lt;br /&gt;
dort wird der Template Block  		&lt;br /&gt;
 [ANSWER_RESULT_CONTAINER]&lt;br /&gt;
 [/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
mit pregreplace über eine Callback Funktion ersetzt&lt;br /&gt;
 answer_result_callback(m$)&lt;br /&gt;
darin wiederum wird &lt;br /&gt;
 get_poll_comments($poll_id) &lt;br /&gt;
aufgerufen, dieses gibt ein array zurück das dann in HTML umgesetzt wird. Diese Ausgabe erfolbt über die Abfrage von &lt;br /&gt;
 $this-&amp;gt;is_view_poll_results()&lt;br /&gt;
Das bedeutet die Ausgabe erfolgt wenn im Backend die Bedingung für die Ausgabe der Results gesetzt ist (z.B. Results after End Date) Gute erweiterung wäre ein eigener Block für die Comments&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Im Template muß der Block natürlich auch gesetzt sein.&amp;#039;&amp;#039;&amp;#039; (beim entsprechenden Template)&lt;br /&gt;
&lt;br /&gt;
== Yop Poll Templates ==&lt;br /&gt;
Todo - Anpassen um ungenutzte Features zu nutzen (z.B. after End Date schöne Anzeige der Ergebnisse)&lt;br /&gt;
=== DEKRA Umfrage mit Kommentar ===&lt;br /&gt;
Vor Umfrage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot; style=&amp;quot;display:table-cell;height:130px;vertical-align:middle;&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			%POLL-ANSWER-CHECK-INPUT% &lt;br /&gt;
			%POLL-ANSWER-LABEL%&lt;br /&gt;
			&amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        [/ANSWER_CONTAINER]&lt;br /&gt;
		[OTHER_ANSWER_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			%POLL-OTHER-ANSWER-CHECK-INPUT% &lt;br /&gt;
			%POLL-OTHER-ANSWER-LABEL% &lt;br /&gt;
			&amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
			%POLL-OTHER-ANSWER-TEXT-INPUT% &lt;br /&gt;
            %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        [/OTHER_ANSWER_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-custom-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
		&amp;lt;li&amp;gt;%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;    &lt;br /&gt;
[CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-captcha-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-image-div&amp;quot; id=&amp;quot;yop-poll-captcha-image-div-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %CAPTCHA-IMAGE%&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop-poll-captcha-helpers-div&amp;quot; id=&amp;quot;yop-poll-captcha-helpers-div-%POLL-ID%&amp;quot;&amp;gt;%RELOAD-CAPTCHA-IMAGE% &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop_poll_clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    %CAPTCHA-LABEL%&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-input-div&amp;quot; id=&amp;quot;yop-poll-captcha-input-div-%POLL-ID%&amp;quot;&amp;gt;%CAPTCHA-INPUT%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[/CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-VOTE-BUTTON%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;yop-poll-results-%POLL-ID%&amp;quot;&amp;gt;%POLL-VIEW-RESULT-LINK%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot; style=&amp;quot;display:table-cell;height:130px;vertical-align:middle;&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;VORLÄUFIGES·ERGEBNIS·DER·ABSTIMMUNG&amp;lt;/div&amp;gt;	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-answer-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-feedback-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;span class=&amp;quot;pds-feedback-per-%POLL-ID%&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;div&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
           &amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;yop-poll-back-%POLL-ID%&amp;quot;&amp;gt;%POLL-BACK-TO-VOTE-LINK%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before Start Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is about to &amp;lt;br&amp;gt;&lt;br /&gt;
start at %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
and finish at %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After End Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_end&amp;quot;&amp;gt;Die Abstimmung ist beendet.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul class=&amp;quot;afterVote&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#yop-poll-container-%POLL-ID% {&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_poll_1.png&amp;quot;);&lt;br /&gt;
/*    border: 5px solid #3F8B43;*/&lt;br /&gt;
background-repeat:no-repeat;&lt;br /&gt;
    color: #555555;&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    width: 632px;&lt;br /&gt;
/*    height: 300px;*/&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-name-%POLL-ID% {&lt;br /&gt;
	font-size:14px;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-question-%POLL-ID% {&lt;br /&gt;
    color: #000000;&lt;br /&gt;
    font-size: 14pt;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    height: 80px;&lt;br /&gt;
    line-height: 26px;&lt;br /&gt;
    margin: 0 50px 0 0;&lt;br /&gt;
    padding-left: 215px;&lt;br /&gt;
    padding-top: 40px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    width: 300px;&lt;br /&gt;
margin-bottom: 100px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% { &lt;br /&gt;
 }&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul {&lt;br /&gt;
    list-style: none outside none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    left: 270px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li { &lt;br /&gt;
	font-style:normal;&lt;br /&gt;
	margin-bottom:10px;&lt;br /&gt;
	padding:0px;&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
   width: 190px !important;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li input { &lt;br /&gt;
	margin:0px; &lt;br /&gt;
	float:none;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-answers-%POLL-ID% ul li label { &lt;br /&gt;
	margin:0px; &lt;br /&gt;
	font-style:normal; &lt;br /&gt;
	font-weight:bold; &lt;br /&gt;
	font-size:16px; &lt;br /&gt;
	float:none;&lt;br /&gt;
        z-index: 10; &lt;br /&gt;
}&lt;br /&gt;
.yop-poll-results-%POLL-ID% {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    margin-left: 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-custom-%POLL-ID% {  }&lt;br /&gt;
#yop-poll-custom-%POLL-ID% ul {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    left: 270px;&lt;br /&gt;
    list-style: none outside none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    float: left;&lt;br /&gt;
    width: 375px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-custom-%POLL-ID% ul li { &lt;br /&gt;
	padding:0px;&lt;br /&gt;
	margin:0px;	&lt;br /&gt;
	font-size:14px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-container-%POLL-ID% input[type=&amp;#039;text&amp;#039;] { &lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    padding: 2%;&lt;br /&gt;
    text-indent: 2%;&lt;br /&gt;
    width: 92%;&lt;br /&gt;
    border: 1px solid #B9B8B8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-%POLL-ID% textarea {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    padding: 2%;&lt;br /&gt;
    text-indent: 2%;&lt;br /&gt;
    width: 92%;&lt;br /&gt;
    font-family: Verdana;&lt;br /&gt;
    color: #666;&lt;br /&gt;
    border: 1px solid #B9B8B8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-input-div-%POLL-ID% {&lt;br /&gt;
margin-top:5px;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-captcha-helpers-div-%POLL-ID% {&lt;br /&gt;
width:30px;&lt;br /&gt;
float:left;&lt;br /&gt;
margin-left:5px;&lt;br /&gt;
height:0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-helpers-div-%POLL-ID% img {&lt;br /&gt;
margin-bottom:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-captcha-image-div-%POLL-ID% {&lt;br /&gt;
margin-bottom:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop_poll_captcha_image_%POLL-ID% {&lt;br /&gt;
float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop_poll_clear {&lt;br /&gt;
clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#yop-poll-vote-%POLL-ID% {&lt;br /&gt;
float:left; &lt;br /&gt;
/*width:100%; */&lt;br /&gt;
padding-left: 270px;&lt;br /&gt;
margin-top: 20px;&lt;br /&gt;
margin-bottom: 100px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
li.yop-poll-li-result-%POLL-ID% {&lt;br /&gt;
/*    margin-top: 50px;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% { background:#f5f5f5; height:10px;  }&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% div { background:#555; height:10px; }&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-vote-%POLL-ID% button { float:left; }&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    margin-top: -20px;&lt;br /&gt;
    width: auto;&lt;br /&gt;
}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div#yop-poll-back-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}&lt;br /&gt;
#yop-poll-vote-%POLL-ID% div { float:left; width:100%; }&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-error-%POLL-ID% {&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
	font-style:italic;&lt;br /&gt;
	color:red;&lt;br /&gt;
    left: 290px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    top: 270px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gb-btn {&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    border: medium none;&lt;br /&gt;
    border-radius: 10px 10px 10px 10px;&lt;br /&gt;
    color: #FFFFFF;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.9em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 40px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    width: 130px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gb_cust {&lt;br /&gt;
    color: #999999;&lt;br /&gt;
    font-size: 1.4em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    padding-left: 0px;&lt;br /&gt;
    padding-top: 40px;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% div{&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    height: 30px;&lt;br /&gt;
    margin-top: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.yop-poll-results-bar-%POLL-ID% {&lt;br /&gt;
height: 30px;&lt;br /&gt;
width:99%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pds-answer-text-%POLL-ID% {&lt;br /&gt;
font-size: 0.85em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
color: #999;&lt;br /&gt;
/*    margin-top: -10px;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pds-feedback-per-%POLL-ID% {&lt;br /&gt;
   color: #999999;&lt;br /&gt;
    font-size: 1em;&lt;br /&gt;
    margin-left: 5px;&lt;br /&gt;
    margin-top: -25px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.yop_poll_vote_button{&lt;br /&gt;
    background-image: url(&amp;quot;http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png&amp;quot;);&lt;br /&gt;
    border: medium none;&lt;br /&gt;
    border-radius: 10px 10px 10px 10px;&lt;br /&gt;
    color: #FFFFFF;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.9em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 40px;&lt;br /&gt;
    width: 250px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gb_end {&lt;br /&gt;
    color: #999999;&lt;br /&gt;
    font-size: 1.4em;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    padding-bottom: 100px;&lt;br /&gt;
    padding-left: 250px;&lt;br /&gt;
    padding-top: 130px;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-%POLL-ID% textarea {&lt;br /&gt;
#max-width: 350px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#yop-poll-container-success-%POLL-ID% {&lt;br /&gt;
	font-size:12px;&lt;br /&gt;
	font-style:italic;&lt;br /&gt;
	color:green;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
JS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function stripBorder_%POLL-ID%(object) {&lt;br /&gt;
	object.each(function() {&lt;br /&gt;
			if( parseInt(jQuery(this).width() ) &amp;gt; 0) {&lt;br /&gt;
				jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css(&amp;quot;border-left-width&amp;quot;)) - parseInt(jQuery(this).css(&amp;quot;border-right-width&amp;quot;)) );&lt;br /&gt;
			}&lt;br /&gt;
			else {&lt;br /&gt;
				jQuery(this).css(&amp;quot;border-left-width&amp;quot;, &amp;#039;0px&amp;#039;);&lt;br /&gt;
				jQuery(this).css(&amp;quot;border-right-width&amp;quot;, &amp;#039;0px&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function stripPadding_%POLL-ID%(object) {&lt;br /&gt;
	object.each(function() { &lt;br /&gt;
			jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css(&amp;quot;padding-left&amp;quot;)) - parseInt(jQuery(this).css(&amp;quot;padding-left&amp;quot;)) );&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function strip_results_%POLL-ID%() {&lt;br /&gt;
        stripPadding_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop_poll_li_result-%POLL-ID%&amp;quot;) );   &lt;br /&gt;
	stripBorder_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-result-bar-%POLL-ID%&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jQuery(document).ready(function(e) {&lt;br /&gt;
                if(typeof window.strip_results_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			strip_results_%POLL-ID%();&lt;br /&gt;
    &lt;br /&gt;
		if(typeof window.tabulate_answers_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			tabulate_answers_%POLL-ID%();&lt;br /&gt;
		&lt;br /&gt;
		if(typeof window.tabulate_results_%POLL-ID% == &amp;#039;function&amp;#039;) &lt;br /&gt;
			tabulate_results_%POLL-ID%();&lt;br /&gt;
		&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function equalWidth_%POLL-ID%(obj, cols, findWidest ) {&lt;br /&gt;
 findWidest  = typeof findWidest  !== &amp;#039;undefined&amp;#039; ? findWidest  : false;&lt;br /&gt;
    if ( findWidest ) {&lt;br /&gt;
		obj.each(function() {&lt;br /&gt;
				var thisWidth = jQuery(this).width();&lt;br /&gt;
				width = parseInt(thisWidth / cols); &lt;br /&gt;
				jQuery(this).width(width);	&lt;br /&gt;
				jQuery(this).css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;);	&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		var widest = 0;&lt;br /&gt;
		obj.each(function() {&lt;br /&gt;
				var thisWidth = jQuery(this).width();&lt;br /&gt;
				if(thisWidth &amp;gt; widest) {&lt;br /&gt;
					widest = thisWidth; &lt;br /&gt;
				}	&lt;br /&gt;
		});&lt;br /&gt;
		width = parseInt( widest / cols); &lt;br /&gt;
		obj.width(width);	&lt;br /&gt;
		obj.css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;);	&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function tabulate_answers_%POLL-ID%() {&lt;br /&gt;
	equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID%&amp;quot;), %ANSWERS-TABULATED-COLS% );&lt;br /&gt;
        //equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div &amp;quot;), %ANSWERS-TABULATED-COLS%, true );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function tabulate_results_%POLL-ID%() {&lt;br /&gt;
	equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID%&amp;quot;), %RESULTS-TABULATED-COLS% );&lt;br /&gt;
        //equalWidth_%POLL-ID%( jQuery(&amp;quot;#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div &amp;quot;), %RESULTS-TABULATED-COLS%, true );&lt;br /&gt;
}&lt;br /&gt;
			jQuery(document).ready(function(){&lt;br /&gt;
				runOnPollStateChange_%POLL-ID%();&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
			function runOnPollStateChange_%POLL-ID%() {};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Dekra Poll Template für ID 2 (altes Template) ===&lt;br /&gt;
Vor Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;STIMMEN SIE JETZT AB !&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    [ANSWER_CONTAINER]&lt;br /&gt;
    &amp;lt;li class=&amp;quot;gb-ac yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
      %POLL-ANSWER-CHECK-INPUT% &lt;br /&gt;
      %POLL-ANSWER-LABEL%&lt;br /&gt;
      &amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %POLL-ANSWER-RESULT-LABEL%&lt;br /&gt;
      &amp;lt;/span&amp;gt;&lt;br /&gt;
      %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    [/ANSWER_CONTAINER]&lt;br /&gt;
    [OTHER_ANSWER_CONTAINER]&lt;br /&gt;
    &amp;lt;li class=&amp;quot;gb-oac yop-poll-li-answer-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
      %POLL-OTHER-ANSWER-CHECK-INPUT% &lt;br /&gt;
      %POLL-OTHER-ANSWER-LABEL% &lt;br /&gt;
      &amp;lt;span class=&amp;quot;yop-poll-results-text-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %POLL-ANSWER-RESULT-LABEL%&lt;br /&gt;
      &amp;lt;/span&amp;gt;&lt;br /&gt;
      %POLL-OTHER-ANSWER-TEXT-INPUT% &lt;br /&gt;
      %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    [/OTHER_ANSWER_CONTAINER]&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
		&amp;lt;li&amp;gt;%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/CUSTOM_FIELD_CONTAINER]&lt;br /&gt;
[CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-captcha-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-image-div&amp;quot; id=&amp;quot;yop-poll-captcha-image-div-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
        %CAPTCHA-IMAGE%&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop-poll-captcha-helpers-div&amp;quot; id=&amp;quot;yop-poll-captcha-helpers-div-%POLL-ID%&amp;quot;&amp;gt;%RELOAD-CAPTCHA-IMAGE% &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;yop_poll_clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    %CAPTCHA-LABEL%&lt;br /&gt;
    &amp;lt;div class=&amp;quot;yop-poll-captcha-input-div&amp;quot; id=&amp;quot;yop-poll-captcha-input-div-%POLL-ID%&amp;quot;&amp;gt;%CAPTCHA-INPUT%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[/CAPTCHA_CONTAINER]&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;poll-vote-button&amp;quot;&amp;gt;%POLL-VOTE-BUTTON%&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gb-storage&amp;quot; gb-poll-id=&amp;quot;%POLL-ID%&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Load check from Dean Edwards/Matthias Miller/John Resig&lt;br /&gt;
&lt;br /&gt;
function init() {&lt;br /&gt;
  if (arguments.callee.done) return;&lt;br /&gt;
  arguments.callee.done = true;&lt;br /&gt;
  if (_timer) clearInterval(_timer);&lt;br /&gt;
&lt;br /&gt;
  jQuery(document).ready(function() {&lt;br /&gt;
    // remove vote button&lt;br /&gt;
    jQuery(&amp;#039;.poll-vote-button&amp;#039;).html(&amp;#039;&amp;#039;);&lt;br /&gt;
    // add Buttons&lt;br /&gt;
    jQuery(&amp;#039;.gb-ac&amp;#039;).each(function(index,domEle){&lt;br /&gt;
      var answer_id;&lt;br /&gt;
      var label;&lt;br /&gt;
      var content;&lt;br /&gt;
      answer_id = jQuery(this).find(&amp;#039;input:first&amp;#039;).val();&lt;br /&gt;
      label = jQuery(this).find(&amp;#039;label:first&amp;#039;).html();&lt;br /&gt;
      content = &amp;#039;&amp;lt;button class=&amp;quot;gb-btn&amp;quot; value=&amp;quot;&amp;#039; + answer_id + &amp;#039;&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;&amp;#039; + label + &amp;#039;&amp;lt;/button&amp;gt;&amp;#039;;&lt;br /&gt;
      //jQuery(this).append(content);&lt;br /&gt;
      jQuery(this).html(content);&lt;br /&gt;
      //add click handler&lt;br /&gt;
      jQuery(this).find(&amp;#039;button:first&amp;#039;).click(function(){&lt;br /&gt;
        answer_id = jQuery(this).val();&lt;br /&gt;
        poll_id = jQuery(&amp;#039;.gb-storage:first&amp;#039;).attr(&amp;#039;gb-poll-id&amp;#039;);&lt;br /&gt;
        hidden_field = &amp;#039;&amp;lt;input id=&amp;quot;yop-poll-answer-&amp;#039; +answer_id + &amp;#039;&amp;quot; type=&amp;quot;hidden&amp;quot; name=&amp;quot;yop_poll_answer&amp;quot; value=&amp;quot;&amp;#039; + answer_id + &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
        jQuery(this).after(hidden_field);&lt;br /&gt;
        yop_poll_do_vote(poll_id);&lt;br /&gt;
        return false;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* for Mozilla/Opera9 */&lt;br /&gt;
if (document.addEventListener) {&lt;br /&gt;
  document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, init, false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* for Internet Explorer */&lt;br /&gt;
/*@cc_on @*/&lt;br /&gt;
/*@if (@_win32)&lt;br /&gt;
  document.write(&amp;quot;&amp;lt;script id=__ie_onload defer src=javascript:void(0)&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;);&lt;br /&gt;
  var script = document.getElementById(&amp;quot;__ie_onload&amp;quot;);&lt;br /&gt;
  script.onreadystatechange = function() {&lt;br /&gt;
    if (this.readyState == &amp;quot;complete&amp;quot;) {&lt;br /&gt;
      init(); // call the onload handler&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
/*@end @*/&lt;br /&gt;
&lt;br /&gt;
/* for Safari */&lt;br /&gt;
if (/WebKit/i.test(navigator.userAgent)) { // sniff&lt;br /&gt;
  var _timer = setInterval(function() {&lt;br /&gt;
    if (/loaded|complete/.test(document.readyState)) {&lt;br /&gt;
      init(); // call the onload handler&lt;br /&gt;
    }&lt;br /&gt;
  }, 10);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* for other browsers */&lt;br /&gt;
window.onload = init;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach Umfrage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-name-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-name&amp;quot;&amp;gt;%POLL-NAME%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gb_cust&amp;quot;&amp;gt;VORLÄUFIGES ERGEBNIS DER ABSTIMMUNG&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;pds-answer-text-%POLL-ID%&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;pds-feedback-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;div&amp;gt;&lt;br /&gt;
             %POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
           &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;pds-feedback-per-%POLL-ID%&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-vote-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-footer&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-ANSWERS%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;%POLL-TOTAL-VOTES%&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;!--&amp;lt;div id=&amp;quot;yop-poll-back-%POLL-ID%&amp;quot;&amp;gt;%POLL-BACK-TO-VOTE-LINK%&amp;lt;/div&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before Start Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is about to &amp;lt;br&amp;gt;&lt;br /&gt;
start at %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
and finish at %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After End Date&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This poll is closed!&lt;br /&gt;
Poll activity: &amp;lt;br&amp;gt;&lt;br /&gt;
start_date %POLL-START-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
end_date %POLL-END-DATE%&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Poll Results:&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-question-%POLL-ID%&amp;quot; class=&amp;quot;yop-poll-question&amp;quot;&amp;gt;%POLL-QUESTION%&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;yop-poll-answers-1&amp;quot; class=&amp;quot;yop-poll-answers&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		[ANSWER_RESULT_CONTAINER]&lt;br /&gt;
		&amp;lt;li class=&amp;quot;yop-poll-li-result-%POLL-ID%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;label class=&amp;quot;pds-feedback-label&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-answer-text&amp;quot;&amp;gt;%POLL-ANSWER-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;pds-feedback-result&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;span class=&amp;quot;pds-feedback-per&amp;quot;&amp;gt; %POLL-ANSWER-RESULT-LABEL%&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
			&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;span class=&amp;quot;pds-clear&amp;quot; style=&amp;quot;display: block;clear: both;height:1px;line-height:1px;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
	%POLL-ANSWER-RESULT-BAR%&lt;br /&gt;
		&amp;lt;/li&amp;gt;&lt;br /&gt;
		[/ANSWER_RESULT_CONTAINER]&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
%POLL-VOTE-BUTTON%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change Log ==&lt;br /&gt;
8.8.13&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hallo Mascha und Clemens,&lt;br /&gt;
&lt;br /&gt;
folgende Funktionalität ist jetzt implementiert:&lt;br /&gt;
&lt;br /&gt;
- Zu einem Hauptbeitrag (Sozusagen 1.Ebene - entspricht dem Post in&lt;br /&gt;
Wordpress) kann ein normaler Benutzer eine Frage stellen.&lt;br /&gt;
- Zu den Fragen (das wäre dann die 2. Ebene) kann jeder Benutzer&lt;br /&gt;
beliebig viele Beiträge machen&lt;br /&gt;
- Benutzer ab Level 7 (Redakteure und Admins) können beliebig viele&lt;br /&gt;
Fragen stellen.&lt;br /&gt;
&lt;br /&gt;
- Labels sind jetzt: &amp;quot;Hinterlasse einen Beitrag&amp;quot; und &amp;quot;Beitrag abschicken&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Grüße,&lt;br /&gt;
&lt;br /&gt;
Stephan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11&lt;br /&gt;
&lt;br /&gt;
10/2014&lt;br /&gt;
- Kommentare in Spalten sortieren, je nach Antwort&lt;br /&gt;
- Overflow für Kommentarausgabe, damit die Felder nicht zu groß werden&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Licht&amp;diff=21229</id>
		<title>Licht</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Licht&amp;diff=21229"/>
		<updated>2015-10-13T17:33:35Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Licht - Settings&lt;br /&gt;
&lt;br /&gt;
* Keylight (Etwas über dem Model ca. 30 Grad)&lt;br /&gt;
* Filllight (Schultern, Haare)&lt;br /&gt;
* Backlight&lt;br /&gt;
* Kicker (Reflektiert von der Seite des Kopfes)&lt;br /&gt;
&lt;br /&gt;
Beispiel Interview: &lt;br /&gt;
&lt;br /&gt;
Von Rechts nach Links Camera - Interviewer - Keylight. Auf der anderen Seite der Kamera Fülllicht, hinten Backlight (mit Knickstativ) oder ein Kicker kanpp außerhalb des Sichtfelds der Kamera.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Licht&amp;diff=21228</id>
		<title>Licht</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Licht&amp;diff=21228"/>
		<updated>2015-10-13T16:17:03Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: Die Seite wurde neu angelegt: „Licht - Settings  * Keylight  * Filllight * Backlight * Kicker  Beispiel Interview:   Von Rechts nach Links Camera - Interviewer - Keylight. Auf der anderen Se…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Licht - Settings&lt;br /&gt;
&lt;br /&gt;
* Keylight &lt;br /&gt;
* Filllight&lt;br /&gt;
* Backlight&lt;br /&gt;
* Kicker&lt;br /&gt;
&lt;br /&gt;
Beispiel Interview: &lt;br /&gt;
&lt;br /&gt;
Von Rechts nach Links Camera - Interviewer - Keylight. Auf der anderen Seite der Kamera Fülllicht, hinten Backlight (mit Knickstativ) oder ein Kicker kanpp außerhalb des Sichtfelds der Kamera.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21227</id>
		<title>Narda</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21227"/>
		<updated>2015-10-08T16:23:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Änderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Überblick ==&lt;br /&gt;
RMA und ACC liegen auf Geo-bit Server und sind per iFrame eingebunden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=rep_cal&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=warranty&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/acc-2/login.php&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
direkt erreichbar über:&lt;br /&gt;
&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=warranty&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/acc-2/login.php&lt;br /&gt;
&lt;br /&gt;
== TYPO3 RMA Extension ==&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
Narda RMA Prozess [[Dokumentation gbrma]]&lt;br /&gt;
&lt;br /&gt;
=== Zus. Leistungen ===&lt;br /&gt;
&lt;br /&gt;
Mail an Admin 6h / Mailtemplates&lt;br /&gt;
pdf Generierung &lt;br /&gt;
Vorfilterung nach Geräteklasse + Auswahlkontrolle&lt;br /&gt;
Admin Ansicht benötigt ???&lt;br /&gt;
Zusätzliche States&lt;br /&gt;
Geräteliste zum Aufklappen ab 5 Zeilen&lt;br /&gt;
Templatevarianten für&lt;br /&gt;
SRM / IDA&lt;br /&gt;
NBM&lt;br /&gt;
Detailansicht für beendete RMA&lt;br /&gt;
Express Calibration&lt;br /&gt;
fpdf Integration für acc&lt;br /&gt;
Bespr. Narda 2h&lt;br /&gt;
Setting up Testing Area&lt;br /&gt;
Klassen müssen ebenfalls einer Familie zugeordnet werden&lt;br /&gt;
Checkboxen (calib, mod/upgr., repair, no service, nur dann anzeigen, wenn sinnvoll&lt;br /&gt;
Checkboxen komplett weg für ACC&lt;br /&gt;
Regel für mehrere Basedevices erlaubt (Radman)&lt;br /&gt;
Clientnr. in fe_user&lt;br /&gt;
Zeige Rmas by Client nr.&lt;br /&gt;
Modification ausblenden wenn keine vorhanden&lt;br /&gt;
Auslagerung von Texten in Lokalisierungstextfiles&lt;br /&gt;
Möglichkeit zur Auswahl von Texten je nach Geräteklasse&lt;br /&gt;
Erklärungstexte für Status&lt;br /&gt;
ACC Filterung auf Geräteklassenebene&lt;br /&gt;
Mail an Admin bei Delete&lt;br /&gt;
Mapping des ERP Exports und checken der RMAs&lt;br /&gt;
Test Scheduler einrichten&lt;br /&gt;
&lt;br /&gt;
=== Änderungen ===&lt;br /&gt;
* Fehler beim &amp;#039;&amp;#039;&amp;#039;Import&amp;#039;&amp;#039;&amp;#039; wenn Leerzeilen enthalten - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: Statt RMA Date immer &amp;#039;&amp;#039;&amp;#039;Datum der letzten Status Aktualisierung&amp;#039;&amp;#039;&amp;#039;. 1. Angelegt in T3 2. Datum der letzten Bearbeitung aus ERP Datei - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Model erweitern (tstamp) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Templates auf tstamp statt cdate - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Anpassen im Code - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: &amp;#039;&amp;#039;&amp;#039;Datatables&amp;#039;&amp;#039;&amp;#039; Skript für Listenansicht - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validierungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Keine Beschreibung bei Repair eingegeben - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Kein Service Request gewählt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Inspection Repair und No Service nicht gemeinsam anwählbar - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Repair dann keine Kalibrierung (ist beinhaltet) -&amp;gt; Änderung Calib und Repair möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Kalibrierung dann kein Repair -&amp;gt; ist doch möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: Am Ende Auswahlfeld Expresskalibrierung aber nur wenn Kalibrierung ausgewählt ist &amp;#039;&amp;#039;&amp;#039;Todo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: + Textfeld (Additional information) -&amp;gt; &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; wird immer angezeigt auch wenn keine Expresskalib. &amp;#039;&amp;#039;&amp;#039; Evtl. anpassen (nach Rücksprache)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispielbilder&amp;#039;&amp;#039;&amp;#039; &amp;quot;Wo finde ich die Seriennummer&amp;quot; in Add Metadevice - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bug: Add Main Device, Add 2.Device, Zurück auf Main Device Tab =&amp;gt; &amp;#039;&amp;#039;&amp;#039;Tabs&amp;#039;&amp;#039;&amp;#039; werden nicht mehr richtig dargestellt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nichtssagende &amp;#039;&amp;#039;&amp;#039;Fehlermeldung&amp;#039;&amp;#039;&amp;#039; in AddMetadevice wenn die Validierung scheitert (Seite wird erneut angezeigt) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: NewFormFields soll Auswahl für Acc nur anbieten wenn Userrecht vorliegt (Safety) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Doku&amp;#039;&amp;#039;&amp;#039; -&amp;gt; z.T. aus E-Mails übernehmen - &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehlermeldungen von Extbase&amp;#039;&amp;#039;&amp;#039; verhindern bei Browserbedienung (vor und zurück Buttons) - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Wenn &amp;#039;&amp;#039;&amp;#039;RMA nicht vorhanden&amp;#039;&amp;#039;&amp;#039; (z.B. gelöscht) dann aussagekräftige Fehlermeldung) &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: &amp;#039;&amp;#039;&amp;#039;RMA gelöscht Mail&amp;#039;&amp;#039;&amp;#039; nur dann wenn Status 2 erreicht (also wenn schon eine Info bei Narda ankam) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Nummern&amp;#039;&amp;#039;&amp;#039; werden nur als gelöscht markiert bzw. eine Nummer wird nie mehrfach vergeben. - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&amp;#039; muß auch an Kunden (FE-User) gesendet werden - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA löschen Bestätigung&amp;#039;&amp;#039;&amp;#039; (JS) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* SRM Auswahl der Geräte -&amp;gt; richtige Tabs aktiv -&amp;gt; bei SRM 3 Tabs &amp;quot;rf-cable&amp;quot; - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* E-Mail RMA Type weg, RMA Prominent oben, evtl. im Betreff - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zuerst Device Title dann SN - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Umbenennungen&lt;br /&gt;
** Express Order -&amp;gt; Express Calibration Service - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Factory Calibration / Repair -&amp;gt; ohne Warranty Request - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Modification Texte 5 und 6 - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: ClientID Mode -&amp;gt; User mit der selben Client ID können RMAs anderer User sehen - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Client Id als Merkmal im User - &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Client ID muß beim abspreichern vorliegen und mit abgespeichert werden.&lt;br /&gt;
&lt;br /&gt;
== Internet Präsenz Narda ==&lt;br /&gt;
&lt;br /&gt;
Mischung aus verschiedenen Systemen&lt;br /&gt;
&lt;br /&gt;
Hauptdomain: www.narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Content Management System ===&lt;br /&gt;
Frontend ist TYPO3 allerdings werden einige Download-Listen über ein php-Skript generiert.&lt;br /&gt;
Diese Inhalte werden über ein eigenes Tool realisiert.&lt;br /&gt;
&lt;br /&gt;
=== FTP-Zugänge ===&lt;br /&gt;
&lt;br /&gt;
Die Seite würd über vodafone gehostet. Vodafone der Zugriff erfolgt Zentral über&lt;br /&gt;
ftp.vodafone-ip.de&lt;br /&gt;
&lt;br /&gt;
Im Admin Bereich von Vodafone kann man FTP Benutzer anlegen.&lt;br /&gt;
Der Zugriff erfolgt dann über [benutzername]%[domainname]&lt;br /&gt;
Also z.B. aszwei%narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Server Verwaltung ===&lt;br /&gt;
Hier kann man FTP Zugänge anlegen, auf phpMyAdmin zugreifen etc.&lt;br /&gt;
Login unter: https://webadmin.arcor.net/Secure/&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
Direkt zu erreichen unter:&lt;br /&gt;
&lt;br /&gt;
== Eigenes Admin System ==&lt;br /&gt;
Zur Verwaltung von downloads, etc.&lt;br /&gt;
http://www.narda-sts.de/admin/&lt;br /&gt;
&lt;br /&gt;
Greift auf eine separate Datenbank zu, in der die Daten abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Anpassen eines Software Downloads ====&lt;br /&gt;
Um einen Download anzupassen spielt man die Datei per FTP unterhalb des Verzeichnisses&lt;br /&gt;
/download/software/&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man das Admin Tool und geht in den Menüpunkt&lt;br /&gt;
SoftwareUpdate (beta)&lt;br /&gt;
Dort kann man die Release Nummer anpassen (z.B. 2011) und aus dem Dropdownfeld die passende Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Anlegen eines neuen Downloads ====&lt;br /&gt;
Hierbei muß man beachten daß in TYPO3 ein php Schnipsel eingebunden wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  include(&amp;quot;fileadmin/user_upload/scripts/db_func.inc&amp;quot;);&lt;br /&gt;
  print (get_software_information(&amp;quot;EFC_HF_Demo_EN&amp;quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gibt einen Download Block inkl. Link und Beschreibung aus.&lt;br /&gt;
Wobei als Parameter der Name im Datenbankfeld re_call übergeben wird. Dieser wird beim Anlegen der Software manuell Vergeben&lt;br /&gt;
&lt;br /&gt;
== Sales Partner Extranet ==&lt;br /&gt;
www.narda-sts.de/sp (oder /vp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RMA Garantie und Rücklaufgeräte ==&lt;br /&gt;
Dies wird über Vertragspartner erledigt, und es gibt ein weiteres Tool. Der User holt sich ein RMA Ticket (Online Formular) Je nach Region wird dann an den Vertriebspartner eine E-Mail versendet. Außerdem an Narda. &lt;br /&gt;
&lt;br /&gt;
Auf dem Serverl liegt es im Ordner /1/RMA/&lt;br /&gt;
&lt;br /&gt;
Im Quelltext sind auch etliche E-Mail Adressen hinterlegt die auf Mails zu Aichele und dem Programmierer hinweisen. Das müßte mal ausgemistet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontaktdaten der Vertriebspartner ===&lt;br /&gt;
Diese sind in der Datenbank in der Tabelle &amp;#039;&amp;#039;&amp;#039; rma_requests&amp;#039;&amp;#039;&amp;#039; hinterlegt.&lt;br /&gt;
Es gibt auch eine Tabelle Vertriebspartner. Ist aber nicht ganz klar wann diese benutzt werden.&lt;br /&gt;
Ich habe noch kein Administrationstool gefunden. Die Änderung kann aber direkt in der Datenbank erfolgen.&lt;br /&gt;
 &lt;br /&gt;
Edit:&lt;br /&gt;
&lt;br /&gt;
Vertriebspartner in der Tabelle vertriebspartner werden vom RMA Prozess Tool (und vom neuen acc Tool) genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem eine Ausgabe der Vertriebspartner Adressen. Dabei werden über das Admin Tool (Narda Tool -&amp;gt; Partner Update) html Dateien geschrieben, die dann im Typo eingebunden sind. (Total umständlich). Es wird die Tabelle ??? genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise technische Realisierung (PHP-Skripte) ===&lt;br /&gt;
Siehe MindMap&lt;br /&gt;
&lt;br /&gt;
Einstieg für den RMA Prozess ist der Link:&lt;br /&gt;
&lt;br /&gt;
 http://www.narda-sts.de/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Schritt wird die Länderauswahl angezeigt und die Art der Anfrege übergeben.&lt;br /&gt;
Nach der Länderauswahl sieht der link dann ungefähr so aus:&lt;br /&gt;
&lt;br /&gt;
https://ssl.arcor-secure.de/narda-sts.de/1/RMA/rma_persData_02.php?req_art=rep_cal&amp;amp;req_id=P20110214_gF164223&amp;amp;req_reg=2&lt;br /&gt;
&lt;br /&gt;
Es wird also eine req_id und req_reg Übergeben. Und die Persönlichen Daten abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RMA/rma_reCall.php&lt;br /&gt;
&lt;br /&gt;
== ACC Prozess ==&lt;br /&gt;
Für den ACC (Accredited Callbration) wurde das Tool komplett überarbeitet und entschlackt. Im Moment läuft es nicht auf dem Narda Server, sondern auf dem Geo-bit Server.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Datenbank ===&lt;br /&gt;
Die Partner sind hier in der Tabelle Vertriebspartner hinterlegt. Sie Loggen sich mit ihrer ID und einem Passwort ein. Die Tabelle wurde ursprünglich kopiert und um einige Felder erweitert. &lt;br /&gt;
&lt;br /&gt;
Es können sich nur Partner anmelden die im Feld&lt;br /&gt;
&lt;br /&gt;
== Weitere Skripte ==&lt;br /&gt;
&lt;br /&gt;
Es sind einige weitere Skripte im Einsatz:&lt;br /&gt;
&lt;br /&gt;
=== Funktionsübersicht von Produkten ===&lt;br /&gt;
/doc/fileadmin/user_upload/scripts/func_overview.inc.php&lt;br /&gt;
&lt;br /&gt;
Wird in Typo3 so aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 include(&amp;quot;fileadmin/user_upload/scripts/func_overview.inc.php&amp;quot;);&lt;br /&gt;
  $config_file = &amp;quot;typo3conf/localconf.php&amp;quot;;&lt;br /&gt;
  $image_path = &amp;quot;fileadmin/user_upload/products/personal_protection&amp;quot;;&lt;br /&gt;
  $page_id = 70; // ID DER UEBERGEORDNETEN SEITE&lt;br /&gt;
  print get_overview($page_id,$image_path,&amp;quot;Personal Monitor&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktion:&lt;br /&gt;
&lt;br /&gt;
* Liest die aktuelle Sprache aus dem L Parameter oder der RealURL Adresse&lt;br /&gt;
* Liest die pid der untergeordneten Seiten aus.&lt;br /&gt;
&lt;br /&gt;
=== Mailfunktion RMA / ACC ===&lt;br /&gt;
==== RMA ====&lt;br /&gt;
Es werden mehrere Mails generiert. &lt;br /&gt;
&lt;br /&gt;
1. Schritt User Registrierung =&amp;gt; Mail mit dem Ticket. Dieses enthält einen Link. Für die Geräteeingabe&lt;br /&gt;
Mailversand in &amp;#039;&amp;#039;&amp;#039;rma_persData_02.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2. Schritt Versand der RMA Daten&lt;br /&gt;
 $html_mail_versand = send_html_mail($req_number,$req_ident_number,$req_art);&lt;br /&gt;
kommt aus &amp;#039;&amp;#039;&amp;#039;mail_html_function.inc.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== ACC ====&lt;br /&gt;
Das Formular zur Eingabe liegt in &amp;#039;&amp;#039;&amp;#039;acc_form.ph&amp;#039;&amp;#039;&amp;#039;p Nach Absenden wird &amp;#039;&amp;#039;&amp;#039;acc_form_send.php&amp;#039;&amp;#039;&amp;#039; aufgerufen. In diesem wird die Mail über die Funktion &lt;br /&gt;
 $success = send_acc_mail($rma_num,$arrForm,$arrPartner); &lt;br /&gt;
versendet. Die Funktion wird in &amp;#039;&amp;#039;&amp;#039;lib/acal_functions.php&amp;#039;&amp;#039;&amp;#039; zur Verfügung gestellt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORMULAR        MAILVERSAND / FEEDBACK&lt;br /&gt;
acc_form.php -&amp;gt; acc_form_send.php        &amp;lt;- includes acal_functions.php (send_acc_mail)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21226</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21226"/>
		<updated>2015-10-08T15:24:42Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Genereller Zugriff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Konstanten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com //na&lt;br /&gt;
senderMailName = Test Mailer //na&lt;br /&gt;
adminMail = email@example.com // Adresse für Admin Mails&lt;br /&gt;
adminMailName = Test Admin // Name des Admins in E-Mails&lt;br /&gt;
mailSubject = RMA Request // Betreffzeile der Admin Mails wenn nicht anders im Code definiert evtl. rauswerfen TODO&lt;br /&gt;
superuserId = 1 // na&lt;br /&gt;
nbmClassId = 7 // Geräteklassen ID für nbm Geräte (für Sonderregelung bei der Auswahl)&lt;br /&gt;
nbm520Id = 104 // Geräte ID für nbm 520 wegen Sonderregelung&lt;br /&gt;
nbm550Id = 103 // Geräte ID für nbm550 wegen Sonderregelung&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 // Schalter - beschränkt Zugriff auf bestimmte Gerätefamilien &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Zugriff auf RMA Plugin schützen ===&lt;br /&gt;
Das Plugin erlaubt generell jedem FE-User RMAs anzulegen. Welche Art von RMAs wird durch die weitere Konfiguration geregelt (s.u.). Wenn Nur bestimmte Benutzer das Plugin benutzen sollen kann man eine &amp;#039;&amp;#039;&amp;#039;normale FE-User Gruppe&amp;#039;&amp;#039;&amp;#039; (z.B. mit dem Namen RMA) anlegen und für die Seite auf der das Plugin liegt einen FE-User Zugriff einrichten.&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der &amp;#039;&amp;#039;&amp;#039;Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen&amp;#039;&amp;#039;&amp;#039;. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
=== Client Mode ===&lt;br /&gt;
In diesem Modus dient die Client ID (im User unter RMA hinterlegt) als Zugriffsmerkmal für die RMAs. D.h. mehrere User können auf die selben RMAs zugreifen&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21225</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21225"/>
		<updated>2015-10-08T15:24:20Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Einrichtung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Konstanten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com //na&lt;br /&gt;
senderMailName = Test Mailer //na&lt;br /&gt;
adminMail = email@example.com // Adresse für Admin Mails&lt;br /&gt;
adminMailName = Test Admin // Name des Admins in E-Mails&lt;br /&gt;
mailSubject = RMA Request // Betreffzeile der Admin Mails wenn nicht anders im Code definiert evtl. rauswerfen TODO&lt;br /&gt;
superuserId = 1 // na&lt;br /&gt;
nbmClassId = 7 // Geräteklassen ID für nbm Geräte (für Sonderregelung bei der Auswahl)&lt;br /&gt;
nbm520Id = 104 // Geräte ID für nbm 520 wegen Sonderregelung&lt;br /&gt;
nbm550Id = 103 // Geräte ID für nbm550 wegen Sonderregelung&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 // Schalter - beschränkt Zugriff auf bestimmte Gerätefamilien &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Genereller Zugriff ===&lt;br /&gt;
Das Plugin erlaubt generell jedem FE-User RMAs anzulegen. Welche Art von RMAs wird durch die weitere Konfiguration geregelt (s.u.). Wenn Nur bestimmte Benutzer das Plugin benutzen sollen kann man eine &amp;#039;&amp;#039;&amp;#039;normale FE-User Gruppe&amp;#039;&amp;#039;&amp;#039; (z.B. mit dem Namen RMA) anlegen und für die Seite auf der das Plugin liegt einen FE-User Zugriff einrichten.&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der &amp;#039;&amp;#039;&amp;#039;Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen&amp;#039;&amp;#039;&amp;#039;. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
=== Client Mode ===&lt;br /&gt;
In diesem Modus dient die Client ID (im User unter RMA hinterlegt) als Zugriffsmerkmal für die RMAs. D.h. mehrere User können auf die selben RMAs zugreifen&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21224</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21224"/>
		<updated>2015-10-08T14:50:52Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* TS Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Konstanten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com //na&lt;br /&gt;
senderMailName = Test Mailer //na&lt;br /&gt;
adminMail = email@example.com // Adresse für Admin Mails&lt;br /&gt;
adminMailName = Test Admin // Name des Admins in E-Mails&lt;br /&gt;
mailSubject = RMA Request // Betreffzeile der Admin Mails wenn nicht anders im Code definiert evtl. rauswerfen TODO&lt;br /&gt;
superuserId = 1 // na&lt;br /&gt;
nbmClassId = 7 // Geräteklassen ID für nbm Geräte (für Sonderregelung bei der Auswahl)&lt;br /&gt;
nbm520Id = 104 // Geräte ID für nbm 520 wegen Sonderregelung&lt;br /&gt;
nbm550Id = 103 // Geräte ID für nbm550 wegen Sonderregelung&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 // Schalter - beschränkt Zugriff auf bestimmte Gerätefamilien &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der &amp;#039;&amp;#039;&amp;#039;Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen&amp;#039;&amp;#039;&amp;#039;. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
=== Client Mode ===&lt;br /&gt;
In diesem Modus dient die Client ID (im User unter RMA hinterlegt) als Zugriffsmerkmal für die RMAs. D.h. mehrere User können auf die selben RMAs zugreifen&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21223</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21223"/>
		<updated>2015-10-08T14:47:28Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Family Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der &amp;#039;&amp;#039;&amp;#039;Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen&amp;#039;&amp;#039;&amp;#039;. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
=== Client Mode ===&lt;br /&gt;
In diesem Modus dient die Client ID (im User unter RMA hinterlegt) als Zugriffsmerkmal für die RMAs. D.h. mehrere User können auf die selben RMAs zugreifen&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21222</id>
		<title>Narda</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21222"/>
		<updated>2015-10-08T14:41:44Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Änderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Überblick ==&lt;br /&gt;
RMA und ACC liegen auf Geo-bit Server und sind per iFrame eingebunden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=rep_cal&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=warranty&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/acc-2/login.php&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
direkt erreichbar über:&lt;br /&gt;
&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=warranty&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/acc-2/login.php&lt;br /&gt;
&lt;br /&gt;
== TYPO3 RMA Extension ==&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
Narda RMA Prozess [[Dokumentation gbrma]]&lt;br /&gt;
&lt;br /&gt;
=== Zus. Leistungen ===&lt;br /&gt;
&lt;br /&gt;
Mail an Admin 6h / Mailtemplates&lt;br /&gt;
pdf Generierung &lt;br /&gt;
Vorfilterung nach Geräteklasse + Auswahlkontrolle&lt;br /&gt;
Admin Ansicht benötigt ???&lt;br /&gt;
Zusätzliche States&lt;br /&gt;
Geräteliste zum Aufklappen ab 5 Zeilen&lt;br /&gt;
Templatevarianten für&lt;br /&gt;
SRM / IDA&lt;br /&gt;
NBM&lt;br /&gt;
Detailansicht für beendete RMA&lt;br /&gt;
Express Calibration&lt;br /&gt;
fpdf Integration für acc&lt;br /&gt;
Bespr. Narda 2h&lt;br /&gt;
Setting up Testing Area&lt;br /&gt;
Klassen müssen ebenfalls einer Familie zugeordnet werden&lt;br /&gt;
Checkboxen (calib, mod/upgr., repair, no service, nur dann anzeigen, wenn sinnvoll&lt;br /&gt;
Checkboxen komplett weg für ACC&lt;br /&gt;
Regel für mehrere Basedevices erlaubt (Radman)&lt;br /&gt;
Clientnr. in fe_user&lt;br /&gt;
Zeige Rmas by Client nr.&lt;br /&gt;
Modification ausblenden wenn keine vorhanden&lt;br /&gt;
Auslagerung von Texten in Lokalisierungstextfiles&lt;br /&gt;
Möglichkeit zur Auswahl von Texten je nach Geräteklasse&lt;br /&gt;
Erklärungstexte für Status&lt;br /&gt;
ACC Filterung auf Geräteklassenebene&lt;br /&gt;
Mail an Admin bei Delete&lt;br /&gt;
Mapping des ERP Exports und checken der RMAs&lt;br /&gt;
Test Scheduler einrichten&lt;br /&gt;
&lt;br /&gt;
=== Änderungen ===&lt;br /&gt;
* Fehler beim &amp;#039;&amp;#039;&amp;#039;Import&amp;#039;&amp;#039;&amp;#039; wenn Leerzeilen enthalten - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: Statt RMA Date immer &amp;#039;&amp;#039;&amp;#039;Datum der letzten Status Aktualisierung&amp;#039;&amp;#039;&amp;#039;. 1. Angelegt in T3 2. Datum der letzten Bearbeitung aus ERP Datei - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Model erweitern (tstamp) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Templates auf tstamp statt cdate - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Anpassen im Code - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: &amp;#039;&amp;#039;&amp;#039;Datatables&amp;#039;&amp;#039;&amp;#039; Skript für Listenansicht - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validierungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Keine Beschreibung bei Repair eingegeben - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Kein Service Request gewählt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Inspection Repair und No Service nicht gemeinsam anwählbar - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Repair dann keine Kalibrierung (ist beinhaltet) -&amp;gt; Änderung Calib und Repair möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Kalibrierung dann kein Repair -&amp;gt; ist doch möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: Am Ende Auswahlfeld Expresskalibrierung aber nur wenn Kalibrierung ausgewählt ist &amp;#039;&amp;#039;&amp;#039;Todo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: + Textfeld (Additional information) -&amp;gt; &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; wird immer angezeigt auch wenn keine Expresskalib. &amp;#039;&amp;#039;&amp;#039; Evtl. anpassen (nach Rücksprache)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispielbilder&amp;#039;&amp;#039;&amp;#039; &amp;quot;Wo finde ich die Seriennummer&amp;quot; in Add Metadevice - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bug: Add Main Device, Add 2.Device, Zurück auf Main Device Tab =&amp;gt; &amp;#039;&amp;#039;&amp;#039;Tabs&amp;#039;&amp;#039;&amp;#039; werden nicht mehr richtig dargestellt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nichtssagende &amp;#039;&amp;#039;&amp;#039;Fehlermeldung&amp;#039;&amp;#039;&amp;#039; in AddMetadevice wenn die Validierung scheitert (Seite wird erneut angezeigt) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: NewFormFields soll Auswahl für Acc nur anbieten wenn Userrecht vorliegt (Safety) - ToDo&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Doku&amp;#039;&amp;#039;&amp;#039; -&amp;gt; z.T. aus E-Mails übernehmen - &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehlermeldungen von Extbase&amp;#039;&amp;#039;&amp;#039; verhindern bei Browserbedienung (vor und zurück Buttons) - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Wenn &amp;#039;&amp;#039;&amp;#039;RMA nicht vorhanden&amp;#039;&amp;#039;&amp;#039; (z.B. gelöscht) dann aussagekräftige Fehlermeldung) &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: &amp;#039;&amp;#039;&amp;#039;RMA gelöscht Mail&amp;#039;&amp;#039;&amp;#039; nur dann wenn Status 2 erreicht (also wenn schon eine Info bei Narda ankam) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Nummern&amp;#039;&amp;#039;&amp;#039; werden nur als gelöscht markiert bzw. eine Nummer wird nie mehrfach vergeben. - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&amp;#039; muß auch an Kunden (FE-User) gesendet werden - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA löschen Bestätigung&amp;#039;&amp;#039;&amp;#039; (JS) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* SRM Auswahl der Geräte -&amp;gt; richtige Tabs aktiv -&amp;gt; bei SRM 3 Tabs &amp;quot;rf-cable&amp;quot; - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* E-Mail RMA Type weg, RMA Prominent oben, evtl. im Betreff - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zuerst Device Title dann SN - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Umbenennungen&lt;br /&gt;
** Express Order -&amp;gt; Express Calibration Service - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Factory Calibration / Repair -&amp;gt; ohne Warranty Request - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Modification Texte 5 und 6 - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: ClientID Mode -&amp;gt; User mit der selben Client ID können RMAs anderer User sehen - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Client Id als Merkmal im User - &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Client ID muß beim abspreichern vorliegen und mit abgespeichert werden.&lt;br /&gt;
&lt;br /&gt;
== Internet Präsenz Narda ==&lt;br /&gt;
&lt;br /&gt;
Mischung aus verschiedenen Systemen&lt;br /&gt;
&lt;br /&gt;
Hauptdomain: www.narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Content Management System ===&lt;br /&gt;
Frontend ist TYPO3 allerdings werden einige Download-Listen über ein php-Skript generiert.&lt;br /&gt;
Diese Inhalte werden über ein eigenes Tool realisiert.&lt;br /&gt;
&lt;br /&gt;
=== FTP-Zugänge ===&lt;br /&gt;
&lt;br /&gt;
Die Seite würd über vodafone gehostet. Vodafone der Zugriff erfolgt Zentral über&lt;br /&gt;
ftp.vodafone-ip.de&lt;br /&gt;
&lt;br /&gt;
Im Admin Bereich von Vodafone kann man FTP Benutzer anlegen.&lt;br /&gt;
Der Zugriff erfolgt dann über [benutzername]%[domainname]&lt;br /&gt;
Also z.B. aszwei%narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Server Verwaltung ===&lt;br /&gt;
Hier kann man FTP Zugänge anlegen, auf phpMyAdmin zugreifen etc.&lt;br /&gt;
Login unter: https://webadmin.arcor.net/Secure/&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
Direkt zu erreichen unter:&lt;br /&gt;
&lt;br /&gt;
== Eigenes Admin System ==&lt;br /&gt;
Zur Verwaltung von downloads, etc.&lt;br /&gt;
http://www.narda-sts.de/admin/&lt;br /&gt;
&lt;br /&gt;
Greift auf eine separate Datenbank zu, in der die Daten abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Anpassen eines Software Downloads ====&lt;br /&gt;
Um einen Download anzupassen spielt man die Datei per FTP unterhalb des Verzeichnisses&lt;br /&gt;
/download/software/&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man das Admin Tool und geht in den Menüpunkt&lt;br /&gt;
SoftwareUpdate (beta)&lt;br /&gt;
Dort kann man die Release Nummer anpassen (z.B. 2011) und aus dem Dropdownfeld die passende Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Anlegen eines neuen Downloads ====&lt;br /&gt;
Hierbei muß man beachten daß in TYPO3 ein php Schnipsel eingebunden wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  include(&amp;quot;fileadmin/user_upload/scripts/db_func.inc&amp;quot;);&lt;br /&gt;
  print (get_software_information(&amp;quot;EFC_HF_Demo_EN&amp;quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gibt einen Download Block inkl. Link und Beschreibung aus.&lt;br /&gt;
Wobei als Parameter der Name im Datenbankfeld re_call übergeben wird. Dieser wird beim Anlegen der Software manuell Vergeben&lt;br /&gt;
&lt;br /&gt;
== Sales Partner Extranet ==&lt;br /&gt;
www.narda-sts.de/sp (oder /vp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RMA Garantie und Rücklaufgeräte ==&lt;br /&gt;
Dies wird über Vertragspartner erledigt, und es gibt ein weiteres Tool. Der User holt sich ein RMA Ticket (Online Formular) Je nach Region wird dann an den Vertriebspartner eine E-Mail versendet. Außerdem an Narda. &lt;br /&gt;
&lt;br /&gt;
Auf dem Serverl liegt es im Ordner /1/RMA/&lt;br /&gt;
&lt;br /&gt;
Im Quelltext sind auch etliche E-Mail Adressen hinterlegt die auf Mails zu Aichele und dem Programmierer hinweisen. Das müßte mal ausgemistet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontaktdaten der Vertriebspartner ===&lt;br /&gt;
Diese sind in der Datenbank in der Tabelle &amp;#039;&amp;#039;&amp;#039; rma_requests&amp;#039;&amp;#039;&amp;#039; hinterlegt.&lt;br /&gt;
Es gibt auch eine Tabelle Vertriebspartner. Ist aber nicht ganz klar wann diese benutzt werden.&lt;br /&gt;
Ich habe noch kein Administrationstool gefunden. Die Änderung kann aber direkt in der Datenbank erfolgen.&lt;br /&gt;
 &lt;br /&gt;
Edit:&lt;br /&gt;
&lt;br /&gt;
Vertriebspartner in der Tabelle vertriebspartner werden vom RMA Prozess Tool (und vom neuen acc Tool) genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem eine Ausgabe der Vertriebspartner Adressen. Dabei werden über das Admin Tool (Narda Tool -&amp;gt; Partner Update) html Dateien geschrieben, die dann im Typo eingebunden sind. (Total umständlich). Es wird die Tabelle ??? genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise technische Realisierung (PHP-Skripte) ===&lt;br /&gt;
Siehe MindMap&lt;br /&gt;
&lt;br /&gt;
Einstieg für den RMA Prozess ist der Link:&lt;br /&gt;
&lt;br /&gt;
 http://www.narda-sts.de/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Schritt wird die Länderauswahl angezeigt und die Art der Anfrege übergeben.&lt;br /&gt;
Nach der Länderauswahl sieht der link dann ungefähr so aus:&lt;br /&gt;
&lt;br /&gt;
https://ssl.arcor-secure.de/narda-sts.de/1/RMA/rma_persData_02.php?req_art=rep_cal&amp;amp;req_id=P20110214_gF164223&amp;amp;req_reg=2&lt;br /&gt;
&lt;br /&gt;
Es wird also eine req_id und req_reg Übergeben. Und die Persönlichen Daten abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RMA/rma_reCall.php&lt;br /&gt;
&lt;br /&gt;
== ACC Prozess ==&lt;br /&gt;
Für den ACC (Accredited Callbration) wurde das Tool komplett überarbeitet und entschlackt. Im Moment läuft es nicht auf dem Narda Server, sondern auf dem Geo-bit Server.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Datenbank ===&lt;br /&gt;
Die Partner sind hier in der Tabelle Vertriebspartner hinterlegt. Sie Loggen sich mit ihrer ID und einem Passwort ein. Die Tabelle wurde ursprünglich kopiert und um einige Felder erweitert. &lt;br /&gt;
&lt;br /&gt;
Es können sich nur Partner anmelden die im Feld&lt;br /&gt;
&lt;br /&gt;
== Weitere Skripte ==&lt;br /&gt;
&lt;br /&gt;
Es sind einige weitere Skripte im Einsatz:&lt;br /&gt;
&lt;br /&gt;
=== Funktionsübersicht von Produkten ===&lt;br /&gt;
/doc/fileadmin/user_upload/scripts/func_overview.inc.php&lt;br /&gt;
&lt;br /&gt;
Wird in Typo3 so aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 include(&amp;quot;fileadmin/user_upload/scripts/func_overview.inc.php&amp;quot;);&lt;br /&gt;
  $config_file = &amp;quot;typo3conf/localconf.php&amp;quot;;&lt;br /&gt;
  $image_path = &amp;quot;fileadmin/user_upload/products/personal_protection&amp;quot;;&lt;br /&gt;
  $page_id = 70; // ID DER UEBERGEORDNETEN SEITE&lt;br /&gt;
  print get_overview($page_id,$image_path,&amp;quot;Personal Monitor&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktion:&lt;br /&gt;
&lt;br /&gt;
* Liest die aktuelle Sprache aus dem L Parameter oder der RealURL Adresse&lt;br /&gt;
* Liest die pid der untergeordneten Seiten aus.&lt;br /&gt;
&lt;br /&gt;
=== Mailfunktion RMA / ACC ===&lt;br /&gt;
==== RMA ====&lt;br /&gt;
Es werden mehrere Mails generiert. &lt;br /&gt;
&lt;br /&gt;
1. Schritt User Registrierung =&amp;gt; Mail mit dem Ticket. Dieses enthält einen Link. Für die Geräteeingabe&lt;br /&gt;
Mailversand in &amp;#039;&amp;#039;&amp;#039;rma_persData_02.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2. Schritt Versand der RMA Daten&lt;br /&gt;
 $html_mail_versand = send_html_mail($req_number,$req_ident_number,$req_art);&lt;br /&gt;
kommt aus &amp;#039;&amp;#039;&amp;#039;mail_html_function.inc.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== ACC ====&lt;br /&gt;
Das Formular zur Eingabe liegt in &amp;#039;&amp;#039;&amp;#039;acc_form.ph&amp;#039;&amp;#039;&amp;#039;p Nach Absenden wird &amp;#039;&amp;#039;&amp;#039;acc_form_send.php&amp;#039;&amp;#039;&amp;#039; aufgerufen. In diesem wird die Mail über die Funktion &lt;br /&gt;
 $success = send_acc_mail($rma_num,$arrForm,$arrPartner); &lt;br /&gt;
versendet. Die Funktion wird in &amp;#039;&amp;#039;&amp;#039;lib/acal_functions.php&amp;#039;&amp;#039;&amp;#039; zur Verfügung gestellt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORMULAR        MAILVERSAND / FEEDBACK&lt;br /&gt;
acc_form.php -&amp;gt; acc_form_send.php        &amp;lt;- includes acal_functions.php (send_acc_mail)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21221</id>
		<title>Narda</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21221"/>
		<updated>2015-10-08T14:37:56Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Änderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Überblick ==&lt;br /&gt;
RMA und ACC liegen auf Geo-bit Server und sind per iFrame eingebunden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=rep_cal&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=warranty&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/acc-2/login.php&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
direkt erreichbar über:&lt;br /&gt;
&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=warranty&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/acc-2/login.php&lt;br /&gt;
&lt;br /&gt;
== TYPO3 RMA Extension ==&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
Narda RMA Prozess [[Dokumentation gbrma]]&lt;br /&gt;
&lt;br /&gt;
=== Zus. Leistungen ===&lt;br /&gt;
&lt;br /&gt;
Mail an Admin 6h / Mailtemplates&lt;br /&gt;
pdf Generierung &lt;br /&gt;
Vorfilterung nach Geräteklasse + Auswahlkontrolle&lt;br /&gt;
Admin Ansicht benötigt ???&lt;br /&gt;
Zusätzliche States&lt;br /&gt;
Geräteliste zum Aufklappen ab 5 Zeilen&lt;br /&gt;
Templatevarianten für&lt;br /&gt;
SRM / IDA&lt;br /&gt;
NBM&lt;br /&gt;
Detailansicht für beendete RMA&lt;br /&gt;
Express Calibration&lt;br /&gt;
fpdf Integration für acc&lt;br /&gt;
Bespr. Narda 2h&lt;br /&gt;
Setting up Testing Area&lt;br /&gt;
Klassen müssen ebenfalls einer Familie zugeordnet werden&lt;br /&gt;
Checkboxen (calib, mod/upgr., repair, no service, nur dann anzeigen, wenn sinnvoll&lt;br /&gt;
Checkboxen komplett weg für ACC&lt;br /&gt;
Regel für mehrere Basedevices erlaubt (Radman)&lt;br /&gt;
Clientnr. in fe_user&lt;br /&gt;
Zeige Rmas by Client nr.&lt;br /&gt;
Modification ausblenden wenn keine vorhanden&lt;br /&gt;
Auslagerung von Texten in Lokalisierungstextfiles&lt;br /&gt;
Möglichkeit zur Auswahl von Texten je nach Geräteklasse&lt;br /&gt;
Erklärungstexte für Status&lt;br /&gt;
ACC Filterung auf Geräteklassenebene&lt;br /&gt;
Mail an Admin bei Delete&lt;br /&gt;
Mapping des ERP Exports und checken der RMAs&lt;br /&gt;
Test Scheduler einrichten&lt;br /&gt;
&lt;br /&gt;
=== Änderungen ===&lt;br /&gt;
* Fehler beim &amp;#039;&amp;#039;&amp;#039;Import&amp;#039;&amp;#039;&amp;#039; wenn Leerzeilen enthalten - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: Statt RMA Date immer &amp;#039;&amp;#039;&amp;#039;Datum der letzten Status Aktualisierung&amp;#039;&amp;#039;&amp;#039;. 1. Angelegt in T3 2. Datum der letzten Bearbeitung aus ERP Datei - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Model erweitern (tstamp) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Templates auf tstamp statt cdate - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Anpassen im Code - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: &amp;#039;&amp;#039;&amp;#039;Datatables&amp;#039;&amp;#039;&amp;#039; Skript für Listenansicht - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validierungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Keine Beschreibung bei Repair eingegeben - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Kein Service Request gewählt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Inspection Repair und No Service nicht gemeinsam anwählbar - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Repair dann keine Kalibrierung (ist beinhaltet) -&amp;gt; Änderung Calib und Repair möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Kalibrierung dann kein Repair -&amp;gt; ist doch möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: Am Ende Auswahlfeld Expresskalibrierung aber nur wenn Kalibrierung ausgewählt ist &amp;#039;&amp;#039;&amp;#039;Todo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: + Textfeld (Additional information) -&amp;gt; &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; wird immer angezeigt auch wenn keine Expresskalib. &amp;#039;&amp;#039;&amp;#039; Evtl. anpassen (nach Rücksprache)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispielbilder&amp;#039;&amp;#039;&amp;#039; &amp;quot;Wo finde ich die Seriennummer&amp;quot; in Add Metadevice - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Bug: Add Main Device, Add 2.Device, Zurück auf Main Device Tab =&amp;gt; &amp;#039;&amp;#039;&amp;#039;Tabs&amp;#039;&amp;#039;&amp;#039; werden nicht mehr richtig dargestellt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nichtssagende &amp;#039;&amp;#039;&amp;#039;Fehlermeldung&amp;#039;&amp;#039;&amp;#039; in AddMetadevice wenn die Validierung scheitert (Seite wird erneut angezeigt) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: NewFormFields soll Auswahl für Acc nur anbieten wenn Userrecht vorliegt (Safety) - ToDo&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Doku&amp;#039;&amp;#039;&amp;#039; -&amp;gt; z.T. aus E-Mails übernehmen - &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehlermeldungen von Extbase&amp;#039;&amp;#039;&amp;#039; verhindern bei Browserbedienung (vor und zurück Buttons) - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Wenn &amp;#039;&amp;#039;&amp;#039;RMA nicht vorhanden&amp;#039;&amp;#039;&amp;#039; (z.B. gelöscht) dann aussagekräftige Fehlermeldung) &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: &amp;#039;&amp;#039;&amp;#039;RMA gelöscht Mail&amp;#039;&amp;#039;&amp;#039; nur dann wenn Status 2 erreicht (also wenn schon eine Info bei Narda ankam) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Nummern&amp;#039;&amp;#039;&amp;#039; werden nur als gelöscht markiert bzw. eine Nummer wird nie mehrfach vergeben. - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&amp;#039; muß auch an Kunden (FE-User) gesendet werden - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA löschen Bestätigung&amp;#039;&amp;#039;&amp;#039; (JS) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* SRM Auswahl der Geräte -&amp;gt; richtige Tabs aktiv -&amp;gt; bei SRM 3 Tabs &amp;quot;rf-cable&amp;quot; - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* E-Mail RMA Type weg, RMA Prominent oben, evtl. im Betreff - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zuerst Device Title dann SN - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Umbenennungen&lt;br /&gt;
** Express Order -&amp;gt; Express Calibration Service - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Factory Calibration / Repair -&amp;gt; ohne Warranty Request - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Modification Texte 5 und 6 - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Internet Präsenz Narda ==&lt;br /&gt;
&lt;br /&gt;
Mischung aus verschiedenen Systemen&lt;br /&gt;
&lt;br /&gt;
Hauptdomain: www.narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Content Management System ===&lt;br /&gt;
Frontend ist TYPO3 allerdings werden einige Download-Listen über ein php-Skript generiert.&lt;br /&gt;
Diese Inhalte werden über ein eigenes Tool realisiert.&lt;br /&gt;
&lt;br /&gt;
=== FTP-Zugänge ===&lt;br /&gt;
&lt;br /&gt;
Die Seite würd über vodafone gehostet. Vodafone der Zugriff erfolgt Zentral über&lt;br /&gt;
ftp.vodafone-ip.de&lt;br /&gt;
&lt;br /&gt;
Im Admin Bereich von Vodafone kann man FTP Benutzer anlegen.&lt;br /&gt;
Der Zugriff erfolgt dann über [benutzername]%[domainname]&lt;br /&gt;
Also z.B. aszwei%narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Server Verwaltung ===&lt;br /&gt;
Hier kann man FTP Zugänge anlegen, auf phpMyAdmin zugreifen etc.&lt;br /&gt;
Login unter: https://webadmin.arcor.net/Secure/&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
Direkt zu erreichen unter:&lt;br /&gt;
&lt;br /&gt;
== Eigenes Admin System ==&lt;br /&gt;
Zur Verwaltung von downloads, etc.&lt;br /&gt;
http://www.narda-sts.de/admin/&lt;br /&gt;
&lt;br /&gt;
Greift auf eine separate Datenbank zu, in der die Daten abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Anpassen eines Software Downloads ====&lt;br /&gt;
Um einen Download anzupassen spielt man die Datei per FTP unterhalb des Verzeichnisses&lt;br /&gt;
/download/software/&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man das Admin Tool und geht in den Menüpunkt&lt;br /&gt;
SoftwareUpdate (beta)&lt;br /&gt;
Dort kann man die Release Nummer anpassen (z.B. 2011) und aus dem Dropdownfeld die passende Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Anlegen eines neuen Downloads ====&lt;br /&gt;
Hierbei muß man beachten daß in TYPO3 ein php Schnipsel eingebunden wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  include(&amp;quot;fileadmin/user_upload/scripts/db_func.inc&amp;quot;);&lt;br /&gt;
  print (get_software_information(&amp;quot;EFC_HF_Demo_EN&amp;quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gibt einen Download Block inkl. Link und Beschreibung aus.&lt;br /&gt;
Wobei als Parameter der Name im Datenbankfeld re_call übergeben wird. Dieser wird beim Anlegen der Software manuell Vergeben&lt;br /&gt;
&lt;br /&gt;
== Sales Partner Extranet ==&lt;br /&gt;
www.narda-sts.de/sp (oder /vp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RMA Garantie und Rücklaufgeräte ==&lt;br /&gt;
Dies wird über Vertragspartner erledigt, und es gibt ein weiteres Tool. Der User holt sich ein RMA Ticket (Online Formular) Je nach Region wird dann an den Vertriebspartner eine E-Mail versendet. Außerdem an Narda. &lt;br /&gt;
&lt;br /&gt;
Auf dem Serverl liegt es im Ordner /1/RMA/&lt;br /&gt;
&lt;br /&gt;
Im Quelltext sind auch etliche E-Mail Adressen hinterlegt die auf Mails zu Aichele und dem Programmierer hinweisen. Das müßte mal ausgemistet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontaktdaten der Vertriebspartner ===&lt;br /&gt;
Diese sind in der Datenbank in der Tabelle &amp;#039;&amp;#039;&amp;#039; rma_requests&amp;#039;&amp;#039;&amp;#039; hinterlegt.&lt;br /&gt;
Es gibt auch eine Tabelle Vertriebspartner. Ist aber nicht ganz klar wann diese benutzt werden.&lt;br /&gt;
Ich habe noch kein Administrationstool gefunden. Die Änderung kann aber direkt in der Datenbank erfolgen.&lt;br /&gt;
 &lt;br /&gt;
Edit:&lt;br /&gt;
&lt;br /&gt;
Vertriebspartner in der Tabelle vertriebspartner werden vom RMA Prozess Tool (und vom neuen acc Tool) genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem eine Ausgabe der Vertriebspartner Adressen. Dabei werden über das Admin Tool (Narda Tool -&amp;gt; Partner Update) html Dateien geschrieben, die dann im Typo eingebunden sind. (Total umständlich). Es wird die Tabelle ??? genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise technische Realisierung (PHP-Skripte) ===&lt;br /&gt;
Siehe MindMap&lt;br /&gt;
&lt;br /&gt;
Einstieg für den RMA Prozess ist der Link:&lt;br /&gt;
&lt;br /&gt;
 http://www.narda-sts.de/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Schritt wird die Länderauswahl angezeigt und die Art der Anfrege übergeben.&lt;br /&gt;
Nach der Länderauswahl sieht der link dann ungefähr so aus:&lt;br /&gt;
&lt;br /&gt;
https://ssl.arcor-secure.de/narda-sts.de/1/RMA/rma_persData_02.php?req_art=rep_cal&amp;amp;req_id=P20110214_gF164223&amp;amp;req_reg=2&lt;br /&gt;
&lt;br /&gt;
Es wird also eine req_id und req_reg Übergeben. Und die Persönlichen Daten abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RMA/rma_reCall.php&lt;br /&gt;
&lt;br /&gt;
== ACC Prozess ==&lt;br /&gt;
Für den ACC (Accredited Callbration) wurde das Tool komplett überarbeitet und entschlackt. Im Moment läuft es nicht auf dem Narda Server, sondern auf dem Geo-bit Server.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Datenbank ===&lt;br /&gt;
Die Partner sind hier in der Tabelle Vertriebspartner hinterlegt. Sie Loggen sich mit ihrer ID und einem Passwort ein. Die Tabelle wurde ursprünglich kopiert und um einige Felder erweitert. &lt;br /&gt;
&lt;br /&gt;
Es können sich nur Partner anmelden die im Feld&lt;br /&gt;
&lt;br /&gt;
== Weitere Skripte ==&lt;br /&gt;
&lt;br /&gt;
Es sind einige weitere Skripte im Einsatz:&lt;br /&gt;
&lt;br /&gt;
=== Funktionsübersicht von Produkten ===&lt;br /&gt;
/doc/fileadmin/user_upload/scripts/func_overview.inc.php&lt;br /&gt;
&lt;br /&gt;
Wird in Typo3 so aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 include(&amp;quot;fileadmin/user_upload/scripts/func_overview.inc.php&amp;quot;);&lt;br /&gt;
  $config_file = &amp;quot;typo3conf/localconf.php&amp;quot;;&lt;br /&gt;
  $image_path = &amp;quot;fileadmin/user_upload/products/personal_protection&amp;quot;;&lt;br /&gt;
  $page_id = 70; // ID DER UEBERGEORDNETEN SEITE&lt;br /&gt;
  print get_overview($page_id,$image_path,&amp;quot;Personal Monitor&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktion:&lt;br /&gt;
&lt;br /&gt;
* Liest die aktuelle Sprache aus dem L Parameter oder der RealURL Adresse&lt;br /&gt;
* Liest die pid der untergeordneten Seiten aus.&lt;br /&gt;
&lt;br /&gt;
=== Mailfunktion RMA / ACC ===&lt;br /&gt;
==== RMA ====&lt;br /&gt;
Es werden mehrere Mails generiert. &lt;br /&gt;
&lt;br /&gt;
1. Schritt User Registrierung =&amp;gt; Mail mit dem Ticket. Dieses enthält einen Link. Für die Geräteeingabe&lt;br /&gt;
Mailversand in &amp;#039;&amp;#039;&amp;#039;rma_persData_02.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2. Schritt Versand der RMA Daten&lt;br /&gt;
 $html_mail_versand = send_html_mail($req_number,$req_ident_number,$req_art);&lt;br /&gt;
kommt aus &amp;#039;&amp;#039;&amp;#039;mail_html_function.inc.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== ACC ====&lt;br /&gt;
Das Formular zur Eingabe liegt in &amp;#039;&amp;#039;&amp;#039;acc_form.ph&amp;#039;&amp;#039;&amp;#039;p Nach Absenden wird &amp;#039;&amp;#039;&amp;#039;acc_form_send.php&amp;#039;&amp;#039;&amp;#039; aufgerufen. In diesem wird die Mail über die Funktion &lt;br /&gt;
 $success = send_acc_mail($rma_num,$arrForm,$arrPartner); &lt;br /&gt;
versendet. Die Funktion wird in &amp;#039;&amp;#039;&amp;#039;lib/acal_functions.php&amp;#039;&amp;#039;&amp;#039; zur Verfügung gestellt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORMULAR        MAILVERSAND / FEEDBACK&lt;br /&gt;
acc_form.php -&amp;gt; acc_form_send.php        &amp;lt;- includes acal_functions.php (send_acc_mail)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21220</id>
		<title>Narda</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21220"/>
		<updated>2015-10-08T11:42:52Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Änderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Überblick ==&lt;br /&gt;
RMA und ACC liegen auf Geo-bit Server und sind per iFrame eingebunden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=rep_cal&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=warranty&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/acc-2/login.php&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
direkt erreichbar über:&lt;br /&gt;
&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=warranty&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/acc-2/login.php&lt;br /&gt;
&lt;br /&gt;
== TYPO3 RMA Extension ==&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
Narda RMA Prozess [[Dokumentation gbrma]]&lt;br /&gt;
&lt;br /&gt;
=== Zus. Leistungen ===&lt;br /&gt;
&lt;br /&gt;
Mail an Admin 6h / Mailtemplates&lt;br /&gt;
pdf Generierung &lt;br /&gt;
Vorfilterung nach Geräteklasse + Auswahlkontrolle&lt;br /&gt;
Admin Ansicht benötigt ???&lt;br /&gt;
Zusätzliche States&lt;br /&gt;
Geräteliste zum Aufklappen ab 5 Zeilen&lt;br /&gt;
Templatevarianten für&lt;br /&gt;
SRM / IDA&lt;br /&gt;
NBM&lt;br /&gt;
Detailansicht für beendete RMA&lt;br /&gt;
Express Calibration&lt;br /&gt;
fpdf Integration für acc&lt;br /&gt;
Bespr. Narda 2h&lt;br /&gt;
Setting up Testing Area&lt;br /&gt;
Klassen müssen ebenfalls einer Familie zugeordnet werden&lt;br /&gt;
Checkboxen (calib, mod/upgr., repair, no service, nur dann anzeigen, wenn sinnvoll&lt;br /&gt;
Checkboxen komplett weg für ACC&lt;br /&gt;
Regel für mehrere Basedevices erlaubt (Radman)&lt;br /&gt;
Clientnr. in fe_user&lt;br /&gt;
Zeige Rmas by Client nr.&lt;br /&gt;
Modification ausblenden wenn keine vorhanden&lt;br /&gt;
Auslagerung von Texten in Lokalisierungstextfiles&lt;br /&gt;
Möglichkeit zur Auswahl von Texten je nach Geräteklasse&lt;br /&gt;
Erklärungstexte für Status&lt;br /&gt;
ACC Filterung auf Geräteklassenebene&lt;br /&gt;
Mail an Admin bei Delete&lt;br /&gt;
Mapping des ERP Exports und checken der RMAs&lt;br /&gt;
Test Scheduler einrichten&lt;br /&gt;
&lt;br /&gt;
=== Änderungen ===&lt;br /&gt;
* Fehler beim &amp;#039;&amp;#039;&amp;#039;Import&amp;#039;&amp;#039;&amp;#039; wenn Leerzeilen enthalten - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: Statt RMA Date immer &amp;#039;&amp;#039;&amp;#039;Datum der letzten Status aktualisierung&amp;#039;&amp;#039;&amp;#039;. 1. Angelegt in T3 2. Datum der letzten Bearbeitung aus ERP Datei - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Model erweitern (tstamp) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Templates auf tstamp statt cdate - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Anpassen im Code - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: &amp;#039;&amp;#039;&amp;#039;Datatables&amp;#039;&amp;#039;&amp;#039; Skript für Listenansicht - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validierungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Keine Beschreibung bei Repair eingegeben - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Kein Service Request gewählt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Inspection Repair und No Service nicht gemeinsam anwählbar - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Repair dann keine Kalibrierung (ist beinhaltet) -&amp;gt; Änderung Calib und Repair möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Kalibrierung dann kein Repair -&amp;gt; ist doch möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: Am Ende Auswahlfeld Expresskalibrierung aber nur wenn Kalibrierung ausgewählt ist &amp;#039;&amp;#039;&amp;#039;Todo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: + Textfeld (Additional information) -&amp;gt; &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; wird immer angezeigt auch wenn keine Expresskalib. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispielbilder&amp;#039;&amp;#039;&amp;#039; &amp;quot;Wo finde ich die Seriennummer&amp;quot; in Add Metadevice&lt;br /&gt;
* Bug: Add Main Device, Add 2.Device, Zurück auf Main Device Tab =&amp;gt; &amp;#039;&amp;#039;&amp;#039;Tabs&amp;#039;&amp;#039;&amp;#039; werden nicht mehr richtig dargestellt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nichtssagende &amp;#039;&amp;#039;&amp;#039;Fehlermeldung&amp;#039;&amp;#039;&amp;#039; in AddMetadevice wenn die Validierung scheitert (Seite wird erneut angezeigt) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: NewFormFields soll Auswahl für Acc nur anbieten wenn Userrecht vorliegt (Safety)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Doku&amp;#039;&amp;#039;&amp;#039; -&amp;gt; z.T. aus E-Mails übernehmen - &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehlermeldungen von Extbase&amp;#039;&amp;#039;&amp;#039; verhindern bei Browserbedienung (vor und zurück Buttons) - &amp;#039;&amp;#039;&amp;#039;ToDo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Wenn &amp;#039;&amp;#039;&amp;#039;RMA nicht vorhanden&amp;#039;&amp;#039;&amp;#039; (z.B. gelöscht) dann aussagekräftige Fehlermeldung) &amp;#039;&amp;#039;&amp;#039; ToDo &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: &amp;#039;&amp;#039;&amp;#039;RMA gelöscht Mail&amp;#039;&amp;#039;&amp;#039; nur dann wenn Status 2 erreicht (also wenn schon eine Info bei Narda ankam) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Nummern&amp;#039;&amp;#039;&amp;#039; werden nur als gelöscht markiert bzw. eine Nummer wird nie mehrfach vergeben. - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&amp;#039; muß auch an Kunden (FE-User) gesendet werden - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA löschen Bestätigung&amp;#039;&amp;#039;&amp;#039; (JS) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* SRM Auswahl der Geräte -&amp;gt; richtige Tabs aktiv -&amp;gt; bei SRM 3 Tabs &amp;quot;rf-cable&amp;quot; - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* E-Mail RMA Type weg, RMA Prominent oben, evtl. im Betreff - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zuerst Device Title dann SN - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Umbenennungen&lt;br /&gt;
** Express Order -&amp;gt; Express Calibration Service - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Factory Calibration / Repair -&amp;gt; ohne Warranty Request - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Modification Texte 5 und 6 - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Internet Präsenz Narda ==&lt;br /&gt;
&lt;br /&gt;
Mischung aus verschiedenen Systemen&lt;br /&gt;
&lt;br /&gt;
Hauptdomain: www.narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Content Management System ===&lt;br /&gt;
Frontend ist TYPO3 allerdings werden einige Download-Listen über ein php-Skript generiert.&lt;br /&gt;
Diese Inhalte werden über ein eigenes Tool realisiert.&lt;br /&gt;
&lt;br /&gt;
=== FTP-Zugänge ===&lt;br /&gt;
&lt;br /&gt;
Die Seite würd über vodafone gehostet. Vodafone der Zugriff erfolgt Zentral über&lt;br /&gt;
ftp.vodafone-ip.de&lt;br /&gt;
&lt;br /&gt;
Im Admin Bereich von Vodafone kann man FTP Benutzer anlegen.&lt;br /&gt;
Der Zugriff erfolgt dann über [benutzername]%[domainname]&lt;br /&gt;
Also z.B. aszwei%narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Server Verwaltung ===&lt;br /&gt;
Hier kann man FTP Zugänge anlegen, auf phpMyAdmin zugreifen etc.&lt;br /&gt;
Login unter: https://webadmin.arcor.net/Secure/&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
Direkt zu erreichen unter:&lt;br /&gt;
&lt;br /&gt;
== Eigenes Admin System ==&lt;br /&gt;
Zur Verwaltung von downloads, etc.&lt;br /&gt;
http://www.narda-sts.de/admin/&lt;br /&gt;
&lt;br /&gt;
Greift auf eine separate Datenbank zu, in der die Daten abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Anpassen eines Software Downloads ====&lt;br /&gt;
Um einen Download anzupassen spielt man die Datei per FTP unterhalb des Verzeichnisses&lt;br /&gt;
/download/software/&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man das Admin Tool und geht in den Menüpunkt&lt;br /&gt;
SoftwareUpdate (beta)&lt;br /&gt;
Dort kann man die Release Nummer anpassen (z.B. 2011) und aus dem Dropdownfeld die passende Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Anlegen eines neuen Downloads ====&lt;br /&gt;
Hierbei muß man beachten daß in TYPO3 ein php Schnipsel eingebunden wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  include(&amp;quot;fileadmin/user_upload/scripts/db_func.inc&amp;quot;);&lt;br /&gt;
  print (get_software_information(&amp;quot;EFC_HF_Demo_EN&amp;quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gibt einen Download Block inkl. Link und Beschreibung aus.&lt;br /&gt;
Wobei als Parameter der Name im Datenbankfeld re_call übergeben wird. Dieser wird beim Anlegen der Software manuell Vergeben&lt;br /&gt;
&lt;br /&gt;
== Sales Partner Extranet ==&lt;br /&gt;
www.narda-sts.de/sp (oder /vp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RMA Garantie und Rücklaufgeräte ==&lt;br /&gt;
Dies wird über Vertragspartner erledigt, und es gibt ein weiteres Tool. Der User holt sich ein RMA Ticket (Online Formular) Je nach Region wird dann an den Vertriebspartner eine E-Mail versendet. Außerdem an Narda. &lt;br /&gt;
&lt;br /&gt;
Auf dem Serverl liegt es im Ordner /1/RMA/&lt;br /&gt;
&lt;br /&gt;
Im Quelltext sind auch etliche E-Mail Adressen hinterlegt die auf Mails zu Aichele und dem Programmierer hinweisen. Das müßte mal ausgemistet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontaktdaten der Vertriebspartner ===&lt;br /&gt;
Diese sind in der Datenbank in der Tabelle &amp;#039;&amp;#039;&amp;#039; rma_requests&amp;#039;&amp;#039;&amp;#039; hinterlegt.&lt;br /&gt;
Es gibt auch eine Tabelle Vertriebspartner. Ist aber nicht ganz klar wann diese benutzt werden.&lt;br /&gt;
Ich habe noch kein Administrationstool gefunden. Die Änderung kann aber direkt in der Datenbank erfolgen.&lt;br /&gt;
 &lt;br /&gt;
Edit:&lt;br /&gt;
&lt;br /&gt;
Vertriebspartner in der Tabelle vertriebspartner werden vom RMA Prozess Tool (und vom neuen acc Tool) genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem eine Ausgabe der Vertriebspartner Adressen. Dabei werden über das Admin Tool (Narda Tool -&amp;gt; Partner Update) html Dateien geschrieben, die dann im Typo eingebunden sind. (Total umständlich). Es wird die Tabelle ??? genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise technische Realisierung (PHP-Skripte) ===&lt;br /&gt;
Siehe MindMap&lt;br /&gt;
&lt;br /&gt;
Einstieg für den RMA Prozess ist der Link:&lt;br /&gt;
&lt;br /&gt;
 http://www.narda-sts.de/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Schritt wird die Länderauswahl angezeigt und die Art der Anfrege übergeben.&lt;br /&gt;
Nach der Länderauswahl sieht der link dann ungefähr so aus:&lt;br /&gt;
&lt;br /&gt;
https://ssl.arcor-secure.de/narda-sts.de/1/RMA/rma_persData_02.php?req_art=rep_cal&amp;amp;req_id=P20110214_gF164223&amp;amp;req_reg=2&lt;br /&gt;
&lt;br /&gt;
Es wird also eine req_id und req_reg Übergeben. Und die Persönlichen Daten abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RMA/rma_reCall.php&lt;br /&gt;
&lt;br /&gt;
== ACC Prozess ==&lt;br /&gt;
Für den ACC (Accredited Callbration) wurde das Tool komplett überarbeitet und entschlackt. Im Moment läuft es nicht auf dem Narda Server, sondern auf dem Geo-bit Server.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Datenbank ===&lt;br /&gt;
Die Partner sind hier in der Tabelle Vertriebspartner hinterlegt. Sie Loggen sich mit ihrer ID und einem Passwort ein. Die Tabelle wurde ursprünglich kopiert und um einige Felder erweitert. &lt;br /&gt;
&lt;br /&gt;
Es können sich nur Partner anmelden die im Feld&lt;br /&gt;
&lt;br /&gt;
== Weitere Skripte ==&lt;br /&gt;
&lt;br /&gt;
Es sind einige weitere Skripte im Einsatz:&lt;br /&gt;
&lt;br /&gt;
=== Funktionsübersicht von Produkten ===&lt;br /&gt;
/doc/fileadmin/user_upload/scripts/func_overview.inc.php&lt;br /&gt;
&lt;br /&gt;
Wird in Typo3 so aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 include(&amp;quot;fileadmin/user_upload/scripts/func_overview.inc.php&amp;quot;);&lt;br /&gt;
  $config_file = &amp;quot;typo3conf/localconf.php&amp;quot;;&lt;br /&gt;
  $image_path = &amp;quot;fileadmin/user_upload/products/personal_protection&amp;quot;;&lt;br /&gt;
  $page_id = 70; // ID DER UEBERGEORDNETEN SEITE&lt;br /&gt;
  print get_overview($page_id,$image_path,&amp;quot;Personal Monitor&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktion:&lt;br /&gt;
&lt;br /&gt;
* Liest die aktuelle Sprache aus dem L Parameter oder der RealURL Adresse&lt;br /&gt;
* Liest die pid der untergeordneten Seiten aus.&lt;br /&gt;
&lt;br /&gt;
=== Mailfunktion RMA / ACC ===&lt;br /&gt;
==== RMA ====&lt;br /&gt;
Es werden mehrere Mails generiert. &lt;br /&gt;
&lt;br /&gt;
1. Schritt User Registrierung =&amp;gt; Mail mit dem Ticket. Dieses enthält einen Link. Für die Geräteeingabe&lt;br /&gt;
Mailversand in &amp;#039;&amp;#039;&amp;#039;rma_persData_02.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2. Schritt Versand der RMA Daten&lt;br /&gt;
 $html_mail_versand = send_html_mail($req_number,$req_ident_number,$req_art);&lt;br /&gt;
kommt aus &amp;#039;&amp;#039;&amp;#039;mail_html_function.inc.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== ACC ====&lt;br /&gt;
Das Formular zur Eingabe liegt in &amp;#039;&amp;#039;&amp;#039;acc_form.ph&amp;#039;&amp;#039;&amp;#039;p Nach Absenden wird &amp;#039;&amp;#039;&amp;#039;acc_form_send.php&amp;#039;&amp;#039;&amp;#039; aufgerufen. In diesem wird die Mail über die Funktion &lt;br /&gt;
 $success = send_acc_mail($rma_num,$arrForm,$arrPartner); &lt;br /&gt;
versendet. Die Funktion wird in &amp;#039;&amp;#039;&amp;#039;lib/acal_functions.php&amp;#039;&amp;#039;&amp;#039; zur Verfügung gestellt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORMULAR        MAILVERSAND / FEEDBACK&lt;br /&gt;
acc_form.php -&amp;gt; acc_form_send.php        &amp;lt;- includes acal_functions.php (send_acc_mail)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Fluid_-_Snippets&amp;diff=21219</id>
		<title>Fluid - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Fluid_-_Snippets&amp;diff=21219"/>
		<updated>2015-10-08T11:38:56Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Conditions, If-Else-Bedingungen in Fluid Templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
http://wiki.typo3.org/Category:De:fluid&lt;br /&gt;
&lt;br /&gt;
http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/Index.html&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
 &amp;lt;f:debug title=&amp;quot;band&amp;quot;&amp;gt;{band}&amp;lt;/f:debug&amp;gt;&lt;br /&gt;
 &amp;lt;f:debug&amp;gt;{_all}&amp;lt;/f:debug&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lokalisierung - Mehrsprachigkeit ==&lt;br /&gt;
 &amp;lt;f:translate key=&amp;quot;tx_gbbandpass_domain_model_band.name&amp;quot; /&amp;gt;&lt;br /&gt;
 Tool zum erstellen der Lokalisierungsdateien (Sprachdateien): http://lbrmedia.net/tools/xliff_translation_file_erstellen/xlfC/Pi1/&lt;br /&gt;
&lt;br /&gt;
== Links erzeugen ==&lt;br /&gt;
http://wiki.typo3.org/De:ViewHelper/Link&lt;br /&gt;
=== Link auf Action Controller z.B. Einzelansicht (show) - f:link.action ===&lt;br /&gt;
 &amp;lt;f:link.action action=&amp;quot;show&amp;quot;&amp;gt;action link&amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
 &amp;lt;f:link.action action=&amp;quot;show&amp;quot; arguments=&amp;quot;{band : band}&amp;quot;&amp;gt; {band.name}&amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== E-Mail Link - f:link.email ===&lt;br /&gt;
 &amp;lt;f:link.email email=&amp;quot;foo@bar.tld&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Externer Link - f:link.external ===&lt;br /&gt;
Standard Scheme ist http es gehen aber auch andere z.B. ftp:&lt;br /&gt;
 &amp;lt;f:link.external uri=&amp;quot;typo3.org&amp;quot; defaultScheme=&amp;quot;ftp&amp;quot;&amp;gt;external ftp link&amp;lt;/f:link.external&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seitenlink - f:link.page ===&lt;br /&gt;
 &amp;lt;f:link.page pageUid=&amp;quot;1&amp;quot; additionalParams=&amp;quot;{foo: &amp;#039;bar&amp;#039;}&amp;quot;&amp;gt;page link&amp;lt;/f:link.page&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link Beispiele ===&lt;br /&gt;
==== Springen zu einem Anchor-Punkt====&lt;br /&gt;
Section entspricht der ID eines Divs&lt;br /&gt;
 &amp;lt;f:link.page section=&amp;quot;frame&amp;quot;&amp;gt;Top&amp;lt;/f:link.page&amp;gt;&lt;br /&gt;
====Link auf eine interne Seite====&lt;br /&gt;
 &amp;lt;f:link.page pageUid=&amp;quot;3&amp;quot;&amp;gt;Kontakt&amp;lt;/f:link.page&amp;gt;&lt;br /&gt;
==== Link mit Parameter Übergabe ====&lt;br /&gt;
 &amp;lt;f:link.page pageUid=&amp;quot;3&amp;quot;  additionalParams=&amp;quot;{name: &amp;#039;wert&amp;#039;}&amp;quot;&amp;gt;Kontakt&amp;lt;/f:link.page&amp;gt;&lt;br /&gt;
====Link auf eine externe Adresse====&lt;br /&gt;
 &amp;lt;f:link.external url=&amp;quot;http://www.typo3.org&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Link zy TYPO3&amp;lt;/f:link.external&amp;gt;&lt;br /&gt;
====Link auf eine E-Mail-Adresse====&lt;br /&gt;
 &amp;lt;f:link.email email=&amp;quot;adresse@domain.com&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Link mit mehreren Argumenten ====&lt;br /&gt;
 &amp;lt;f:link.action action=&amp;quot;addDevice&amp;quot; arguments=&amp;quot;{rma:rma,deviceClassUid:deviceClass.uid}&amp;quot;&amp;gt;{deviceClass.classTitle} &amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bilder ==&lt;br /&gt;
 &amp;lt;f:image src=&amp;quot;EXT:myext/Resources/Public/typo3_logo.png&amp;quot; alt=&amp;quot;alt text&amp;quot; maxWidth=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiele für Bilder einer eigenen Extension in Fluid ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; (Quelle: http://keinerweiss.de/755-typo3-fal-in-einer-eigenen-extbasefluid-extension-einsetzen.html 2014/11)&lt;br /&gt;
&lt;br /&gt;
Hier nutzt man den &amp;#039;&amp;#039;&amp;#039;File Abstraction Layer (FAL)&amp;#039;&amp;#039;&amp;#039;. Ausgehend von einer mit dem Extension Builder erzeugtem Modell mit Typ Image ein paar Schnipsel für die Ausgabe im template (list.html)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mein Model:                       root&lt;br /&gt;
Das FileReference Model:          root.image&lt;br /&gt;
Der sys_file_reference Datensatz: root.image.originalResource&lt;br /&gt;
Der sys_file Datensatz:           root.image.originalResource.originalFile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{roots}&amp;quot; as=&amp;quot;root&amp;quot;&amp;gt;&lt;br /&gt;
Orginal-Attribute:&amp;lt;br /&amp;gt;&lt;br /&gt;
Dateiname:    {root.image.originalResource.originalFile.name}&amp;lt;br /&amp;gt;&lt;br /&gt;
Titel:        {root.image.originalResource.originalFile.title}&amp;lt;br /&amp;gt;&lt;br /&gt;
Beschreibung: {root.image.originalResource.originalFile.description}&amp;lt;br /&amp;gt;&lt;br /&gt;
Alt-Text:     {root.image.originalResource.originalFile.alternative}&amp;lt;br /&amp;gt;&lt;br /&gt;
UID:          {root.image.originalResource.originalFile.uid}&amp;lt;br /&amp;gt;&lt;br /&gt;
Pfad:         {root.image.originalResource.publicUrl}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Referenz-Attribute:&amp;lt;br /&amp;gt;&lt;br /&gt;
Titel:        {root.image.originalResource.title}&amp;lt;br /&amp;gt;&lt;br /&gt;
Beschreibung: {root.image.originalResource.name}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe als Bild:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;f:image src=&amp;quot;{root.image.originalResource.originalFile.uid}&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;f:image src=&amp;quot;{root.image.uid}&amp;quot; alt=&amp;quot;&amp;quot; treatIdAsReference=&amp;quot;TRUE&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Link:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;{file.originalResource.publicUrl}&amp;quot;&amp;gt;{file.originalResource.title}&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{root.files}&amp;quot; as=&amp;quot;file&amp;quot;&amp;gt;                           &lt;br /&gt;
        &amp;lt;p&amp;gt;{file.originalResource.originalFile.title}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditions, If-Else-Bedingungen in Fluid Templates ==&lt;br /&gt;
http://www.extbasefluid.com/fluid/bedingungen-ifelse/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{meineBedingungsVariable}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;f:then&amp;gt; Dieser Text wird ausgegeben, wenn meineBedingungsVariable weder leer noch 0 ist. &amp;lt;/f:then&amp;gt;&lt;br /&gt;
  &amp;lt;f:else&amp;gt; Dieser Text wird ausgegeben, wenn meineBedingungsVariable leer oder 0 ist. &amp;lt;/f:else&amp;gt;&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &amp;lt;f:if condition=&amp;quot;{meineBedingungsVariable} &amp;gt; 3&amp;quot;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Modulo&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{photos}&amp;quot; as=&amp;quot;photo&amp;quot; cycle=&amp;quot;cycle&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;photo&amp;quot;&amp;gt;{photo.name}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{cycle} % 2&amp;quot;&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &amp;lt;f:if condition=&amp;quot;{meineBedingungsVariable} == {meinWertZumPruefen}&amp;quot;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;&amp;lt;f:count subject=&amp;#039;{post.comments}&amp;#039; /&amp;gt; &amp;gt; 0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;f:then&amp;gt; [...] {comments} [...] &amp;lt;/f:then&amp;gt;&lt;br /&gt;
 &amp;lt;f:else&amp;gt; Keine Kommentare gefunden. &amp;lt;/f:else&amp;gt;&lt;br /&gt;
 &amp;lt;/f:if&amp;gt;&lt;br /&gt;
 //Um eigene Viewhelper in der Bedingung zu verwenden müssen einfache Hochkommas in der Bedingung verwendet werden.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Beispiel - Letztes Element In Schleife===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:alias map=&amp;quot;{n: &amp;#039;{items-&amp;gt;f:count()}&amp;#039;}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{items}&amp;quot; as=&amp;quot;item&amp;quot; iteration=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
{item.property}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{n} &amp;gt; {i.cycle}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;f:then&amp;gt;da kommt noch eins &amp;lt;br&amp;gt;&amp;lt;/f:then&amp;gt;&lt;br /&gt;
&amp;lt;f:else&amp;gt;das wars&amp;lt;/f:else&amp;gt;&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Beispiel - Objekte vorhanden / Objekte zählen===&lt;br /&gt;
Testen ob Objekte zum Ausgeben vorhanden sind (hier projects)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{projects}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;f:then&amp;gt;&lt;br /&gt;
     &amp;lt;f:for each=&amp;quot;{projects}&amp;quot; as=&amp;quot;project&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;{project.name}&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;f:count subject=&amp;quot;{project.assignments}&amp;quot; /&amp;gt; Mitarbeiter&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;{project.workedTime}&amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/f:for&amp;gt;&lt;br /&gt;
  &amp;lt;/f:then&amp;gt;&amp;lt;f:else&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keine Projekte gefunden&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/f:else&amp;gt;&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiel 2===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
partialAuswahl = TEXT&lt;br /&gt;
partialAuswahl.value = 1&lt;br /&gt;
&lt;br /&gt;
# FLUID Template definieren&lt;br /&gt;
fluidTemplate = FLUIDTEMPLATE&lt;br /&gt;
fluidTemplate {&lt;br /&gt;
  ...&lt;br /&gt;
  variables {&lt;br /&gt;
    partial &amp;lt; partialAuswahl&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template (view-helper)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Fluid kann im Moment nur nummerische Werte überprüfen, deswegen partialAuswahl.value = 1 und {partial} == 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{partial} == 1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;f:then&amp;gt;&lt;br /&gt;
      Partial {partial} ausgegeben.&lt;br /&gt;
    &amp;lt;/f:then&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;f:else&amp;gt;&lt;br /&gt;
        Keine Partial-Angabe gefunden&lt;br /&gt;
    &amp;lt;/f:else&amp;gt;&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Variable mit String vergleichen ===&lt;br /&gt;
http://www.typo3lexikon.de/typo3-tutorials/extensions/fluid/fluid-tipps-und-tricks.html&lt;br /&gt;
&lt;br /&gt;
Funktioniert im Moment (2014) noch nicht:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{data.ctype} == &amp;#039;table&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
 {data.bodytext}&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So geht&amp;#039;s:&lt;br /&gt;
&lt;br /&gt;
Über einen Alias&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:alias map=&amp;quot;{myText: &amp;#039;table&amp;#039;}&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;f:if condition=&amp;quot;{data.ctype} == {myText}&amp;quot;&amp;gt;&lt;br /&gt;
 {data.bodytext}&lt;br /&gt;
 &amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/f:alias&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein Array (die beiden Operatoren werden in ein Array konvertiert, welches Fluid interpretieren kann)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{0:data.ctype} == {0:&amp;#039;table&amp;#039;}&amp;quot;&amp;gt;&lt;br /&gt;
 {data.bodytext}&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Array-Lösung hat auch noch den Vorteil, dass man mehrere Werte gleichzeitig überprüfen kann:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{0:data.ctype,1:data.hidden,2:data.deleted} == {0:&amp;#039;table&amp;#039;,1:&amp;#039;0&amp;#039;,2:&amp;#039;0&amp;#039;}&amp;quot;&amp;gt;&lt;br /&gt;
 {data.bodytext}&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switches (ab Typo3 6.2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:switch expression=&amp;quot;{person.gender}&amp;quot;&amp;gt;  &lt;br /&gt;
   &amp;lt;f:case value=&amp;quot;male&amp;quot;&amp;gt;Mr.&amp;lt;/f:case&amp;gt;  &lt;br /&gt;
   &amp;lt;f:case value=&amp;quot;female&amp;quot;&amp;gt;Mrs.&amp;lt;/f:case&amp;gt;  &lt;br /&gt;
   &amp;lt;f:case default=&amp;quot;TRUE&amp;quot;&amp;gt;Mrs. or Mr.&amp;lt;/f:case&amp;gt; &lt;br /&gt;
&amp;lt;/f:switch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RTE Inhalte Rendern ==&lt;br /&gt;
 &amp;lt;f:format.html&amp;gt;{content.bodytext}&amp;lt;/f:format.html&amp;gt;&lt;br /&gt;
Funktioniert aber nicht bei allen CTypes, weil die entsprechenden CSS_Styled_Content Funktionen nicht ausgeführt werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:if condition=&amp;quot;{content.ctype}&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;f:cObject typoscriptObjectPath=&amp;quot;tt_content.{content.ctype}.20&amp;quot; data=&amp;quot;{content}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beachtet aber, dass Ihr für diese Lösung auch alle benötigten tt_content-Felder in Eurem Model definiert habt.&lt;br /&gt;
&lt;br /&gt;
== CSS und JS einbinden ==&lt;br /&gt;
Eventuell wäre hier TypoScript vorzuziehen.&lt;br /&gt;
=== CSS und JS Dateien über Fluid ===&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;{f:uri.resource(path:&amp;#039;Css/bootstrap.css&amp;#039;)}&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;{f:uri.resource(path:&amp;#039;Js/jquery.shuffle.js&amp;#039;)}&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
Funktioniert nicht für Dateien in fileadmin. Der Pfad bezieht sich auf &lt;br /&gt;
 typo3conf/ext/myExtKey/Resources/Public/&lt;br /&gt;
&lt;br /&gt;
=== Inline JS über Fluid ===&lt;br /&gt;
Wrap über CData:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;![CDATA[&lt;br /&gt;
...&lt;br /&gt;
]]&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wrap über Fluid cdata ViewHelper&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:format.cdata&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var myLayout;&lt;br /&gt;
    $(document).ready(function() {&lt;br /&gt;
      myLayout = $(&amp;#039;body&amp;#039;).layout({&lt;br /&gt;
        north__size: 27,&lt;br /&gt;
        north__initClosed: false,&lt;br /&gt;
        north__initHidden: false,&lt;br /&gt;
        center__maskContents: true // IMPORTANT - enable iframe masking&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/f:format.cdata&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schleifen ==&lt;br /&gt;
=== 4 Spalten mit Modulo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{images}&amp;quot; as=&amp;quot;image&amp;quot; iteration=&amp;quot;iteration&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;f:image src=&amp;quot;upload/tx_myextension/{image.source}&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;150&amp;quot; alt=&amp;quot;Mein Bild {image.caption}&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;f:if condition=&amp;quot;{iteration.cycle}%4==0&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/f:if&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TypoScript in Fluid ==&lt;br /&gt;
==== Texte direkt aus dem TypoScript Objekt holen====&lt;br /&gt;
TypoScript&lt;br /&gt;
 inhaltSpalteNormal &amp;lt; styles.content.get&lt;br /&gt;
HTML&lt;br /&gt;
 &amp;lt;f:cObject typoscriptObjectPath=&amp;quot;inhaltSpalteNormal&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Texte direkt aus dem TypoScript Objekt holen kombiniert====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meinText = TEXT&lt;br /&gt;
meinText {&lt;br /&gt;
  wrap = &amp;lt;p&amp;gt;Hier steht der Text aus dem Template:&amp;amp;nbsp;&amp;lt;b&amp;gt;&amp;quot;|&amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
  # Ohne diese Einstellung würde die | nicht&lt;br /&gt;
  # mit dem Text aus dem Template ersezt werden&lt;br /&gt;
  current = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TypoScript holen ====&lt;br /&gt;
Hier gibt es zwei Varianten. Die eine per data-Attribut den Text übergeben und die Andere&lt;br /&gt;
zwischen den f:cObject-Tags.&lt;br /&gt;
 &amp;lt;f:cObject typoscriptObjectPath=&amp;quot;meinText&amp;quot; data=&amp;quot;Das ist der Text aus dem Template, er wird ersetzt&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:cObject typoscriptObjectPath=&amp;quot;meinText&amp;quot;&amp;gt;&lt;br /&gt;
  Platzhaltertext&lt;br /&gt;
&amp;lt;/f:cObject&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_extname {&lt;br /&gt;
	settings {&lt;br /&gt;
		foo = blub&lt;br /&gt;
		bla {&lt;br /&gt;
			bar = lorem&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump( $this-&amp;gt;settings[&amp;#039;foo&amp;#039;] );&lt;br /&gt;
 print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump( $this-&amp;gt;settings[&amp;#039;bla&amp;#039;][&amp;#039;bar&amp;#039;] );&lt;br /&gt;
&lt;br /&gt;
===Inline Notation===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
anredeHerr = TEXT&lt;br /&gt;
anredeHerr.value = 1&lt;br /&gt;
&lt;br /&gt;
# FLUID Template definieren&lt;br /&gt;
fluidTemplate = FLUIDTEMPLATE&lt;br /&gt;
fluidTemplate {&lt;br /&gt;
  ...&lt;br /&gt;
  variables {&lt;br /&gt;
    anredeHerr &amp;lt; anredeHerr&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Template (View-Helper)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Sehr geehrte{f:if(condition: &amp;#039;{anredeHerr}&amp;#039;, then: &amp;#039;r Herr&amp;#039;, else: &amp;#039;&amp;amp;nbsp;Frau&amp;#039;)} XY, &amp;lt;br /&amp;gt;&lt;br /&gt;
  wir m&amp;amp;ouml;chten Ihnen mitteilen, dass...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alias - Werte zwischenspeichern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:alias map=&amp;quot;{amount: &amp;#039;{addresses-&amp;gt;f:count()}&amp;#039;}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;There are {amount} records in database&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/f:alias&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formulare ==&lt;br /&gt;
siehe auch [[Formulare mit Extbase und Fluid]]&lt;br /&gt;
&lt;br /&gt;
== Anderes ==&lt;br /&gt;
=== Fluid überschreiben ===&lt;br /&gt;
z.B. bei SystemExtensions:&lt;br /&gt;
&lt;br /&gt;
http://blog.teamgeist-medien.de/2014/11/typo3-fluid-viewhelper-templates-ueberschreiben-z-b-vom-paginate-widget.html&lt;br /&gt;
&lt;br /&gt;
Ohne Namespaces (TYPO3 &amp;lt; 6.x)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Zentral für alle Plugins&lt;br /&gt;
config.tx_extbase.view.widget.Tx_Fluid_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = EXT:pfad/zum/Ordner/der/Templates/&lt;br /&gt;
&lt;br /&gt;
# Nur für ein bestimmtes Plugin&lt;br /&gt;
plugin.tx_extension.view.widget.Tx_Fluid_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = EXT:pfad/zum/Ordner/der/Templates/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit Namespaces (TYPO3 &amp;gt;= 6.x)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Zentral für alle Plugins&lt;br /&gt;
config.tx_extbase.view.widget.TYPO3\CMS\Fluid\ViewHelpers\Widget\PaginateViewHelper.templateRootPath = EXT:pfad/zum/Ordner/der/Templates/&lt;br /&gt;
&lt;br /&gt;
# Nur für ein bestimmtes Plugin&lt;br /&gt;
plugin.tx_extension.view.widget.TYPO3\CMS\Fluid\ViewHelpers\Widget\PaginateViewHelper.templateRootPath = EXT:pfad/zum/Ordner/der/Templates/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wichtig:&lt;br /&gt;
Bei den Templates ist es wichtig auf die richtige Ordnerstruktur zu achten! Hierzu kann man sich die Originalstruktur unter&lt;br /&gt;
typo3_src-x.x.x/typo3/sysext/fluid/Resources/Private/Templates/ViewHelpers&lt;br /&gt;
anschauen.&lt;br /&gt;
&lt;br /&gt;
=== Count - Objekte zählen ===&lt;br /&gt;
 &amp;lt;f:count subject=&amp;quot;{myObjects}&amp;quot; /&amp;gt;&lt;br /&gt;
oder in Inline Notation:&lt;br /&gt;
 {myObjects-&amp;gt;f:count()}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
http://itype3.blogspot.de/2013/03/fluid-template.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Unix Timestamps als Datum anzeigen====&lt;br /&gt;
 &amp;lt;f:format.date = format=&amp;quot;d.m.Y - H:i:s&amp;quot;&amp;gt;@1362784580&amp;lt;/f:format.date&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Text auf eine gewisse Länge abschneiden====&lt;br /&gt;
append wird dem abgekürztem Text am Ende eingefügt, wie z.B. ein Leerzeichen und drei Punkte um zu symbolisieren, dass der Text abgekürzt wurde.&lt;br /&gt;
 &amp;lt;f:format.corp maxCharacters=&amp;quot;50&amp;quot; append=&amp;quot;&amp;amp;nbsp; ...&amp;quot;&amp;gt;Hier folgt der TEXT&amp;lt;/f:format.corp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommentare in Fluid ==&lt;br /&gt;
Comment-View-Helper&lt;br /&gt;
&lt;br /&gt;
Man kann im Fluid-Template Kommentare hinterlassen, ohne dass diese im Frontend ausgegeben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:comment&amp;gt;&lt;br /&gt;
    Das ist ein Comment für den Entwickler, der im Quelltext&lt;br /&gt;
    im Gegensatz zum HTML-Comment nicht zu sehen ist&lt;br /&gt;
&amp;lt;/f:comment&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21218</id>
		<title>Formulare mit Extbase und Fluid</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Formulare_mit_Extbase_und_Fluid&amp;diff=21218"/>
		<updated>2015-10-08T11:12:54Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Input Feld */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Index.html&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
* Falls nicht vorhanden gewünschte Action registrieren (localconf) und im Controller anlegen&lt;br /&gt;
* Fluid Form erstellen&lt;br /&gt;
* Mit Absenden oder AJAC Call ausführen&lt;br /&gt;
=== Formular Felder im Fluid Template ===&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form&lt;br /&gt;
 http://wiki.typo3.org/Fluid#form_fields&lt;br /&gt;
==== Input Feld ====&lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;rmaType&amp;quot; /&amp;gt;&lt;br /&gt;
==== Textarea ====&lt;br /&gt;
 &amp;lt;f:form.textarea name=&amp;quot;myExtName[nachricht]&amp;quot; /&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
 &amp;lt;f:form.textarea property=&amp;quot;nachricht&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radio Buttons ====&lt;br /&gt;
 http://wiki.typo3.org/Fluid#f:form.radio&lt;br /&gt;
 http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Radio.html&lt;br /&gt;
&lt;br /&gt;
==== Form Tag (Action)====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;BestimmteFormAction&amp;quot; controller=&amp;quot;BestimmterControllerName&amp;quot; extension=&amp;quot;AndererExtensionName&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
Form-Felder&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form action=&amp;quot;create&amp;quot; object=&amp;quot;{newProject}&amp;quot;&amp;gt;&lt;br /&gt;
 Projektname: &amp;lt;f:form.textbox property=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;f:form.submit value=&amp;quot;Speichern&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Controller Attribut&amp;#039;&amp;#039;&amp;#039; benötigt man &amp;#039;&amp;#039;&amp;#039;nur dann, wenn der Controller der die Daten auswerten soll nicht zum aktuellen View gehört.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== Name Attribute ====&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;name-Attribut&amp;#039;&amp;#039;&amp;#039; wird automatisch für das Plugin passend umgewandelt.&lt;br /&gt;
 &amp;lt;f:form.textfield name=&amp;quot;myField&amp;quot; /&amp;gt; &lt;br /&gt;
wird zu &lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tx_registierung_pi1[myField]&amp;quot; /&amp;gt;&lt;br /&gt;
Sendet das Formular nun z.B. an einen Controller: showAction, stehen die Werte als Argumente zur Verfügung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public function showAction() {&lt;br /&gt;
  $args = $this-&amp;gt;request-&amp;gt;getArguments();&lt;br /&gt;
  echo $args[&amp;#039;myField];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model &amp;#039;&amp;#039;&amp;#039;validiert automatisch&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Zusätzliche Argumente im &amp;lt;f:link.action&amp;gt; View Helper ===&lt;br /&gt;
Standardmäßig sieht ein Action Link z.B. in der Listenansicht etwa so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;f:for each=&amp;quot;{dinge}&amp;quot; as=&amp;quot;ding&amp;quot;&amp;gt;                 &lt;br /&gt;
    &amp;lt;f:link.action action=&amp;quot;show&amp;quot; arguments=&amp;quot;{ding : ding}&amp;quot;&amp;gt;Los&amp;lt;/f:link.action&amp;gt;&lt;br /&gt;
&amp;lt;/f:for&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Es wird also ein ding-Objekt mit dem Bezeichner &amp;quot;ding&amp;quot; übergeben.&lt;br /&gt;
Möchte man weitere Argumente außer dem Objekt absetzen, z.B. ein String geht das so:&lt;br /&gt;
 arguments=&amp;quot;{ding : ding, key : &amp;#039;wert&amp;#039;}&amp;quot;&lt;br /&gt;
Es wird zusätzlich eine Variable key mit dem Wert &amp;#039;wert&amp;#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
Im Controller holt man sich den Wert wieder raus:&lt;br /&gt;
&lt;br /&gt;
Als Argument in der Controller Deklarierung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function showAction(\TYPO3\Extension\Domain\Model\Dinge $dinge, $key)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder im Controller selbst&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$key = $this-&amp;gt;request-&amp;gt;getArgument(&amp;#039;key&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dynamisch validieren je nach Auswahl ===&lt;br /&gt;
http://blog.teamgeist-medien.de/2015/05/typo3-extbase-dynamische-validierung-von-models-je-nach-formularauswahl.html&lt;br /&gt;
=== Typo3/Fluid: Verschiedene Models über ein Formular bedienen ===&lt;br /&gt;
Quelle: http://www.muenster-webdesign.net/blog/typo3fluid-verschiedene-models-ueber-ein-formular-bedienen/ (2015-03)&lt;br /&gt;
&lt;br /&gt;
Dank der form-ViewHelper lassen sich Formulare mittels Extbase/Fluid recht zügig umsetzen. Bei komplexeren Szenarien, bei denen in einem Formular mehrere verschiedene Models bedient werden sollen, stellt sich jedoch die Frage, wie sich dies umsetzen lässt.&lt;br /&gt;
&lt;br /&gt;
Die Lösung liegt darin, mit “namebased input”-Felder zu arbeiten. &amp;#039;&amp;#039;&amp;#039;Statt also wie üblich eine Eigenschaft im Fluid-Formular per “property”-Attribut an ein Objekt zu binden, definiert man stattdessen die Argumente “name” und “value” manuell.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel. Ein Formular ist per “object”-Attribut an ein Objekt “schornsteinfeger” gebunden. Soll im Formular nun gleichzeitig eine Eigenschaft “aussentemperatur” eines Objekts “wetter” bedient werden, könnte das Ganze etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;f:form method=&amp;quot;post&amp;quot; action=&amp;quot;create&amp;quot; name=&amp;quot;schornsteinfeger&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; object=&amp;quot;{schornsteinfeger}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;f:form.textbox name=&amp;quot;wetter[aussentemperatur]&amp;quot; value={wetter.aussentemperatur} /&amp;gt;&lt;br /&gt;
&amp;lt;/f:form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Felder validieren die nicht im Domain-Model vorhanden sind ===&lt;br /&gt;
Wenn man z.B. ein Captcha einbauen möchte braucht man Felder die nicht im Model sind. Die eingebauten Sicherheitsmechanismen in Extbase lassen dass aber nicht ohne weiteres zu. Hier wird ja automatisch jeder Wert mit dem Model abgeglichen.  &lt;br /&gt;
Möglichkeit 1 - Dummy Felder in das Model einbauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * CAPTCHA&lt;br /&gt;
 *&lt;br /&gt;
 * @var string&lt;br /&gt;
 * @validate NotEmpty, Tx_MyExt_Validation_Validator_CaptchaValidator&lt;br /&gt;
 */&lt;br /&gt;
protected $captcha;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Möglichkeit 2 - Validierer im Controller initialisieren&lt;br /&gt;
&lt;br /&gt;
http://blog.sebastiaandejonge.com/articles/2013/january/17/form-validation-of-non-domain-model-properties-with-extbase/&lt;br /&gt;
&lt;br /&gt;
=== Statische Optionen in Selectboxen ===&lt;br /&gt;
http://docs.typo3.org/typo3cms/ExtbaseGuide/stable/Fluid/BestPractice/OptionsForSelect.html&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen von Child Objekten (1:n Verbindung) ===&lt;br /&gt;
Quelle: http://snippets.in2code.de/index.php?id=273&amp;amp;tx_in2snippets_pi1%5Bsnippet%5D=74&amp;amp;tx_in2snippets_pi1%5Baction%5D=detail&amp;amp;tx_in2snippets_pi1%5Bcontroller%5D=Snippet&amp;amp;cHash=20bf6bed1ab88b5bd571fa8cc5aefd6b&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Snippet zum Speichern von 1:n relations in dynamisch erzeugten Formularen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Erklärung unter Verwendung der folgenden Problemstellung:&lt;br /&gt;
&lt;br /&gt;
Es sind die folgenden Objekte vorhanden:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Mutter&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Kind&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Eine Mutter hat mehrere Kinder, diese werden in Extbase in einer Object Storage gespeichert.&lt;br /&gt;
Wenn man ein neues Kind hinzufügen will, wäre der Standardweg die newAction im ChildController aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Da man aber das Kind in dem Formular der Mutter &amp;#039;erzeugen&amp;#039; will, muss man entweder dem Formular ein neues Kind von Haus aus mitgeben (hiervon wird dringend abgeraten!) oder die Formularfelder für das Kind dynamisch erzeugen (javascript ftw).&lt;br /&gt;
&lt;br /&gt;
Fluid kennt das Objekt ObjectStorage und kann über den path syntax auch damit umgehen &lt;br /&gt;
 &amp;lt;f:form.textfield property=&amp;quot;mother.children.0.firstName&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; der Vorname des ersten Kindes der Mutter.&lt;br /&gt;
&lt;br /&gt;
Schickt man das Formular so ab, bekommt man jedoch die Fehlermeldung, dass man &lt;br /&gt;
&lt;br /&gt;
a) properties nicht mappen darf und/oder &lt;br /&gt;
&lt;br /&gt;
b) dass das erzeugen neuer Objekte nicht erlaubt ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Der Core stellt dazu Methoden bereit&amp;#039;&amp;#039;&amp;#039;, die jedoch in keiner/keinem Docu/Manual auftauchen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes benötigt man eine &amp;#039;&amp;#039;&amp;#039;initialize&amp;lt;method&amp;gt;Action&amp;#039;&amp;#039;&amp;#039;, in diesem Fall:&lt;br /&gt;
&lt;br /&gt;
 protected function initializeUpdateAction() { ... }&lt;br /&gt;
&lt;br /&gt;
diese &amp;#039;&amp;#039;&amp;#039;wird vor der eigentlichen Methode aufgerufen&amp;#039;&amp;#039;&amp;#039; (updateAction) (Convention!). &lt;br /&gt;
Das ermöglich einem die PropertyMappingConfiguration anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die PropertyMappingConfiguration ist erstmal leer. Also baut man sich eine neue, die dann direkt injected wird :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function initializeUpdateAction() {	&lt;br /&gt;
  $mvcPropertyMappingConfiguration = \TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationBuilder::build(&lt;br /&gt;
     &amp;#039;TYPO3\\CMS\\Extbase\\Mvc\\Controller\\MvcPropertyMappingConfiguration&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
  $this-&amp;gt;arguments-&amp;gt;getArgument(&amp;#039;mother&amp;#039;)-&amp;gt;injectPropertyMappingConfiguration($mvcPropertyMappingConfiguration);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen die property-mapping-Einstellungen gemacht werden.&lt;br /&gt;
Extbase ist so aufgebaut, dass man Objekte nur über von Fluid erstellte Formulare ändern kann (trustedPropertiesToken). Dies verhindert genau das, was man hier erreichen möchte. Ein Objekt mit dynamisch erzeugten Formularfeldern verändern oder erzeugen. Geblockt ist die Funktion übrigens aus Sicherheitsgründen.&lt;br /&gt;
&lt;br /&gt;
Um das hinzufügen und erstellen neuer Objekte zuzulassen, gibt es mehrere Methoden in der PropertyMappingConfiguration:&lt;br /&gt;
&lt;br /&gt;
 1) allowAllProperties()&lt;br /&gt;
 2) allowAllPropertiesExcept(&amp;lt;string&amp;gt;)&lt;br /&gt;
 3) allowProperties(&amp;lt;csv-string&amp;gt;)&lt;br /&gt;
 4) allowCreationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
 5) allowModificationForSubProperty(&amp;lt;string&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Das tollste Feature dieser Methoden ist wohl, dass sie den Fluid path-syntax UND wildcards (&amp;#039;*&amp;#039;) unterstützen. Desweiteren bietet die Methode forProperty() den Zugriff auf tiefere Eigenschaften. Um also Kinder der Mutter hinzufügen zu dürfen, muss man das Extbase mit &lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowAllProperties();$propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;allowCreationForSubProperty(&amp;#039;*&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
klar machen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
allowAllProperties() gewährt einem dabei grundlegenden Zugriff auf die Eigenschaft children des Objekts und allowCreationForSubProperty(&amp;#039;*&amp;#039;) ermöglicht es, beliebig viele Kinder anzulegen. Das Wildcard ersetzt hierbei die Zahl im Fluid path-syntax.&lt;br /&gt;
&lt;br /&gt;
Damit man den Kindern noch Vornamen und Geburtstag (uv.m.) geben kann, muss man diese Eigenschaften noch &amp;#039;freischalten&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowAllProperties();&lt;br /&gt;
&lt;br /&gt;
Natürlich kann man auch den Zugriff auf bestimmte Eigenschaften beschränken:&lt;br /&gt;
&lt;br /&gt;
 $propertyMappingConfiguration-&amp;gt;forProperty(&amp;#039;children&amp;#039;)-&amp;gt;forProperty(&amp;#039;*&amp;#039;)-&amp;gt;allowProperties(&amp;#039;firstname&amp;#039;,&amp;#039;birthday&amp;#039;,&amp;#039;birthplace&amp;#039;,&amp;#039;custody&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Nun gilt es noch zu beachten:&lt;br /&gt;
&lt;br /&gt;
Wenn die ObjectStorage einmal befüllt ist und ein neues Objekt hinzugefügt werden soll, müssen alle bisherigen Objekte erneut mitgegeben werden, sonst wird die Verbindung zu den alten Objekten gelöscht!&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21217</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21217"/>
		<updated>2015-10-08T11:08:31Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Model / Fields Dokumentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21216</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21216"/>
		<updated>2015-10-08T11:06:52Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Model / Fields Dokumentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21215</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21215"/>
		<updated>2015-10-08T11:04:38Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Model / Fields Dokumentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
Beispiel Array einer RMA mit untergeordneten Models für Metadevice, Device, DeviceClass, DeviceFamily&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  _localizedUid =&amp;gt; 2 (integer)modified&lt;br /&gt;
                  _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
                  _versionedUid =&amp;gt; 2 (integer)modified&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  _localizedUid =&amp;gt; 1 (integer)modified&lt;br /&gt;
                  _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
                  _versionedUid =&amp;gt; 1 (integer)modified&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               _localizedUid =&amp;gt; 3 (integer)modified&lt;br /&gt;
               _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
               _versionedUid =&amp;gt; 3 (integer)modified&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            _localizedUid =&amp;gt; 12 (integer)modified&lt;br /&gt;
            _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
            _versionedUid =&amp;gt; 12 (integer)modified&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
         0000000002d804820000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=13, pid=53)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      _localizedUid =&amp;gt; 11 (integer)modified&lt;br /&gt;
      _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
      _versionedUid =&amp;gt; 11 (integer)modified&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21214</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21214"/>
		<updated>2015-10-08T11:00:53Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;br /&gt;
&lt;br /&gt;
=== Model / Fields Dokumentation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
array(rma =&amp;gt; Geobit\Gbrma\Domain\Model\Rmaprototypepersistent entity (uid=11, pid=53)&lt;br /&gt;
      rmaNumber =&amp;gt; &amp;#039;8&amp;#039; (1 chars)&lt;br /&gt;
      rmaType =&amp;gt; 1 (integer)&lt;br /&gt;
      locked =&amp;gt; 0 (integer)&lt;br /&gt;
      state =&amp;gt; 0 (integer)&lt;br /&gt;
      orderExpress =&amp;gt; 0 (integer)&lt;br /&gt;
      additionalInformation =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
      metadevice =&amp;gt; TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)&lt;br /&gt;
         0000000002d804830000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=12, pid=53)&lt;br /&gt;
            serial =&amp;gt; &amp;#039;aewtqwer&amp;#039; (8 chars)&lt;br /&gt;
            description =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
            jsondata =&amp;gt; &amp;#039;{&amp;quot;none&amp;quot;:&amp;quot;1&amp;quot;}&amp;#039; (12 chars)&lt;br /&gt;
            serviceRepair =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceCalibration =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceModification =&amp;gt; 0 (integer)&lt;br /&gt;
            serviceNone =&amp;gt; 1 (integer)&lt;br /&gt;
            device =&amp;gt; Geobit\Gbdevices\Domain\Model\Deviceprototypepersistent entity (uid=3, pid=49)&lt;br /&gt;
               deviceTitle =&amp;gt; &amp;#039;2138/01 EMD-100&amp;#039; (15 chars)&lt;br /&gt;
               deviceDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
               deviceType =&amp;gt; 1 (integer)&lt;br /&gt;
               isBaseDevice =&amp;gt; FALSE&lt;br /&gt;
               accPossible =&amp;gt; FALSE&lt;br /&gt;
               repairDiscontinued =&amp;gt; TRUE&lt;br /&gt;
               modification =&amp;gt; 0 (integer)&lt;br /&gt;
               deviceImage =&amp;gt; NULL&lt;br /&gt;
               deviceClass =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceClassprototypepersistent entity (uid=2, pid=49)&lt;br /&gt;
                  classTitle =&amp;gt; &amp;#039;EMD Series&amp;#039; (10 chars)&lt;br /&gt;
                  classDescription =&amp;gt; &amp;#039;&amp;#039; (0 chars)&lt;br /&gt;
                  classFamily =&amp;gt; 0 (integer)&lt;br /&gt;
                  accPossible =&amp;gt; FALSE&lt;br /&gt;
                  uid =&amp;gt; 2 (integer)&lt;br /&gt;
                  _localizedUid =&amp;gt; 2 (integer)modified&lt;br /&gt;
                  _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
                  _versionedUid =&amp;gt; 2 (integer)modified&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               deviceFamily =&amp;gt; Geobit\Gbdevices\Domain\Model\DeviceFamilyprototypepersistent entity (uid=1, pid=49)&lt;br /&gt;
                  familyTitle =&amp;gt; &amp;#039;Safety&amp;#039; (6 chars)&lt;br /&gt;
                  familyDescription =&amp;gt; &amp;#039;NARDA Safety Product Family&amp;#039; (27 chars)&lt;br /&gt;
                  familyFegroupAccess =&amp;gt; 2 (integer)&lt;br /&gt;
                  uid =&amp;gt; 1 (integer)&lt;br /&gt;
                  _localizedUid =&amp;gt; 1 (integer)modified&lt;br /&gt;
                  _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
                  _versionedUid =&amp;gt; 1 (integer)modified&lt;br /&gt;
                  pid =&amp;gt; 49 (integer)&lt;br /&gt;
               uid =&amp;gt; 3 (integer)&lt;br /&gt;
               _localizedUid =&amp;gt; 3 (integer)modified&lt;br /&gt;
               _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
               _versionedUid =&amp;gt; 3 (integer)modified&lt;br /&gt;
               pid =&amp;gt; 49 (integer)&lt;br /&gt;
            uid =&amp;gt; 12 (integer)&lt;br /&gt;
            _localizedUid =&amp;gt; 12 (integer)modified&lt;br /&gt;
            _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
            _versionedUid =&amp;gt; 12 (integer)modified&lt;br /&gt;
            pid =&amp;gt; 53 (integer)&lt;br /&gt;
         0000000002d804820000000151a56f69 =&amp;gt; Geobit\Gbrma\Domain\Model\Metadeviceprototypepersistent entity (uid=13, pid=53)&lt;br /&gt;
      rmaUser =&amp;gt; 1 (integer)&lt;br /&gt;
      crdate =&amp;gt; 1443778492 (integer)&lt;br /&gt;
      tstamp =&amp;gt; 1443783879 (integer)&lt;br /&gt;
      uid =&amp;gt; 11 (integer)&lt;br /&gt;
      _localizedUid =&amp;gt; 11 (integer)modified&lt;br /&gt;
      _languageUid =&amp;gt; 0 (integer)modified&lt;br /&gt;
      _versionedUid =&amp;gt; 11 (integer)modified&lt;br /&gt;
      pid =&amp;gt; 53 (integer)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21213</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21213"/>
		<updated>2015-10-07T13:37:53Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Family Access ===&lt;br /&gt;
 restrictFamilyAccessToFegroups = 1&lt;br /&gt;
Wenn dieser Wert im Setup gesetzt wird, dann kann der Benutzer nur noch bestimmte Gerätefamilien für RMAs auswählen. Wenn es nicht gesetzt ist können die Benutzer alle Familien nutzen.&lt;br /&gt;
&lt;br /&gt;
Durch die Installation von gbrma wird gbdevices um ein Feld erweitert. &lt;br /&gt;
* GB Devices -&amp;gt; Familie auswählen und Benutzergruppe im Feld Allowed FE-User Group setzen&lt;br /&gt;
* Dem FE User diese Gruppe zuordnen.&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21212</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21212"/>
		<updated>2015-10-07T13:27:28Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* TS Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 &lt;br /&gt;
// Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe stehen Geräten dieser Familie für RMAs zur Verfügung&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21211</id>
		<title>Dokumentation gbrma</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Dokumentation_gbrma&amp;diff=21211"/>
		<updated>2015-10-07T13:26:41Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: Die Seite wurde neu angelegt: „== Einrichtung == === TS Configuration === Konstanten &amp;lt;pre&amp;gt; plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma plugin.tx_gbr…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einrichtung ==&lt;br /&gt;
=== TS Configuration ===&lt;br /&gt;
Konstanten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbdevices.persistence.storagePid = 49 # gbdevices wird benötigt für gbrma&lt;br /&gt;
plugin.tx_gbrma.persistence.storagePid = 49 # Speicherort der RMA Daten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
senderMail = test@example.com&lt;br /&gt;
senderMailName = Test Mailer&lt;br /&gt;
adminMail = email@example.com&lt;br /&gt;
adminMailName = Test Admin&lt;br /&gt;
mailSubject = RMA Request&lt;br /&gt;
superuserId = 1&lt;br /&gt;
nbmClassId = 7&lt;br /&gt;
nbm520Id = 104&lt;br /&gt;
nbm550Id = 103&lt;br /&gt;
multipleBaseDevicesAllowedClassIds = &lt;br /&gt;
restrictFamilyAccessToFegroups = 0 // Wenn an dann muß die Familie einer Usergruppe zugeordnet sein. Nur User dieser Gruppe können Geräte dieser Familie bearbeiten.&lt;br /&gt;
#pdf_css = EXT:gbrma/Resources/Public/Css/pdf.css // Not used&lt;br /&gt;
#pdf_html = EXT:gbrma/Resources/Private/Templates/Pdf/pdf.html // Not used&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21210</id>
		<title>Narda</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Narda&amp;diff=21210"/>
		<updated>2015-10-07T13:19:36Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.84: /* Dokumentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Überblick ==&lt;br /&gt;
RMA und ACC liegen auf Geo-bit Server und sind per iFrame eingebunden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=rep_cal&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/RMA/rma_select_01.php?req_art=warranty&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;940&amp;quot; height=&amp;quot;1000&amp;quot; src=&amp;quot;/1/acc-2/login.php&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
direkt erreichbar über:&lt;br /&gt;
&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/RMA/rma_select_01.php?req_art=warranty&lt;br /&gt;
 http://narda-sts.com.w00eb738.kasserver.com/1/acc-2/login.php&lt;br /&gt;
&lt;br /&gt;
== TYPO3 RMA Extension ==&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
Narda RMA Prozess [[Dokumentation gbrma]]&lt;br /&gt;
&lt;br /&gt;
=== Zus. Leistungen ===&lt;br /&gt;
&lt;br /&gt;
Mail an Admin 6h / Mailtemplates&lt;br /&gt;
pdf Generierung &lt;br /&gt;
Vorfilterung nach Geräteklasse + Auswahlkontrolle&lt;br /&gt;
Admin Ansicht benötigt ???&lt;br /&gt;
Zusätzliche States&lt;br /&gt;
Geräteliste zum Aufklappen ab 5 Zeilen&lt;br /&gt;
Templatevarianten für&lt;br /&gt;
SRM / IDA&lt;br /&gt;
NBM&lt;br /&gt;
Detailansicht für beendete RMA&lt;br /&gt;
Express Calibration&lt;br /&gt;
fpdf Integration für acc&lt;br /&gt;
Bespr. Narda 2h&lt;br /&gt;
Setting up Testing Area&lt;br /&gt;
Klassen müssen ebenfalls einer Familie zugeordnet werden&lt;br /&gt;
Checkboxen (calib, mod/upgr., repair, no service, nur dann anzeigen, wenn sinnvoll&lt;br /&gt;
Checkboxen komplett weg für ACC&lt;br /&gt;
Regel für mehrere Basedevices erlaubt (Radman)&lt;br /&gt;
Clientnr. in fe_user&lt;br /&gt;
Zeige Rmas by Client nr.&lt;br /&gt;
Modification ausblenden wenn keine vorhanden&lt;br /&gt;
Auslagerung von Texten in Lokalisierungstextfiles&lt;br /&gt;
Möglichkeit zur Auswahl von Texten je nach Geräteklasse&lt;br /&gt;
Erklärungstexte für Status&lt;br /&gt;
ACC Filterung auf Geräteklassenebene&lt;br /&gt;
Mail an Admin bei Delete&lt;br /&gt;
Mapping des ERP Exports und checken der RMAs&lt;br /&gt;
Test Scheduler einrichten&lt;br /&gt;
&lt;br /&gt;
=== Änderungen ===&lt;br /&gt;
* Fehler beim &amp;#039;&amp;#039;&amp;#039;Import&amp;#039;&amp;#039;&amp;#039; wenn Leerzeilen enthalten - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: Statt RMA Date immer &amp;#039;&amp;#039;&amp;#039;Datum der letzten Status aktualisierung&amp;#039;&amp;#039;&amp;#039;. 1. Angelegt in T3 2. Datum der letzten Bearbeitung aus ERP Datei - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Model erweitern (tstamp) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Templates auf tstamp statt cdate - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Anpassen im Code - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: &amp;#039;&amp;#039;&amp;#039;Datatables&amp;#039;&amp;#039;&amp;#039; Skript für Listenansicht - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validierungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Keine Beschreibung bei Repair eingegeben - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Kein Service Request gewählt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Inspection Repair und No Service nicht gemeinsam anwählbar - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Repair dann keine Kalibrierung (ist beinhaltet) -&amp;gt; Änderung Calib und Repair möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** F: Wenn Kalibrierung dann kein Repair -&amp;gt; ist doch möglich - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* F: Am Ende Auswahlfeld Expresskalibrierung aber nur wenn Kalibrierung ausgewählt ist + Textfeld (Additional information), &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispielbilder&amp;#039;&amp;#039;&amp;#039; &amp;quot;Wo finde ich die Seriennummer&amp;quot; in Add Metadevice&lt;br /&gt;
* Bug: Add Main Device, Add 2.Device, Zurück auf Main Device Tab =&amp;gt; &amp;#039;&amp;#039;&amp;#039;Tabs&amp;#039;&amp;#039;&amp;#039; werden nicht mehr richtig dargestellt - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nichtssagende &amp;#039;&amp;#039;&amp;#039;Fehlermeldung&amp;#039;&amp;#039;&amp;#039; in AddMetadevice wenn die Validierung scheitert (Seite wird erneut angezeigt) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Feature: NewFormFields soll Auswahl für Acc nur anbieten wenn Userrecht vorliegt (Safety)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Doku&amp;#039;&amp;#039;&amp;#039; -&amp;gt; z.T. aus E-Mails übernehmen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehlermeldungen von Extbase&amp;#039;&amp;#039;&amp;#039; verhindern bei Browserbedienung (vor und zurück Buttons)&lt;br /&gt;
** Wenn &amp;#039;&amp;#039;&amp;#039;RMA nicht vorhanden&amp;#039;&amp;#039;&amp;#039; (z.B. gelöscht) dann aussagekräftige Fehlermeldung)&lt;br /&gt;
* Feature: &amp;#039;&amp;#039;&amp;#039;RMA gelöscht Mail&amp;#039;&amp;#039;&amp;#039; nur dann wenn Status 2 erreicht (also wenn schon eine Info bei Narda ankam) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA Nummern&amp;#039;&amp;#039;&amp;#039; werden nur als gelöscht markiert bzw. eine Nummer wird nie mehrfach vergeben. - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;PDF&amp;#039;&amp;#039;&amp;#039; muß auch an Kunden (FE-User) gesendet werden - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RMA löschen Bestätigung&amp;#039;&amp;#039;&amp;#039; (JS) - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* SRM Auswahl der Geräte -&amp;gt; richtige Tabs aktiv -&amp;gt; bei SRM 3 Tabs &amp;quot;rf-cable&amp;quot; - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* E-Mail RMA Type weg, RMA Prominent oben, evtl. im Betreff - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zuerst Device Title dann SN - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Umbenennungen&lt;br /&gt;
** Express Order -&amp;gt; Express Calibration Service - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Factory Calibration / Repair -&amp;gt; ohne Warranty Request - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Modification Texte 5 und 6 - &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Internet Präsenz Narda ==&lt;br /&gt;
&lt;br /&gt;
Mischung aus verschiedenen Systemen&lt;br /&gt;
&lt;br /&gt;
Hauptdomain: www.narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Content Management System ===&lt;br /&gt;
Frontend ist TYPO3 allerdings werden einige Download-Listen über ein php-Skript generiert.&lt;br /&gt;
Diese Inhalte werden über ein eigenes Tool realisiert.&lt;br /&gt;
&lt;br /&gt;
=== FTP-Zugänge ===&lt;br /&gt;
&lt;br /&gt;
Die Seite würd über vodafone gehostet. Vodafone der Zugriff erfolgt Zentral über&lt;br /&gt;
ftp.vodafone-ip.de&lt;br /&gt;
&lt;br /&gt;
Im Admin Bereich von Vodafone kann man FTP Benutzer anlegen.&lt;br /&gt;
Der Zugriff erfolgt dann über [benutzername]%[domainname]&lt;br /&gt;
Also z.B. aszwei%narda-sts.de&lt;br /&gt;
&lt;br /&gt;
=== Server Verwaltung ===&lt;br /&gt;
Hier kann man FTP Zugänge anlegen, auf phpMyAdmin zugreifen etc.&lt;br /&gt;
Login unter: https://webadmin.arcor.net/Secure/&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
Direkt zu erreichen unter:&lt;br /&gt;
&lt;br /&gt;
== Eigenes Admin System ==&lt;br /&gt;
Zur Verwaltung von downloads, etc.&lt;br /&gt;
http://www.narda-sts.de/admin/&lt;br /&gt;
&lt;br /&gt;
Greift auf eine separate Datenbank zu, in der die Daten abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Anpassen eines Software Downloads ====&lt;br /&gt;
Um einen Download anzupassen spielt man die Datei per FTP unterhalb des Verzeichnisses&lt;br /&gt;
/download/software/&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man das Admin Tool und geht in den Menüpunkt&lt;br /&gt;
SoftwareUpdate (beta)&lt;br /&gt;
Dort kann man die Release Nummer anpassen (z.B. 2011) und aus dem Dropdownfeld die passende Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Anlegen eines neuen Downloads ====&lt;br /&gt;
Hierbei muß man beachten daß in TYPO3 ein php Schnipsel eingebunden wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  include(&amp;quot;fileadmin/user_upload/scripts/db_func.inc&amp;quot;);&lt;br /&gt;
  print (get_software_information(&amp;quot;EFC_HF_Demo_EN&amp;quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gibt einen Download Block inkl. Link und Beschreibung aus.&lt;br /&gt;
Wobei als Parameter der Name im Datenbankfeld re_call übergeben wird. Dieser wird beim Anlegen der Software manuell Vergeben&lt;br /&gt;
&lt;br /&gt;
== Sales Partner Extranet ==&lt;br /&gt;
www.narda-sts.de/sp (oder /vp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RMA Garantie und Rücklaufgeräte ==&lt;br /&gt;
Dies wird über Vertragspartner erledigt, und es gibt ein weiteres Tool. Der User holt sich ein RMA Ticket (Online Formular) Je nach Region wird dann an den Vertriebspartner eine E-Mail versendet. Außerdem an Narda. &lt;br /&gt;
&lt;br /&gt;
Auf dem Serverl liegt es im Ordner /1/RMA/&lt;br /&gt;
&lt;br /&gt;
Im Quelltext sind auch etliche E-Mail Adressen hinterlegt die auf Mails zu Aichele und dem Programmierer hinweisen. Das müßte mal ausgemistet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontaktdaten der Vertriebspartner ===&lt;br /&gt;
Diese sind in der Datenbank in der Tabelle &amp;#039;&amp;#039;&amp;#039; rma_requests&amp;#039;&amp;#039;&amp;#039; hinterlegt.&lt;br /&gt;
Es gibt auch eine Tabelle Vertriebspartner. Ist aber nicht ganz klar wann diese benutzt werden.&lt;br /&gt;
Ich habe noch kein Administrationstool gefunden. Die Änderung kann aber direkt in der Datenbank erfolgen.&lt;br /&gt;
 &lt;br /&gt;
Edit:&lt;br /&gt;
&lt;br /&gt;
Vertriebspartner in der Tabelle vertriebspartner werden vom RMA Prozess Tool (und vom neuen acc Tool) genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem eine Ausgabe der Vertriebspartner Adressen. Dabei werden über das Admin Tool (Narda Tool -&amp;gt; Partner Update) html Dateien geschrieben, die dann im Typo eingebunden sind. (Total umständlich). Es wird die Tabelle ??? genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise technische Realisierung (PHP-Skripte) ===&lt;br /&gt;
Siehe MindMap&lt;br /&gt;
&lt;br /&gt;
Einstieg für den RMA Prozess ist der Link:&lt;br /&gt;
&lt;br /&gt;
 http://www.narda-sts.de/1/RMA/rma_select_01.php?req_art=rep_cal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Schritt wird die Länderauswahl angezeigt und die Art der Anfrege übergeben.&lt;br /&gt;
Nach der Länderauswahl sieht der link dann ungefähr so aus:&lt;br /&gt;
&lt;br /&gt;
https://ssl.arcor-secure.de/narda-sts.de/1/RMA/rma_persData_02.php?req_art=rep_cal&amp;amp;req_id=P20110214_gF164223&amp;amp;req_reg=2&lt;br /&gt;
&lt;br /&gt;
Es wird also eine req_id und req_reg Übergeben. Und die Persönlichen Daten abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RMA/rma_reCall.php&lt;br /&gt;
&lt;br /&gt;
== ACC Prozess ==&lt;br /&gt;
Für den ACC (Accredited Callbration) wurde das Tool komplett überarbeitet und entschlackt. Im Moment läuft es nicht auf dem Narda Server, sondern auf dem Geo-bit Server.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Datenbank ===&lt;br /&gt;
Die Partner sind hier in der Tabelle Vertriebspartner hinterlegt. Sie Loggen sich mit ihrer ID und einem Passwort ein. Die Tabelle wurde ursprünglich kopiert und um einige Felder erweitert. &lt;br /&gt;
&lt;br /&gt;
Es können sich nur Partner anmelden die im Feld&lt;br /&gt;
&lt;br /&gt;
== Weitere Skripte ==&lt;br /&gt;
&lt;br /&gt;
Es sind einige weitere Skripte im Einsatz:&lt;br /&gt;
&lt;br /&gt;
=== Funktionsübersicht von Produkten ===&lt;br /&gt;
/doc/fileadmin/user_upload/scripts/func_overview.inc.php&lt;br /&gt;
&lt;br /&gt;
Wird in Typo3 so aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 include(&amp;quot;fileadmin/user_upload/scripts/func_overview.inc.php&amp;quot;);&lt;br /&gt;
  $config_file = &amp;quot;typo3conf/localconf.php&amp;quot;;&lt;br /&gt;
  $image_path = &amp;quot;fileadmin/user_upload/products/personal_protection&amp;quot;;&lt;br /&gt;
  $page_id = 70; // ID DER UEBERGEORDNETEN SEITE&lt;br /&gt;
  print get_overview($page_id,$image_path,&amp;quot;Personal Monitor&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktion:&lt;br /&gt;
&lt;br /&gt;
* Liest die aktuelle Sprache aus dem L Parameter oder der RealURL Adresse&lt;br /&gt;
* Liest die pid der untergeordneten Seiten aus.&lt;br /&gt;
&lt;br /&gt;
=== Mailfunktion RMA / ACC ===&lt;br /&gt;
==== RMA ====&lt;br /&gt;
Es werden mehrere Mails generiert. &lt;br /&gt;
&lt;br /&gt;
1. Schritt User Registrierung =&amp;gt; Mail mit dem Ticket. Dieses enthält einen Link. Für die Geräteeingabe&lt;br /&gt;
Mailversand in &amp;#039;&amp;#039;&amp;#039;rma_persData_02.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2. Schritt Versand der RMA Daten&lt;br /&gt;
 $html_mail_versand = send_html_mail($req_number,$req_ident_number,$req_art);&lt;br /&gt;
kommt aus &amp;#039;&amp;#039;&amp;#039;mail_html_function.inc.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== ACC ====&lt;br /&gt;
Das Formular zur Eingabe liegt in &amp;#039;&amp;#039;&amp;#039;acc_form.ph&amp;#039;&amp;#039;&amp;#039;p Nach Absenden wird &amp;#039;&amp;#039;&amp;#039;acc_form_send.php&amp;#039;&amp;#039;&amp;#039; aufgerufen. In diesem wird die Mail über die Funktion &lt;br /&gt;
 $success = send_acc_mail($rma_num,$arrForm,$arrPartner); &lt;br /&gt;
versendet. Die Funktion wird in &amp;#039;&amp;#039;&amp;#039;lib/acal_functions.php&amp;#039;&amp;#039;&amp;#039; zur Verfügung gestellt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORMULAR        MAILVERSAND / FEEDBACK&lt;br /&gt;
acc_form.php -&amp;gt; acc_form_send.php        &amp;lt;- includes acal_functions.php (send_acc_mail)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.84</name></author>
	</entry>
</feed>