Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:create:functions:buttontopage [21.07.2016 23:27] – Mehrsprachige Beschriftung adminde:create:functions:buttontopage [17.03.2021 10:27] admin
Zeile 18: Zeile 18:
  
  
-===== Beispiel 1 =====+===== Mehrere Seiten zurück springen =====
  
 Der Teilnehmer soll die Möglichkeit haben, zu einer früheren Seite zu springen. Der Teilnehmer soll die Möglichkeit haben, zu einer früheren Seite zu springen.
Zeile 37: Zeile 37:
  
  
-===== Beispiel 2 =====+===== Einfache Navigation =====
  
 Der Teilnehmer soll während der gesamten Befragung die Möglichkeit haben, zu zwei bestimmten Seiten im Fragebogen zu springen. Der Teilnehmer soll während der gesamten Befragung die Möglichkeit haben, zu zwei bestimmten Seiten im Fragebogen zu springen.
Zeile 63: Zeile 63:
  
  
-===== Beispiel 3 =====+===== Bearbeiten früherer Abschnitte =====
  
 Wieder sollen im Layout mehrere Knöpfe angeboten werden, um innerhalb des Fragebogens zu navigieren. Allerdings soll ein Sprung nur zu den Kapiteln erlaubt sein, welche der Teilnehmer bereits regulär erreicht hat. Wieder sollen im Layout mehrere Knöpfe angeboten werden, um innerhalb des Fragebogens zu navigieren. Allerdings soll ein Sprung nur zu den Kapiteln erlaubt sein, welche der Teilnehmer bereits regulär erreicht hat.
Zeile 69: Zeile 69:
 Geben Sie den Seiten, auf welchen die Kapitel beginnen, eindeutige Seiten-Kennungen, z.B. "chapter1" bis "chapter4". Geben Sie den Seiten, auf welchen die Kapitel beginnen, eindeutige Seiten-Kennungen, z.B. "chapter1" bis "chapter4".
  
-Initialisieren Sie mit folgendem PHP-Code Platzhalter für alle Knöpfe (z.B. "%btnC1%" bis "%btnC5%"):+Initialisieren Sie mit folgendem PHP-Code Platzhalter für alle Knöpfe (z.B. "%btnC1%" bis "%btnC5%"). Der IF-Filter mit ''[[:de:create:functions:getroute]]'' stellt sicher, dass die Knöpfe für einmal erreichte Kapitel auch dann erhalten bleiben, wenn der Teilnehmer die erste Seite erneut aufruft.
  
 <code php> <code php>
-replace('%btnC1%', ''); +if (getRoute() == 'start') { 
-replace('%btnC2%', ''); +  replace('%btnC1%', ''); 
-replace('%btnC3%', ''); +  replace('%btnC2%', ''); 
-replace('%btnC4%', ''); +  replace('%btnC3%', ''); 
-replace('%btnC5%', '');+  replace('%btnC4%', ''); 
 +  replace('%btnC5%', ''); 
 +}
 </code> </code>
  
Zeile 107: Zeile 109:
  
  
-===== Beispiel: Mehrsprachige Beschriftung =====+===== Nicht-lineares Ausfüllen ===== 
 + 
 +Der Fragebogen soll nicht (unbedingt) linear bearbeitet werden? Mit ''buttonToPage()'' lässt sich auch eine umfangreiche Navigation realisieren. 
 + 
 +Als Vorbereitung geben Sie allen Seiten, auf denen ein Abschnitt beginnt, unter **Fragebogen zusammenstellen** eine [[de:glossary#seitenkennung|Seiten-Kennung]] und tragen Sie als Kommentar für die Seite einen Titel für den Abschnitt ein, wie er in der Navigation erscheinen soll. 
 + 
 +Es gibt zwei Möglichkeiten, die Navigation auf allen Seiten anzuzeigen: 
 + 
 +  - Verwenden Sie Platzhalter und verwenden Sie diese direkt im **Fragebogen-Layout** -> //HTML-Vorlage// vor dem Platzhalter ''%questionnaire%'' -- dann muss der PHP-Code mit ''buttonToPage()'' nur einmal auf der ersten Seite des Fragebogens platziert werden, aber die aktuelle Seite kann bei dieser Lösung nicht farblich hervorgehoben werden. 
 +  - Platzieren Sie den PHP-Code für die Navigation auf jeder Seite des Fragebogens, z.B. oben auf jeder Seite. Nachfolgend ein Beispiel, wie der PHP-Code dafür aussehen könnte: 
 + 
 +<code php> 
 +html( 
 +  // Ein <div> sorgt für die optische Abgrenzung zwischen Navigation und Seiteninhalt 
 +  '<div style="border: 2px solid #CCCCCC; border-left: 0 none; border-right: 0 none; padding: 20px 0 12px 0; margin-bottom: 3em;">'
 +  // Ein weiteres <div> erlaubt die flexible Anordnung der Navigations-Schaltflächen 
 +  '<div class="s2flex navButtons" style="flex-wrap: wrap; margin-right: -8px">'.NL. 
 +  buttonToPage('start'). 
 +  buttonToPage('kontakt'). 
 +  buttonToPage('studium'). 
 +  buttonToPage('leistungen'). 
 +  buttonToPage('dokumente'). 
 +  buttonToPage('notizen'). 
 +  '<div style="width: 2em;"></div>'
 +  buttonToPage('abschicken'). 
 +  '</div>'
 +  '</div>' 
 +); 
 +</code> 
 + 
 +Möchte man die Knöpfe noch ein wenig ansprechender gestalten, kann man im **Fragebogen-Layout** in der //HTML-Vorlage// im ''<style>''-Bereich noch ein wenig CSS-Code ergänzen: 
 + 
 +<code css> 
 +div.navButtons button { 
 +  border: 2px solid %color.4%; 
 +  border-radius: 5px; 
 +  padding: 7px 6px; 
 +  margin-bottom: 8px; 
 +  flex-grow: 1; 
 +  margin-right: 8px; 
 +
 +div.navButtons button.currentPage { 
 +  background-color: %color.4%; 
 +  colorwhite; 
 +
 +</code> 
 + 
 + 
 +===== Mehrsprachige Beschriftung =====
  
 In einem mehrsprachigen Fragebogen ([[:de:create:multilang]]) müssen die Beschriftungen der Knöpfe je nach Sprachversion angepasst werden. Dafür kann dem zweiten Parameter ein Array übergeben werden. In einem mehrsprachigen Fragebogen ([[:de:create:multilang]]) müssen die Beschriftungen der Knöpfe je nach Sprachversion angepasst werden. Dafür kann dem zweiten Parameter ein Array übergeben werden.
Zeile 145: Zeile 195:
 ); );
 </code> </code>
 +
 +
 +===== JavaScript =====
 +
 +Die Funktion ''buttonToPage()'' liefert einen Knopf, dessen aussehen mittels CSS auch angepasst werden kann. Aber im Prinzip ist auch möglich, das Verhalten mit anderen HTML-Elementen zu verknpüfen.
 +
 +Damit der Fragebogen den Sprungbefehl entgegennimmt, muss der ''buttonToPage()'' Befehl zunächst einmal mit dem gewünschten Sprungziel aufgerufen werden.
 +
 +<code php>
 +buttonToPage('pageID');
 +</code>
 +
 +Weiterhin ist eine JavaScript-Funktion erforderlich, welche die passenden Daten in die Fragebogen-Seite schreibt und anschließend die Seite mittels "Weiter" abschickt. Diese ist im folgenden HTML-Code definiert. Zusätzlich wird dort ein normaler Links mittels `<a>` definiert und die Funktion mittels ''addEventListener()'' (ganz am Ende) an diesen Link gekoppelt. Der zweite Event-Listener für ''"contextmenu"'' fängt einen Rechtsklick ab.
 +
 +<code html>
 +<a id="submitLink" href="https://www.soscisurvey.de">www.soscisurvey.de</a>
 +
 +<script type="text/javascript">
 +function goButton(evt) {
 +  var field = document.createElement("input");
 +  field.setAttribute("type", "hidden");
 +  field.setAttribute("name", "submitGo");
 +  field.setAttribute("value", "pageID");  // Hier die passende Seite-Kennung eintragen!
 +  // Apppend the hidden input to the questionnaire form
 +  var form = SoSciTools.getForm();
 +  form.appendChild(field);
 +  // Submit the page
 +  SoSciTools.submitPage();
 +  // Do not follow the original link
 +  evt.preventDefault();
 +  return false;
 +}
 +
 +// Change the behavior of the link
 +document.getElementById("submitLink").addEventListener("click", goButton);
 +document.getElementById("submitLink").addEventListener("contextmenu", goButton);
 +</script>
 +</code>
 +
 +Die Seiten-Kennung, welche in der JavaScript-Funktion in das Formularfeld geschrieben wird, muss dieselbe sein wie im vorigen Aufruf von ''buttonToPage()'' und beide Inhalte (PHP-Code und HTML-Code) müssen auf derselben Fragebogen-Seite stehen.
 +
 +Wenn man nun auf den Link klickt, wird der Klick so ungeleitet, als hätte man auf den Knopf zur Seite "pageID" geklickt.
 +
 +**Hinweis:** Einige Browser sperren womöglich das Abfangen des Rechtsklicks - es kann also durchaus passieren, dass Nutzer über Rechtsklick -> //auf neuer Seite öffnen// direkt auf die verlinkte Seite gelangen.
de/create/functions/buttontopage.txt · Zuletzt geändert: 25.09.2021 21:09 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki