Manche Foren haben einen Bereich in dem „Neulinge“ von erfahreneren Mitgliedern anhand eines Fragebogens beraten werden. In Haustierforen werden so beispielsweise Käfiggröße, Gruppenzusammensetzung und Futter abgefragt in medizinischen Selbsthilfeforen Blutwerte.
Dabei gibt es einige Punkte, die den Mitgliedern Zeit rauben:
- Die Fragesteller formatieren ihren Beitrag individuell, teilweise sehr unübersichtlich (vielleicht weil sie die Formatierungsmöglichkeiten von phpbb nicht kennen). Die relevanten Infos sind deswegen nicht sofort auf den ersten Blick sichtbar.
- Eine extern verlinkte Anleitung welche Information die Fragesteller wie darstellen sollen, wird oft nicht immer vollständig gelesen, oder die Fragesteller sind überfordert, weil Anleitung und das Feld, in dem sie ihr Posting verfassen, nicht im selben Browserfenster sichtbar sind.
- Die Personen, die den Fragebogen auswerten müssen oft immer wieder die selben Werte berechnen und nachschlagen, beispielsweise aus Anzahl der Tiere und Käfiggröße eine Besatzdichte berechnen oder die Blutwerte mit Referenzwerten in Verbindung bringen.
- Auf bestimmte Konstellationen müssen jedes mal die selben Antworttexte formuliert werden.
- Der Fragesteller schreibt kein Posting, sondern füllt ein Formular aus, in dem alles, worauf er beim Ausfüllen achten muss, direkt erwähnt wird. Aus dem Profildaten können einzelne Felder des Formulars vor ausgefüllt werden.
- Die Eingaben werden auf Plausibilität überprüft und der Fragesteller erhält direkt eine Rückmeldung, wenn sein Formular nicht korrekt ausgefüllt wurde
- Ist alles ok, kann der Fragesteller den Fragebogen absenden. Im Hintergrund wird daraus ein neuer Post erstellt der übersichtlich formatiert ist.
- Der Fragesteller wird direkt zu diesem Post weitergeleitet und kann den Beitrag je nach Foreneinstellungen noch überarbeiten
- Außerdem wird der Fragebogen direkt automatisiert ausgewertet. Aus dem Forumlardaten werden Werte berechnet oder mit Tabellenwerten verglichen und erklärende Texte vor formuliert. Dieses Ergebnis wird dem Fragesteller aber nicht direkt angezeigt (eine vollständige Beratung lässt sich nicht automatisiert vornehmen), sondern ist nur für alle Forenmitglieder sichtbar, die in dem betreffenden Forum das Recht haben, Beiträge freizuschalten. Diese können die Informationen in diesem Antwort-Post nutzen um schneller ihre Antwort zu formulieren.
Fragebogen Start, teilweise vorausgefüllt: [ externes Bild ]
Test auf Plausibilität mit Fehlermeldungen: [ externes Bild ]
absenden: [ externes Bild ]
Weiterleitung für den User zum Post mit formatierten Fragebogeninhalt: [ externes Bild ]
Ansicht für Helfer mit Freischalt-Rechten: [ externes Bild ]
Automatische Fragebogenauswertung, sichtbar nur für Helfer mit Freischalt-Rechten: [ externes Bild ]
"Installation"
- getestet mit phpBB 3.0.8
- Die Datei fragebogen.html unter /phpBB3/styles/prosilver/fragebogen.html speichern, die Datei fragebogen.php im Verzeichnis /phpBB3/fragebogen.php
- In der Datei fragebogen.php, die forum_id anpassen, es muss die ID eines existierenden Forums sein
- Mit den Einstellungen kann der MOD direkt verwendet werden und berechnet den Body-Mass-Index. Anhand des Beispiels und der Kommentare in fragebogen.php sollten auch Programmier-Anfänger mit einfachen Kenntnissen zu Formularen und ihrer Auswertung mit php den MOD auf ihre persönlichen Bedürfnisse erweitern können.
Quelltext
/phpBB3/styles/prosilver/fragebogen.html
Code: Alles auswählen
<!-- INCLUDE overall_header.html -->
<form action="" method="post">
<div class="panel bg1">
<div class="inner"><span class="corners-top"><span></span></span>
<div class="content">
<h2>Fragebogen</h2>
<div style="font-size:110%;">
<textarea rows="10" cols="30" name="data_start">
{S_DATA_START}
</textarea>
<br/>
Körpergröße:
<input type="text" name="data_height" value="{S_DATA_HEIGHT}"/>cm
<span class="error">{S_ERROR_HEIGHT}</span>
<br/>
Gewicht:
<input type="text" name="data_weight" value="{S_DATA_WEIGHT}"/>kg
<span class="error">{S_ERROR_WEIGHT}</span>
<br/>
<input type="submit" name="submit" value="Absenden"/>
</form>
</div>
</div>
<span class="corners-bottom"><span></span></span></div>
</div>
<!-- INCLUDE overall_footer.html -->
Code: Alles auswählen
<?php
/*
* Dieser MOD erstellt eine Seite in phpbb mit einem Fragebogen der von
* eingeloggten Usern ausgefüllt werden kann. Teile des Fragebogens können
* aus Profilfeldern vor-ausgefüllt werden.
* Der Fragebogen wird anschließend formatiert ins Forum gestellt (ein neues
* Posting wird erstellt).
* Als Antwort auf dieses Posting kann eine automatische Auswertung des
* Fragebogens erstellt werden. Diese Antwort kann auf "moderiert" gesetzt
* werden, so dass sie von Forenmitgliedern mit entsprechenden Rechten noch
* überarbeitet werden kann, ehe sie angezeigt wird.
*/
#####################################################################
#####################################################################
# Konfiguration:
# Wenn diese Werte angepasst sind, kann dieses Beispielskript direkt
# verwendet werden und das Skript anschließend an die individuellen
# Bedürfnisse angepasst werden
$forum_id = 10; //id des Forums in dem der Beitrag erstellt werden soll
$antwort_user_id = 4; /* id des Users von dem die automatische Antwort
* geschrieben werden soll (4=Alexa Bot)
* Wenn die automatische Antwort zunächst freigeschaltet werden soll:
* - im ACP auf Benutzer/Gruppenspezifische Forenrechte, und das Forum
* forum_id auswählen
* - dem User antwort_user_id die Rolle "Mit Warteschlange" auswählen.
*/
#####################################################################
#####################################################################
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
#####################################################################
#####################################################################
# Nur User, die Schreibrechte in dem Forum haben, dürfen den Fragebogen
# bearbeiten, anderenfalls Weiterleitung zur Login-Seite
$auth->acl($user->data);
if (!$auth->acl_get('f_read', $forum_id)){
header('Location: ucp.php?mode=login');
}
#####################################################################
#####################################################################
#####################################################################
# Schritt 1: Formular mit vorausgefüllten Feldern erstellen
# Das Formular selbst findet sich in der datei fragebogen.html
if(!isset($_POST['submit'])){
page_header('Fragebogen');
$start = "Hallo,
könnt ihr mir zu meinen Werten etwas sagen?
Danke, {$user->data['username']}";
$template->assign_vars(array(
'S_DATA_START' => $start,
'S_DATA_HEIGHT' => '',
'S_DATA_WEIGHT' => '',
'S_ERROR_NAME' => '',
'S_ERROR_HEIGHT' => '',
'S_ERROR_WEIGHT' => '',
)
);
$template->set_filenames(array('body' => 'fragebogen.html'));
page_footer();
}else{
#####################################################################
#####################################################################
# Schritt 2: Ausgefüllten Fragebogen überprüfen, wenn Felder fehlerhaft
# ausgefüllt wurden, erneut zum Fragebogen weiterleiten, die bereits
# ausgefüllten Felder beibehalten und eine Fehlermeldung anzeigen.
# Werte aus dem Fragebogen werden mit request_var aufgerufen
$formdata = array(
'start' => request_var('data_start', '', true),
'height' => request_var('data_height', 0, true),
'weight' => request_var('data_weight', 0, true),
);
page_header('Fragebogen');
$assign_vars_array = array(
'S_DATA_START' => $formdata['start'],
'S_DATA_HEIGHT' => $formdata['height'],
'S_DATA_WEIGHT' => $formdata['weight'],
);
$error = false;
if(!($formdata['weight']>0)){
$error = true;
$assign_vars_array['S_ERROR_WEIGHT'] = 'Bitte eine Zahl für das Gewicht eingeben.';
}
if(!($formdata['height']>0)){
$error = true;
$assign_vars_array['S_ERROR_HEIGHT'] = 'Bitte eine Zahl für die Größe eingeben.';
}
if($error == true){
page_header('Fragebogen');
$template->assign_vars($assign_vars_array);
$template->set_filenames(array('body' => 'fragebogen.html'));
page_footer();
}else{
#####################################################################
#####################################################################
# Schritt 3: Der Fragebogen wurde korrekt ausgefüllt, nun wird ein Posting
# mit dem ausgefüllten Fragebogen erstellt.
$threadtitel = $user->data['username'];
$threadtext = "{$formdata['start']}
[b]Gewicht[/b]: {$formdata['weight']} kg
[b]Größe[/b]: {$formdata['height']} cm
";
# Posting erstellen:
utf8_normalize_nfc(request_var($threadtitel, '', true));
utf8_normalize_nfc(request_var($threadtext, '', true));
$poll = $uid = $bitfield = $options = '';
generate_text_for_storage($threadtitel, $uid, $bitfield, $options, false, false, false);
generate_text_for_storage($threadtext, $uid, $bitfield, $options, true, true, true);
$data = array( // mehr Optionen: http://wiki.phpbb.com/Function.submit_post
'forum_id' => $forum_id,
'icon_id' => false,
'enable_bbcode' => true,
'enable_smilies' => true,
'enable_urls' => true,
'enable_sig' => true,
'message' => $threadtext,
'message_md5' => md5($threadtext),
'bbcode_bitfield' => $bitfield,
'bbcode_uid' => $uid,
'post_edit_locked' => 0,
'topic_title' => $threadtitel,
'notify_set' => false,
'notify' => false,
'post_time' => 0,
'forum_name' => '',
'enable_indexing' => true,
);
$path2newtopic = submit_post('post', $threadtitel, '', POST_NORMAL, $poll, $data);
#####################################################################
#####################################################################
# Schritt 4: Der User wird zu dem neuen Posting weiter geleitet
$path2newtopic = str_replace('&','&',$path2newtopic);
$topic_id = substr($path2newtopic,strpos($path2newtopic,'&t=')+3);
header('Location: '.$path2newtopic);
#####################################################################
#####################################################################
# Schritt 5: Die automatische Auswertung des Fragebogens wird erstellt
# und eine Antwort auf das Posting geschrieben
sleep(2); //warten, damit Postings nacheinander
$bmi = $formdata['weight']/$formdata['height']/$formdata['height']*10000;
$bmi = round($bmi*10)/10;
$bmi = str_replace('.',',',$bmi);
$threadtext = "Hallo {$user->data['username']},
Dein BMI ist {$bmi}.";
$threadtitel = 'Automatische Auswertung';
# Post erstellen:
utf8_normalize_nfc(request_var($threadtitel, '', true));
utf8_normalize_nfc(request_var($threadtext, '', true));
$poll = $uid = $bitfield = $options = '';
generate_text_for_storage($threadtitel, $uid, $bitfield, $options, false, false, false);
generate_text_for_storage($threadtext, $uid, $bitfield, $options, true, true, true);
$data = array( // mehr Optionen: http://wiki.phpbb.com/Function.submit_post
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'icon_id' => false,
'enable_bbcode' => true,
'enable_smilies' => true,
'enable_urls' => true,
'enable_sig' => true,
'message' => $threadtext,
'message_md5' => md5($threadtext),
'bbcode_bitfield' => $bitfield,
'bbcode_uid' => $uid,
'post_edit_locked' => 0,
'topic_title' => $threadtitel,
'notify_set' => false,
'notify' => false,
'post_time' => 0,
'forum_name' => '',
'enable_indexing' => true,
);
# User wechseln
$sql = 'SELECT * FROM ' . USERS_TABLE . ' WHERE user_id = ' . $antwort_user_id;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$user->data = array_merge($user->data, $row);
$auth->acl($user->data);
# Posting
submit_post('reply', $threadtitel, '', POST_NORMAL, $poll, $data);
#####################################################################
}
}
?>