Teile eines Formulars wiederverwenden

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Teile eines Formulars wiederverwenden

Beitrag von Well » 31.03.2010, 15:01:13

Screeze hat geschrieben:Der inhalt ist nicht in einem Attribut zu finden, wie es bei normalen textfeldern der fall ist.
Bei textareas wird der eingegebene text zwischen das open und das end tag geschrieben.
Aus diesem Grund findest du den Inhalt hier, wie Christian bereits sagte:
Oh, natürlich. :oops:

Aber leider funktionierts auch mit getContent() (1.12) nicht - die Methode liefert null zurück.

Code: Alles auswählen

$elements_textArea = $form_richtextTest->getFormElementByName('richtext')->getTextArea();
echo ($elements_textArea->getContent() === null) ? 'null' : 'string'; // null

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

Re: Teile eines Formulars wiederverwenden

Beitrag von dr.e. » 31.03.2010, 15:07:12

Hallo Well,

der Inhalt der Text-Area ist wie bei einem HTML-Element <textarea /> im Content des Tags gespeichert. Jede Taglib speichert daher im Attribut $this->__Content ihren Inhalt. Das können einfache Text-Inhalte oder auch die Platzhalter für die Kind-Tags sein. Du kannst daher die Text-Area ganz bequem per

Code: Alles auswählen

class richtext_taglib_area extends ... {
   public function &getTextArea(){
      return $this->__Children['area'];
   }
}
aus der Taglib zurückgeben und im Controller per

Code: Alles auswählen

$richtext->getTextArea()->getContent()
(1.12) oder mit

Code: Alles auswählen

$richtext->getTextArea()->get('Content')
(1.11) beziehen.
Ich denke, dass ich da noch einen Fehler in der Implentierung gemacht habe? (Zudem beleibt der Inhalt nach dem Absenden nicht erhalten. :()
Ich persönlich würde jedoch die Taglib anders implementieren, da du sonst das Feature der Area-Taglib garnicht wirklich nutzen kannst. Da in form_taglib_area bereits alle relevanten Funktionen einer Text-area vorhanden sind, kann du diese einfach durch die Taglib

Code: Alles auswählen

class richtext_taglib_area extends form_taglib_area {
   public function richtext_taglib_area(){
      parent::form_taglib_area();
   }
}
repräsentieren. Sofern du noch den Namen beeinflussen möchtest, reicht ein

Code: Alles auswählen

class richtext_taglib_area extends form_taglib_area {
   public function richtext_taglib_area(){
      parent::form_taglib_area();
   }
   public function onParseTime(){
      $this->setAttribute('name',$this->__ParentObject->getAttribute('name'));
      $this->setAttribute('id',$this->__ParentObject->getAttribute('name').'_area');
      parent::onParseTime();
   }
}
Nun kannst du in der Klasse form_taglib_richtext die Taglib einfach per

Code: Alles auswählen

class form_taglib_richtext extends form_control {
   public function form_taglib_richtext(){
      $this->__TagLibs[] = new Taglib('your::namespace','richtext','area');
   }
}
bekannt machen. Ich denke, dass du in der Klasse zudem in der onParseTime() die Methode __extractTaglibTags() aufrufst. Dort wird dann die Taglib analysiert und als Kind automatisch in den DOM gehängt. Mehr musst du an sich nicht tun.

// EDIT: hierdurch funktioniert insbesondere das Presetting der Werte automatisch!

Anschließend kannst du dann innerhalb der Klasse form_taglib_richtext mit der oben vorgestellten Methode

Code: Alles auswählen

public function getTextArea(){
   foreach($this->__Children as $objectId => $DUMMY){
      if(get_class($this->__Children[$objectId]) === 'richtext_taglib_area'){
         return $this->__Children[$objectId];
      }
   }
   return null;
}
die Instanz des DOM-Knotens an den Controller zurückgeben und dort wie in Post weiter oben beschrieben verarbeiten.

Ich hoffe, damit kommst du weiter! :)
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Teile eines Formulars wiederverwenden

Beitrag von Well » 31.03.2010, 20:44:17

Dankeschön. :) Scheint nun zu funktionieren.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast