• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Dojo Accordion in Zend_Dojo_Form

bytecounter

New member
Hallo zusammen,

ich versuche, ein Formular mit Unterformularen in ein AccordionContainer zu packen. Die Unterformulare sollen jeweils ein AccordionPane sein. Folgenden Code habe ich:
PHP:
class Client_Form_Test extends Zend_Dojo_Form{        public function init()
        {
                $this->addDecorator('AccordionContainer');

                $this->addSubForm(new Client_Form_SubForm_Name, 'client_nameSubForm');
                $this->getSubForm('client_nameSubForm')
                        ->addDecorator('AccordionPane', array('title' => 'Stammdaten'));
               
                $this->addSubForm(new Client_Form_SubForm_User, 'client_userSubForm');
                $this->getSubForm('client_userSubForm')
                        ->addDecorator('AccordionPane', array('title' => 'Benutzerdaten'));
        }
}
Leider klappt das nicht so, wie erhofft. Er zeigt die AccordionPanes an, als ob sie ohen decoriert wären. Im generierten Quellcode hat er die Decoratoren aber gesetzt. Was mache ich falsch?

Achja, ich nutze ZF1
vg
Bytecounter
 
Zuletzt bearbeitet:

webdevilopers

New member
Wenn du sagst, dass der generierte Code korrekt ist, dann kann es ja nicht mehr an Zend_(Dojo_)Form liegen.
Fehlen viell. Dojo Stylesheets bzw. das Theme?
 

bytecounter

New member
Hallo,

ich habe nicht gesagt, dass der Code korrekt ist, sondern nur, dass er laut Code die Dekoratoren setzt ;-) Eventuell ist die Reihenfolge falsch (kann ich die überhaupt bestimmen)?
Da Accordion Panes an anderer Stelle eingesetz werden und funktionieren, kann ich ein Fehlen der Stylesheets ausschließen.

Also grundsätzlich ist mein Code korrekt und müsste funktionieren?

Ergänzung:
Jetzt habe ich mir den Dojo-Code mal endlich etwas genauer angeschaut, und das kann nicht funktionieren: es wird nur ein AccordionPane für das gesamte Formular erstellt. Des Weiteren erstellt er zwar ein "Title"-Element für das Pane, dieses ist allerdings leer.

Ich werde mal weiter schauen. Bin aber parallel trotzdem für jeden Tipp dankbar!

Ergänzung II:
Jetzt setze ich die IDs der Panes explizit, und er rendert sie zumindest getrennt. Allerdings fehlt beiden Panes das Title-Element. Das oben genannte Title-Element gehört zum Container und nicht - wie von mir fälscherlicherweise angenommen - zu einem Pane.


vg
Bytecounter
 
Zuletzt bearbeitet:

bytecounter

New member
So, jetzt habe ich das mal testweise umgestellt und render das Form nicht mehr komplett, sondern testweise(!) hole ich mir nur mal die Subforms:

PHP:
$containerId = "client_inlineForm";

echo $this->accordionContainer()->captureStart(
    $containerId,
    array(
        'duration' => 200
    ),
    array('class' => '')
);

echo $this->contentPane(
        "client_inlineForm_nameContentPane",
        $this->form->getSubForm('client_nameSubForm')->render(),
        array(
                'title' => 'Stammdaten',
        ),
        array(
        )
);

echo $this->contentPane(
        "client_inlineForm_userContentPane",
        $this->form->getSubForm('client_userSubForm')->render(),
        array(
                'title' => 'Benutzerdaten',
        ),
        array(
        )
);

echo $this->accordionContainer()->captureEnd($containerId);
Und siehe da, das funtkioniert. Es muss also an Zend_Dojo_Form liegen. Und ich bin sicher, dass alle notwendigen JS- und CSS-Dateien geladen werden.
 

bytecounter

New member
So, nun habe ich die Lösung selbst erarbeitet. Für alle, die das gleiche Problem haben: Der dijitForm-Decorator muss raus!

Ich habe es nun so gelöst, dass ich bereits in der init-Methode alle Decoratoren manuell setze:
PHP:
        $this->addDecorator('FormElements');
        //$this->addDecorator('DijitForm');
                
        $this->addDecorator('AccordionContainer');
        $this->addDecorator('HtmlTag');

Danke noch für Eure Hilfe!
 

bytecounter

New member
So, nun habe ich die Lösung selbst erarbeitet. Für alle, die das gleiche Problem haben: Der dijitForm-Decorator muss raus!

Ich habe es nun so gelöst, dass ich bereits in der init-Methode alle Decoratoren manuell setze:
PHP:
        $this->addDecorator('FormElements');
        //$this->addDecorator('DijitForm');       // => Ist zwar ein Default-Decorator, beisst sich aber mit anderen Containern (Accordion, Tab, ...) 
                
        $this->addDecorator('AccordionContainer');
        $this->addDecorator('HtmlTag');

Danke noch für Eure Hilfe!
 
Oben