0 votes
in SoSci Survey (dt.) by s109993 (13.1k points)
edited by s109993

Moin,

ich benutze relativ oft die Navigationsleiste (https://www.soscisurvey.de/help/doku.php/de:create:navigation). Jetzt gab es von einem Kunden die Nachfrage, ob zwischen den Kapiteln auf jeder Seite oben das Kapitel angezeigt werden kann, zu dem die Frage gehört. Wurde das schon einmal gemacht bzw. gibt es da eine Anleitung/Idee zur Umsetzung?

Ich arbeite nicht auf SoSci, sondern auf einem privaten Server, Version 3.7.06

Edit: ich könnte es natürlich manuell einarbeiten, aber das würde dann wieder auf fast jeder Seite ein neuer Textbaustein sein. Deshalb würde einfach gerne wissen, ob es eine andere Möglichkeit gibt.

1 Answer

0 votes
by SoSci Survey (370k points)

Jetzt gab es von einem Kunden die Nachfrage, ob zwischen den Kapiteln auf jeder Seite oben das Kapitel angezeigt werden kann, zu dem die Frage gehört.

Intuitiv würde ich sagen, dass dei Navigationsleiste genau das macht - das aktive Kapitel ist ja optisch hervorgehoben.

Aber ja, man kann den Namen des Kapitels natürlich auch nochmal über oder unter die Navigation schreiben. Dafür würden Sie die Funktion navigation() ergänzen und z.B. unter der Zeile

option('nextbutton', 'Nächstes Formular');

Noch ein wenig HTML-Code für eine Überschrift ausgeben. Die Funktion info('pageNames') verrät die Titel der Seiten. Der zusätzliche PHP-Code könnte also aus aussehen:

$pageNames = info('pageNames');
$pageID = info('pageID');
$pageName = $pageNames[$pageID];
html('<h1>'.$pageName.'</h1>');

Das funktioniert so lange, wie Sie einen Navigationspunkt pro Seite haben und jede Seite einem Navigationspunkt entspricht. Falls das bei Ihnen nicht der Fall ist (und womöglich deshalb erst der Wunsch nach der zusätzlichen Anzeige aufkam), könnten Sie den Seitennamen zwischenspeichern.

$pageNames = info('pageNames');
$pageID = info('pageID');
$pageName = $pageNames[$pageID];
if ($pageName) {
  $lastName = $pageName;
}
registerVariable($lastName);
if (!empty($lastName)) {
    html('<h1>'.$lastName.'</h1>');
}

Eventuell wäre in so einem Fall aber geschickter, das aktive Kapitel direkt im navigation()-Befehl zu übergeben und dann die Hervorhebung in der Navigation entsprechend über mehrere Seiten beizubehalten.

by s109993 (13.1k points)
Ich habe nur 7 Navigationspunkte auf 50 Seiten- deshalb die Nachfrage. Ich schau mir Ihren Code einmal an. Danke für Ihre Antwort (und das sogar an Ostern :) )
by SoSci Survey (370k points)
Frohe Ostern ;)
by s109993 (13.1k points)
edited by s109993
leider habe ich es nicht ganz geschafft. ggf. fehlt mir hier das Verständnis, wo der Code eingebunden werden muss
:
$pageNames = info('pageNames');
$pageID = info('pageID');
$pageName = $pageNames[$pageID];
if ($pageName) {
  $lastName = $pageName;
}

registerVariable($lastName);
if (!empty($lastName)) {
    html('<h1>'.$lastName.'</h1>');
}

Ich dachte alles inklusive registerVariable unter navigation()  und der html-Baustein dann auf der nachfolgenden Seite?

EDIT: ich habe den Code für mich etwas reduziert. Allerdings bin ich mir nicht ganz sicher, warum es jetzt klappt. Ich konnte ihre Ausführung eigentlich gut nachvollziehen.

$pageID = info('pageID');
registerVariable($pageID);

html('<h3>'.$pageID.'</h3>');

Damit hätte ich die Anzeige über der Frage- was etwas zu viel ist. Gibt es eine Möglichkeit (und jetzt wird es wahrscheinlich kompliziert), das jeweils für die Seiten, auf denen navigation() nicht eingebunden ist, in den header zu packen (das Logo ist ganz rechts- zum Beispiel ganz links dann das derzeitige Kapitel). Dann wäre es nicht zu dominant in der Darstellung.
by SoSci Survey (370k points)
> Ich dachte alles inklusive registerVariable unter navigation()

Nur um Missverständnisse zu vermeiden: Der Code muss nochj innerhalb der navigation() Funktion stehen.

> Gibt es eine Möglichkeit (und jetzt wird es wahrscheinlich kompliziert), das jeweils für die Seiten, auf denen navigation() nicht eingebunden ist, in den header zu packen

Die Anleitung zur Navigation geht davon aus, dass navigation() auf jeder Seite eingebunden wird, weil die Navigation ja auf anderen Seiten sonst nicht verfügbar ist.

Falls Sie navigation() nur auf einzelnen Seiten einsetzen, dann würde ich für die Überschrift einen geringfügig anderen Weg gehen. Und zwar könnten Sie im Fragebogen-Layout direkt über dem Platzhalter %questionnaire% noch entsprechenden Code einfügen, z.B.

<h1>%navHeader%</h1>
%questionnaire%

Und im PHP-Code würden Sie diesen Platzhalter dann belegen, also z.B.

$pageNames = info('pageNames');
$pageID = info('pageID');
debug($pageNames);
debug($pageID);
$pageName = $pageNames[$pageID];
if ($pageName) {
  replace('%navHeader%', $pageName);
}

Die Funktion registerVariable() bräuchten Sie in diesem Fall nicht. Ich habe hier aber noch ein paar debug()-Zeilen ergänzt, damit Sie herausfinden, warum der Code bei Ihnen nicht funktionierte.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...