Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Multistep Formular um Kosten zu berechnen

Eingetragen von kezman88 (2)
am 19.03.2014 - 11:16 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

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

}

‹ Anzahl Nodes eines Inhaltstyp / aktueller Node [gelöst] View - Ausgabebedingungen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ganz schön viel code hier

Eingetragen von maen (547)
am 21.03.2014 - 16:19 Uhr

Ganz schön viel code hier ;)
Fehlt da nicht nach

<?php
$results
= $sql->execute();
?>
das
<?php
->fetchAll();
?>
???

Dann verstehe ich folgendes nicht:

Zitat:

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...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zuerst mal vielen Dank für

Eingetragen von kezman88 (2)
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. :)

AnhangGröße
form.png 4.55 KB
output.png 107.87 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Du bist die Sache falsch

Eingetragen von wla (9461)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

schau dir das tutorial an! da

Eingetragen von maen (547)
am 22.03.2014 - 07:46 Uhr

schau dir das tutorial an! da steht das drin!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 5 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 1 Tag
  • In der entsprechenden View
    vor 3 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 1 Tag
  • gelöst
    vor 5 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 29 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association