Dynamisch Select Felder zu einem Formular hinzufügen

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von Megger » 10.08.2010, 12:43:21

Hi

Man kann ja mit "addFormElementBeforeMarker" bzw. "addFormElementAfterMarker" Formular Elemente dynamisch hinzufügen. Problem ist hierbei, dass ich zum Beispiel bei einem Select Feld keine Optionen hinzufügen kann (oder ich weiß einfach nicht wie)

Habe nun in "html_taglib_form" eine neue Methode hinzugefügt "createFormElement"

Code: Alles auswählen

public function createFormElement($elementType,$elementAttributes = array()) {
         $objectId = $this->__createFormElement($elementType,$elementAttributes);
         return $this->__Children[$objectId];
      }

Die Methode macht nichts weiter als die schon vorhandene private Methode zu nutzen und anstatt eine ObjectID zurück zu geben, wird das ganze Element zurückgegeben.

Nun kann ich Formularelemente dynamisch anlegen:

Code: Alles auswählen

$Select = $Form->createFormElement('form:select',array('name'=>'selectbox'));
$Select->addOption('Eins',1);
$Select->addOption('Zwei',2,true);


Um das Object dann in das Formular einzubinden habe ich die Methode "addElementBeforeMarker" (Ich weiß, ist ein blöder Name) erstellt

Code: Alles auswählen

      public function addElementBeforeMarker($markerName,$element) {
         
            $objectId = $element->getObjectId();   
         
            // get desired marker
            $marker = &$this->__getMarker($markerName);

            // add the position placeholder to the content
            $markerId = $marker->getObjectId();
            $this->__Content = str_replace(
               '<'.$markerId.' />','<'.$objectId.' /><'.$markerId.' />',$this->__Content
            );

            // return object id of the new form element
            return $objectId;
       // end function
      }


Die Optionen werden auch angezeigt, allerdings ist "Eins" selected, erwartet hätte ich allerdings, dass "Zwei" selected ist.
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von dr.e. » 10.08.2010, 23:52:30

Hi Megger,

die API der Formulare bringt meiner Ansicht nach alles für deinen Anwendungsfall mit. Um ein dynamisches Selekt-Feld nach einem Marker hinzuzufügen und zu befüllen reicht folgender Code:

Code: Alles auswählen

$form = &$this->__getForm('foo');

$objectId = $form->addFormElementBeforeMarker('marker','form:select',array('name' => 'color'));

$color = &$form->getFormElementByName('color');

// Alternativer Referenz-Bezug
$color = &$form->getFormElementByObjectID($objectId);

$color->addOption('red','1');
$color->addOption('blue','2',true);

// Alternative Aktivierung:
$color->addOption('blue','2');
$color->setOption2Selected('blue');

$color->addOption('purple','3');

$form->transformOnPlace();

Die Vorgehensweise ist bei der aktuellen Implementierung nicht so, dass du das Objekt selbst hinzufügst, sondern über den Tag-Namen definierst, welches Objekt erzeugt wird. Auf dieses hast du dann aber wie auf "normale" Formular-Elemente Zugriff.
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von Megger » 11.08.2010, 08:51:20

Da hätte ich auch selbst drauf kommen können
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von Megger » 13.08.2010, 10:25:25

Hi

Mit dem folgenden Code ist trotzdem "Alle" selected, obwohl eigentlich ja die andere Option selected sein sollte

Code: Alles auswählen

$objectId = $Form->addFormElementBeforeMarker('logo','form:select',array('name'=>'category[]','class'=>'category'));
$Select = $Form->getFormElementByObjectID($objectId);
$Select->addOption('Alle',0);
$Select->addOption($Display,$Value,true);
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von dr.e. » 13.08.2010, 13:41:50

Hi Megger,

das ist ein interessanter Fall gewesen und hat mich erst mal 10 Min gekostet, bis ich ihn verstanden habe. :roll:

[url]Lösung:[/url]
1) die Klammern im Namen müssen weg, denn ein einfaches Select-Feld hat keine Mehrfach-Selektion. Falls du das benötigst muss das form:multiselect verwendet werden. Dieses implementiert das Presetting anders.
2) das APF hat an dieser Stelle einen Bug mit der Initialisierung von dynamischen Feldern beim ersten Anzeigen des Formulars. Letzteres habe ich im 1.12er branch gefixt, du kannst dir die Datei unter http://adventurephpfra.svn.sourceforge.net/viewvc/adventurephpfra/branches/php5/1.12/?view=tar herunterladen.
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von Megger » 13.08.2010, 18:36:30

1) die Klammern im Namen müssen weg, denn ein einfaches Select-Feld hat keine Mehrfach-Selektion. Falls du das benötigst muss das form:multiselect verwendet werden. Dieses implementiert das Presetting anders.

Es ist aber kein Multiselect Feld sondern mehrere Select Felder bei dem man nur 1 Sache auswählen kann.

das APF hat an dieser Stelle einen Bug mit der Initialisierung von dynamischen Feldern beim ersten Anzeigen des Formulars. Letzteres habe ich im 1.12er branch gefixt, du kannst dir die Datei unter http://adventurephpfra.svn.sourceforge. ... /?view=tar herunterladen.

Montag :D

Danke für deine Mühe
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Dynamisch Select Felder zu einem Formular hinzufügen

Beitrag von Megger » 16.08.2010, 10:46:00

Nun funktioniert es, danke
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast