Multistep Formular um Kosten zu berechnen
am 19.03.2014 - 11:16 Uhr in
Hallo zusammen,
ich bin sehr neu in der Drupal- Welt und bisher gefällt mir das Drupal sehr gut. Ich bin gerade dabei, für eine Krankenkasse (kleine Krankenkasse - Famillienbetrieb) einen Onlineprämienrechner zu erstellen im Drupal. Das Endprodukt wird so sein, das ich auf der Webseite einen Calculator habe in der ich meine Werte eingeben kann (Postleitzahl, Alter, Unfalldeckung, etc.), anhand der eingegeben Werten soll dann eine SQL- Abfrage gemacht werden und die Werte auf der Webseite ausgegeben werden. Soweit funktioniert alles noch einwandfrei, nur bekomme ich es nicht hin, die Werte auf einer neuen Seite auszugeben um diese später als Multistep weiterverarbeiten zu können. Die Werte werden mir nur mit "drupal_set_message" ausgegeben. Ich hoffe ihr könnt mir weiterhelfen, oder mir wenigstens einen Tipp geben wie ich das ganze realisieren kann?
Hier ist der Code des Moduls:
/**
* implements mymodule_menu()
*/
function mymodule_menu(){
$items = array();
$items['mymodule'] = array(
'title' => "mymodule",
'page callback' => "mymodule_info",
'access callback' => true,
'type' => MENU_NORMAL_ITEM,
'weight' => '10',
);
return $items;
}
/**
* Implements mymodule_block_info().
*/
function mymodule_block_info() {
$blocks['mymodule'] = array(
'info' => t('Name of the module'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}
/**
* Implements mymodule_block_view().
*/
function mymodule_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'mymodule':
$block['subject'] = t('Title of the module');
$block['content'] = mymodule_info();
break;
}
return $block;
}
/**
* callback function
*
*/
function mymodule_info(){
$output = drupal_get_form('mymodule_form');
return $output;
}
/**
* form builder
*/
function mymodule_form($form, $form_state){
$form = array();
$form['postalcode'] = array(
'#title' => 'postalcode',
'#type' => 'textfield',
'#size' => '30',
);
$form['age'] = array(
'#title' => t('age'),
'#type' => 'select',
'#options' => array(
0 => t('-- Please select --'),
1 => t('Child (0-18 old)'),
2 => t('Teenager (19-25 old)'),
3 => t('Adult (> 26 old)'),
),
);
$form['accident'] = array(
'#title' => t('accident'),
'#type' => 'select',
'#options' => array(
0 => t('-- Please select --'),
1 => t('with accident'),
2 => t('without accident'),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'calculate',
);
return $form;
return $formoutput;
}
/**
* validate function
*/
function mymodule_form_validate($form,$form_state){
$postalcode = $form_state['values']['postalcode'];
$age = $form_state['values']['age'];
$accident = $form_state['values']['accident'];
if (trim($postalcode) == '' || strlen(trim($postalcode)) != 4 ){
form_set_error('postalcode','Errormessage');
}
if ($age == 0) {
form_set_error('age','Errormessage');
}
if ($accident == 0) {
form_set_error('accident','Errormessage');
}
}
/**
* submit function
*/
function mymodule_form_submit($form,$form_state){
$postalcode = trim($form_state['values']['postalcode']);
$age = $form_state['values']['age'];
$accident = $form_state['values']['accident'];
if ($accident == 1) {
$modell1=2;
}
if ($accident == 2) {
$modell2=3;
}
$formselect = "SELECT postalcode,place,rid,kid FROM pcalc_place WHERE postalcode=$postalcode";
$formresult = db_query($formselect);
$formval = $formresult->fetchField(1);
$formresult = db_query($formselect);
$formregion = $formresult->fetchField(2);
$formresult = db_query($formselect);
$formcanton = $formresult->fetchField(3);
$sql = db_select('pcalc_cost', 'pcp')->extend('PagerDefault');
$sql->join('pcalc_canton', 'pck', 'pck.kid = pcp.kid');
$sql->join('pcalc_region', 'pcr', 'pcr.rid = pcp.rid');
$sql->join('pcalc_modell', 'pcm', 'pcm.mid = pcp.mid');
$sql->join('pcalc_age', 'pca', 'pca.aid = pcp.aid');
$sql->join('pcalc_franchise', 'pcf', 'pcf.fid = pcp.fid');
$sql
->fields('pca', array('aid','aklasse'))
->fields('pcp', array('cost','mid','aid','kid','fid','rid'))
->fields('pck', array('canton'))
->fields('pcm', array('modell'))
->fields('pcf', array('franchise'))
->fields('pca', array('aklasse'))
->condition('pcp.aid', $age, '=')
->condition('pcp.kid', $formcanton, '=')
->condition('pcp.mid', $modell1, '=')
->condition('pcp.rid', $formregion, '=')
->orderBy('franchise', 'DESC')
->limit(5000);
$results = $sql->execute();
$txt = '';
foreach ($results as $result) {
$txt .= 'cost: ' . $result->cost;
$txt .= ' canton: ' . $result->canton;
$txt .= ' Modell: ' . $result->modell;
$txt .= ' Franchise: ' . $result->franchise;
$txt .= ' Ageclass: ' . $result->aklasse;
$txt .= '<br />';
}
$formoutput['txt']['#markup'] = $txt;
drupal_set_message(print_r($formoutput, TRUE)); //I have test with return $formoutput but that didn't work
}
- Anmelden oder Registrieren um Kommentare zu schreiben
Ganz schön viel code hier
am 21.03.2014 - 16:19 Uhr
Ganz schön viel code hier ;)
Fehlt da nicht nach
<?php
$results = $sql->execute();
?>
<?php
->fetchAll();
?>
Dann verstehe ich folgendes nicht:
die Werte auf einer neuen Seite auszugeben um diese später als Multistep weiterverarbeiten zu können
Wie willst Du denn so die Werte unterteilen? Du schreibst alles in eine Variable, haust die in ein zu renderndes array rein was keins ist. Und wie willst Du dann noch was manipulieren?
Interessiert mich echt! Tu mir mal den Gefallen und beschreibe Deine Gedanken. Ich meine das nicht despektierlich, interessiert mich wirklich!
Was ich of als reminder nutze, und mich weiter bringt, ist folgendes tutorial, ad wird mit nodeview geschafft: http://www.jaypan.com/tutorial/drupal-7-view-modes-consistently-themeing...
Zuerst mal vielen Dank für
am 21.03.2014 - 22:30 Uhr
Zuerst mal vielen Dank für deine Antwort.. :)
Die Werte welche ich ausgebe, sind eigentlich korrekt und werden anhand der eingegebenen Werte aus der Datenbank ausgelesen, dies funktioniert auch alles einwandfrei.
Das Formular sieht folgendermassen wie im Anhang "form.png" aus und ist als Block auf der Seite eingefügt. Die Werte welche hier eingegeben werden, mit "db_select" aus der Datenbank ausgelesen:
$sql = db_select('pcalc_cost', 'pcp')->extend('PagerDefault');
$sql->join('pcalc_canton', 'pck', 'pck.kid = pcp.kid');
$sql->join('pcalc_region', 'pcr', 'pcr.rid = pcp.rid');
$sql->join('pcalc_modell', 'pcm', 'pcm.mid = pcp.mid');
$sql->join('pcalc_age', 'pca', 'pca.aid = pcp.aid');
$sql->join('pcalc_franchise', 'pcf', 'pcf.fid = pcp.fid');
$sql
->fields('pca', array('aid','aklasse'))
->fields('pcp', array('cost','mid','aid','kid','fid','rid'))
->fields('pck', array('canton'))
->fields('pcm', array('modell'))
->fields('pcf', array('franchise'))
->fields('pca', array('aklasse'))
->condition('pcp.aid', $age, '=')
->condition('pcp.kid', $formcanton, '=')
->condition('pcp.mid', $modell1, '=')
->condition('pcp.rid', $formregion, '=')
->orderBy('franchise', 'DESC')
->limit(5000);
$results = $sql->execute();
Die ausgegebenen Werte werden danach folgendermassen ausgegeben:
$txt = '';
foreach ($results as $result) {
$txt .= 'cost: ' . $result->cost;
$txt .= ' canton: ' . $result->canton;
$txt .= ' Modell: ' . $result->modell;
$txt .= ' Franchise: ' . $result->franchise;
$txt .= ' Ageclass: ' . $result->aklasse;
$txt .= '<br />';
}
$formoutput['txt']['#markup'] = $txt;
Momentan wird dies hier einfach als Text ausgegeben, sobald ich aber die Ausgabe korrekt ausgeben kann möchte ich dies eigentlich so gestallten, dass die Ausgabe in Tabellenform ausgegeben wird und danach als MultiStep Formular weiterverwendet werden kann (Offerte anfordern, danach die persönlichen Angaben, etc.).
Meine Ausgabe wird mit "drupal_set_message" ausgegeben, was ich eigentlich nicht möchte, bekomme es aber nicht hin die Ausgabe direkt auf der Seite oder auf einer neuen Seite auszugeben (als Inhalt). Die Ausgabe siehst du in der Datei "output.png".
Vielleicht bin ich auch das ganze falsch angegangen und bin über jeden Hinweis froh wie ich das ganze in Drupal 7 umsetzen kann. :)
Du bist die Sache falsch
am 21.03.2014 - 23:18 Uhr
Du bist die Sache falsch angegangen. Du hast, wie Du selbst sagst, bisher von Drupal keine Ahnung und willst gleich in die Modul-Programmierung einsteigen. Das kann nur schief gehen und glaube mir, ich spreche da aus Erfahrung. Du mußt erst Drupal verstehen, denn es geht sehr vieles ohne jede Programmierung nur mit Konfiguration und den richtigen Modulen. Höre auf mit Deinem aktuellen Problem. Nimm z.B. das Buch "Using Drupal". Dort findest Fallbeispiele und Lösungen. Spiele die der Reihe nach durch und versuche die Lösung zu verstehen. Experimentiere mit anderen Möglichkeiten. Es gibt bei Drupal nicht nur einen Weg, zu einer Lösung zu kommen. Das wird, je nach dem, wieviel Zeit Du dafür einsetzen kannst, ca. 3 bis 6 Monate dauern. Dann wird sich Dir allmählich der Drupal-Weg erschließen. Komm erst danach wieder zum Ausgangsproblem zurück, mit den inzwischen erworbenen Kenntnissen. Vermutlich wirst Du dann einen völlig anderen und einfacheren Weg finden, Dein Problem zu lösen.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
schau dir das tutorial an! da
am 22.03.2014 - 07:46 Uhr
schau dir das tutorial an! da steht das drin!