Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Bearbeitungsfunktion (Formulare) vortragen.  (Gelesen 2042 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Bearbeitungsfunktion (Formulare) vortragen.
« am: 30. Juni 2015, 14:18:59 »
Hallo,

ich habe eine eigene Komponente und im Backend kann ich Daten verändern, bzw. möchte diese Vortragen:

public function getEditForm($data = array(), $loadData = true)
        {
                $form = $this->loadForm(
                                        'com_fotoalbum.fotoalbum',
                                        'fotoalbum_edit',
                                        array('control' => 'jform', 'load_data' => $loadData
                                       ));
                return $form;
        }

Damit lade ich die angelegte Datei forms/fotoalbum.xml. Dies funktioniert auch wunderbar.

Bisher (vergangenheit) habe ich die Formulare statisch eingetragen und in die values ein PHP Code mit Escapter Rückgabe. Ich möchte auch wenn ich nicht comform bin etwas lbiebne. Im Template habe ich dann

<?php foreach ($this->form->getFieldset() as $field): ?>
<?php if (!$field->hidden): ?>
<?php echo $field->label?>
<?php endif; ?>

<?php echo $field->input?>
<?php endforeach; ?>

aber im input ist ja letztlich der HTML befehl, aber wie setze ich nun das passende value dazu vor Ausgabe fest?

zero24

  • Bestätigter Nutzer
  • Beiträge: 90
    • Meine Webseite
Antw: Bearbeitungsfunktion (Formulare) vortragen.
« Antwort #1 am: 30. Juni 2015, 16:22:59 »
Zitat
aber im input ist ja letztlich der HTML befehl, aber wie setze ich nun das passende value dazu vor Ausgabe fest?

hmm ich verstehe nicht ganz was du meinst? Sowas z.B.?
 
Zitat
<div class='whatever'>
<?php echo $field->input; ?>
</div>

ich kenne ja den wert von $field->input nicht ;)
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, daß er genug davon habe. (Rene Descartes, fr. Mathematiker u. Philosoph, 1596 - 1650)

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Bearbeitungsfunktion (Formulare) vortragen.
« Antwort #2 am: 30. Juni 2015, 19:19:43 »
Hallo,

generell kannst du die Ausgabe auch so machen:

$field->renderField($options);
Spart Code ;)

Ansonsten ist das Zuweisen von Werten ein bisschen komplexer:

Wie du schon richtig erkannt hast, baust du deine Formulare über die XML auf. Hierbei kannst du für jedes Feld ein default-Value angeben. Willst du aber z.B. einen gespeicherten Datensatz wieder in das Formular laden (um ihn bearbeiten zu können), gibt es zwei Wege:
der beste Weg ist es, in deinem Model mittels der loadFormData Methode die Daten zu laden (als Beispiel die Artikelkomponente in Joomla!)

Wenn du es nur sporadisch machen willst, kannst du natürlich auch das Formular selbst bearbeiten (was aber "schmutzig" ist)

$field->value = '...';
Joomla! ist auch nur ein Mensch...

david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Antw: Bearbeitungsfunktion (Formulare) vortragen.
« Antwort #3 am: 30. Juni 2015, 23:01:18 »
@zero24 es geht daraum das ich ein Formular lade aus einer xml, die Daten dazu kommen aus einer Datenbank.

Mein Aufruf ?option=com_fotoalbum&do=edit&id=1 liest die Formularfelder ein wie Hidden ID, Sichtbar Albumname, Albumbeschreibung. ich kann natürlich in der XML ein default setzen aber die Alben heißen immer anders und in einem Edit liest man die Daten ein um diese zu ändern. Wenn ihr auf einer Datei/Ordner die Taste F2 drückt (im Explorer/Desktop) dann wird euch ja der alte Name angezeigt, nun könntet ihr ein Tippfehler korregieren etc. Also lädt Windows den Namen der Datei in eine Art Dateinametextfeld.

@bembelimen Mein Code ist denke doch sehr schmutzig aber es muss ja nicht heißen das ich SQL oder XSS Injektion ermögliche, sondern nur den Code sehr mies halte. Dies möchte ich ja gerne verändern aber noch bin ich nicht so ganz mit Joomla im Einklang, bisher geht schon einiges was ich mir wünsche, aber sicher könnte man vieles besser machen. Nur dieses HalloWelt verstehe ich noch nicht so ganz. Vorallem das mit dem Controller wann er von bedeutung ist weil ich die view Werte ändern kann und er will dann immer auf view.html.php zugreifen. Hatte gehofft das ich es ändern könnte aber scheinbar wird der Controller nicht benutzt. In einem anderem Beitrag wurde mir zu einem Buch geraten zwecks Frameworkprogrammierung. Das $this->set|get('blablabla') in Models zu schreiben ist habe ich verstanden.
Nur noch nicht die gute Lösung mit den GetLoadEditFormData. Dort soll ich wohl die Value auf meine Art und weise setzen mit $form->value? Werde ich morgen machen. natürlich sähe es geiler aus $this->get('LoadEditFormData', $edit_id) aber sowas scheint nicht zu gehen auch wenn ich ein Argument in der public function GetLoadEditFormData($id) übermittle. Ist es sauber wenn man inputs im Models verwendet, ich dachte mir weil in einer anderen seite könnte der Formname anders heißen.

ich spiele derzeit ja auch mit dem Frontend herum, wo man Bilder hochladen könnte. Ich habe dort ein Formular mit Uploader wo man es manuell eintragen muss. im Loginstatus würde ich gerne den Valuewert wie bereits mit EditForm erfassen und das Feld Read-Only setzen disabled=1. Ob $form->disabled = true; geht werde ich auch noch testen.

Aber danke erstmal für die Antwort die ich noch prüfen muss, aber sie klingt vielversprechend.


david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Antw: Bearbeitungsfunktion (Formulare) vortragen.
« Antwort #4 am: 01. Juli 2015, 13:52:04 »
public function getEditForm($data = array(), $loadData = true)
        {
$data = JFactory::getApplication()->input->getVar('formdata', array());;
                $editform = array();
foreach($data as $id => $key) {
$row = $this->getAll((int) $id);
$row = $row[0]; //ähnlich Limit 1, FORM-Manipulation wäre hier ein denkbarer Fehler aber es ist im Administrationsbereich.

$form = $this->loadForm(
                                        'com_fotoalbum.fotoalbum',
                                        'fotoalbum_edit',
                                        array('control' => 'jform', 'load_data' => $loadData
                                       ));

$form->setValue("id", null, (int) $id);
$form->setValue("fotoalbumtitle", null, $row->fotoalbum);
$form->setValue("fotoablumbeschreibung", null, $row->fotoalbumbeschreibung);
break;
}

                return $form;

Ich habe das jetzt in die Models getan und die eine Funktion getAll() ist eigentlich eine Funktion mit der ich alle Datensätze aufrufe aber ich habe einen neuen Parameter mit Standardwert null beigefügt, wenn dieser nich null ist dann macht er mir ein where hinzu.
Ich denke das ist eine gute sache oder würdet ihr es anders machen?

Die Formularfelder werden auch nun ausgefüllt. Ist das nun sicher oder sollte ich htmlentities manuell durchführen? Theretisch sollte nichts passieren, weil die erste Eingabe sollte gepattert werden (muss noch eingefügt werden). Gibt es seitens des Joomla-Frameworks eine Stringfunktion auf gültige Strings zu prüfen oder auf Bad-Values wie <script>alert(0)</script> und co um XSS vorzubeugen? bei Datenbanken ist es natürlich auch wichtig, wobei dort habe ich $db->escape() im einsatz.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Bearbeitungsfunktion (Formulare) vortragen.
« Antwort #5 am: 04. Juli 2015, 23:27:18 »
Hallo David,

ich zitiere mich mal selbst:
Willst du aber z.B. einen gespeicherten Datensatz wieder in das Formular laden (um ihn bearbeiten zu können), gibt es zwei Wege:
der beste Weg ist es, in deinem Model mittels der loadFormData Methode die Daten zu laden (als Beispiel die Artikelkomponente in Joomla!)

Das sollte der "way to go" sein. Joomla! übernimmt dir die ganzen Abfragen (über getItem() etc.), du musst dich hierzu nur an die Vorgaben halten (=> siehe Link)
Joomla! ist auch nur ein Mensch...