php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.04.2005, 16:01  
Gast
 
Beiträge: n/a
Standard Variable Anzahl Felder mit QuickForm und Smarty

Hallo,

ich möchte in einem Formular, dass mit QuickForm erzeugt wird mehrere Datensätze aus einer Datenbank gleichzeitig verarbeiten. Das Anlegen der Felder in QuickForm ist ja nicht das Problem:

Code:
// Dynamischer Bereich: existierende Einträge anzeigen:
if ($qry_angebotspositionen <> -1) {
    for($i = 0; $i < pg_numrows($qry_angebotspositionen); $i++) {
        // Suffix für Feldnamen festlegen
        $suffix = substr("00".(string) $i, -3, 3);

        // Event-Handler für JavaScript erzeugen
        $javascript = array('onChange' => "javascript:setDirtytag(this);");

        // Daten einer Zeile in ein Objekt holen
        $data = pg_fetch_object($qry_angebotspositionen, $i);

        // Eingabefelder erzeugen
        $myForm->addElement('text', 'stadt_'.$suffix, '', array('size' => 20, 'maxlength' => 30), $javascript);
        $myForm->addElement('select', 'produktlinie_'.$suffix, '', $lst_produktlinien, $javascript);
        $myForm->addElement('text', 'flaechen_'.$suffix, '', array('size' => 5, 'maxlength' => 5), $javascript);
        $myForm->addElement('text', 'preisflaeche_'.$suffix, '', array('size' => 5, 'maxlength' => 5), $javascript);
        $myForm->addElement('text', 'beginn_'.$suffix, '', array('size' => 10, 'maxlength' => 10), $javascript);
        $myForm->addElement('text', 'ende_'.$suffix, '', array('size' => 10, 'maxlength' => 10), $javascript);
        $myForm->addElement('hidden', 'dirtytag_'.$suffix, 'clean');
        $myForm->addElement('hidden', 'id_'.$suffix, $data->id);
    }
}
Auf diese Weise erzeuge ich in QuickForm Elemente mit den Namen 'stadt_001', 'stadt_002', usw.
Die Ausgabe des Formulars möchte ich über Smarty realisieren.
Die Frage ist nur, wie erzeuge ich in Smarty die entsprechenden Einträge?
Ich bräuchte ja die - dynamisch erzeugten - Zeilen
{$form_data.stadt_001.html}
{$form_data.stadt_002.html}
...
Ich habe schon einige Zeit mit eval heraumexperimentiert, aber bislang kein Ergebnis erzielt.
Ich könnte natürlich etwas in der Art
Code:
{foreach item=zeile from=$feldliste}
<input type="text" name="{$zeile.stadt}" />
{/foreach}
schreiben, aber dann würden die Formularfelder aus der Verarbeitung von QuickForm herausfallen.
In der Smarty-Dokumentation von Monte Ohrt und Andrei Zmievski habe ich dazu auch nichts gefunden.
Weiss jemand Rat?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.04.2005, 21:29  
Gast
 
Beiträge: n/a
Standard

Warum verlegst du die Foreach schleife nicht in das php Script?
  Mit Zitat antworten
Alt 20.04.2005, 04:29  
Gast
 
Beiträge: n/a
Standard

So etwas in der Art versuche ich gerade.
Ich bastel mir in PHP den Code für das Template zusammen und werte ihn mit eval im Smarty-Template aus.
Damit besteht natürlich überhaupt keine Trennung von Funktion und Layout mehr.
Ich wollte ja explizit die Darstellung (und nur) im Template und die Funktionalität im PHP-Skript haben.
Wenn ich es heute vormittag nicht hinkriege, schreibe ich doch alles in ein PHP-Skript und mache das ganze ohne QuickForm.
  Mit Zitat antworten
Alt 20.04.2005, 05:03  
Gast
 
Beiträge: n/a
Standard

Es hat funktioniert!
Ich erzeuge im PHP-Skript den Template-Code und lege ihn in der Variablen $code ab
Code:
// Dynamischer Bereich: existierende Einträge anzeigen:
$codelines = array(); // Hier kommt der Template-Code rein
if ($qry_angebotspositionen <> -1) {
    for($i = 0; $i < pg_numrows($qry_angebotspositionen); $i++) {
        // Suffix für Feldnamen festlegen
        $suffix = substr("00".(string) $i, -3, 3);

        // Event-Handler für JavaScript erzeugen
        $javascript = array('onChange' => "javascript:setDirtytag(this);");

        // Daten einer Zeile in ein Objekt holen
        $data = pg_fetch_object($qry_angebotspositionen, $i);

        // Eingabefelder erzeugen
        $myForm->addElement('text', 'stadt_'.$suffix, '', array('size' => 20, 'maxlength' => 30), $javascript);
        $myForm->addElement('select', 'produktlinie_'.$suffix, '', $lst_produktlinien, $javascript);
        $myForm->addElement('text', 'flaechen_'.$suffix, '', array('size' => 5, 'maxlength' => 5), $javascript);
        $myForm->addElement('text', 'preisflaeche_'.$suffix, '', array('size' => 5, 'maxlength' => 5), $javascript);
        $myForm->addElement('text', 'beginn_'.$suffix, '', array('size' => 10, 'maxlength' => 10), $javascript);
        $myForm->addElement('text', 'ende_'.$suffix, '', array('size' => 10, 'maxlength' => 10), $javascript);
        $myForm->addElement('hidden', 'dirtytag_'.$suffix, 'clean');
        $myForm->addElement('hidden', 'id_'.$suffix, $data->id);

        // Defaultwerte eintragen
        $defaults['stadt_'.$suffix] = trim($data->stadt);
        $defaults['produktlinie_'.$suffix] = $data->produktlinie;
        $defaults['flaechen_'.$suffix] = trim($data->flaechen);
        $defaults['preisflaeche_'.$suffix] = trim($data->preisflaeche);
        $defaults['beginn_'.$suffix] = trim($data->beginn);
        $defaults['ende_'.$suffix] = trim($data->ende);

        $codelines[] = <<<CODE
            <tr align="left">
                <td>{\$form_data.stadt_$suffix.html}</td>
                <td>{\$form_data.produktlinie_$suffix.html}</td>
                <td>{\$form_data.flaechen_$suffix.html}</td>
                <td>{\$form_data.preisflaeche_$suffix.html}</td>
                <td>{\$form_data.beginn_$suffix.html}</td>
                <td>{\$form_data.ende_$suffix.html}</td>
                <td>{\$form_data.submitButton.html}</td>
            </tr>
CODE;
    }
$code = implode("\n", $codelines);
Dann muss ich natürlich mit
Code:
$tpl->assign('code', $code);
die Variable an eine Smarty-Variable binden.
Im Template mache ich dann
Code:
{eval var=$code}
et voila, die Eingabefelder werden angezeigt und können über QuickForm ausgewertet werden.
Ist zwar nicht schön, funktioniert aber und das ist mir im Moment wichtiger...
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Smarty + MySQL = immer falsche Ausgabe m0use` PHP Tipps 2006 44 21.11.2008 20:30
[Erledigt] Variable Anzahl Parameter bie build-in-functions sqrt PHP Tipps 2008 16 25.05.2008 23:00
Was ist Aufgabe des Templates (Smarty), was nicht? agrajag PHP Tipps 2007 8 24.02.2007 13:19
Select 2 verschiedene Felder aus einer Tabelle/Datenbank DDogg Datenbanken 5 26.05.2006 19:23
Smarty: Variable als Template ausgeben duderino PHP Tipps 2006 11 08.01.2006 18:43
Variable Anzahl Spalten im Ergebniss möglich? Datenbanken 4 21.07.2005 13:19
Smarty: Variabelnname enthält eine Variable eQuin PHP-Fortgeschrittene 1 05.03.2005 00:55
Warum wird Variable nicht übergeben??? Anuschka PHP Tipps 2005 2 06.01.2005 13:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
quickform addelement, quickform template, smarty addelement, quickform smarty, smarty quickform, smarty trim, smarty array length, javascript mehrere eingabefelder, quickform doku, javascript aus array ein objekt holen, smarty dynamisches javascript, smarty length, quickform array, quickform file array, smarty foreach quickform, smarty quickform tutorial, smarty form select, smarty array size, smarty eingabefeld, javascript addelement

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.