• 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

Accordion Container Problem

xyz

New member
Liebe Community,

Ich hab ein Problem meine Formular Elemente in einem AccordionContainer darzustellen. Leider hab ich trotz umfassender Suche nichts passendes gefunden, weder im Forum noch bei Google.

Hier mein Code:
PHP:
<?php

class KundenaddController extends Zend_Controller_Action
{

    public function init()
    {
        $this->view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");
        
    }

    public function indexAction()
    {
        $daten=array("Name","Strasse","Wohnort","Telefon","Gebursdatum","Beruf","Branche");
        $this->view->form=$this->createForm($daten);
    }
    
    private function createForm($daten)
    {
        $form = new Zend_Form;
        $form->setMethod('post');
        
        for($i=0; $i<count($daten);$i++){
            $form->addElement(
            'text', $daten[$i], array(
                'label' => $daten[$i],
                'required' => true,
                'filters'    => array('StringTrim'),
            ));
        }
        
        $form->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'speichern',
        ));
        
        $form->setDecorators(array(
        'Element',
        array('AccordionContainer', array(
            'id'          => 'tabContainer',
            'style'       => 'width: 600px;',
            'jQueryParams' => array(
                'alwaysOpen' => false,
                'animated'   => "easeslide"
            ),
        )),
        'Form'
        ));

        return $form;
    }
}
Darauf gibts n Warning: "Warning: Exception caught by form: Plugin by name 'Element' was not found in the registry;"


Vll könnt ihr mir ja helfen :)
 

Kaiuwe

Super-Moderator
Willkommen im Forum!
Darauf gibts n Warning: "Warning: Exception caught by form: Plugin by name 'Element' was not found in the registry;"
Die Warnung ist doch eindeutig: Es gibt kein Dekorierer mit dem Namen „Element“.
In der Doku ist der zu verwendende Dekorierer erläutert und es gibt sogar einige Code-Beispiel im Zusammenhang mit den Dekorierern für „ZendX_JQuery“-Formularen.
PHP:
<?php

[QUOTE="xyz, post: 69035, member: 3344"]class KundenaddController extends Zend_Controller_Action
 {
    public function indexAction()
    {
        $daten=array("Name","Strasse","Wohnort","Telefon","Gebursdatum","Beruf","Branche");
        $this->view->form=$this->createForm($daten);
    }
    
    private function createForm($daten)
    {
        $form = new Zend_Form;
        $form->setMethod('post');
        
        for($i=0; $i<count($daten);$i++){
            $form->addElement(
            'text', $daten[$i], array(
                'label' => $daten[$i],
                'required' => true,
                'filters'    => array('StringTrim'),
            ));
        }
        
        $form->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'speichern',
        ));
        
        $form->setDecorators(array(
        'Element',
        array('AccordionContainer', array(
            'id'          => 'tabContainer',
            'style'       => 'width: 600px;',
            'jQueryParams' => array(
                'alwaysOpen' => false,
                'animated'   => "easeslide"
            ),
        )),
        'Form'
        ));

        return $form;
    }
}

[/QUOTE]
Empfehlung: Formular in ein eigene Klasse auslagern.
 

xyz

New member
danke für die Antwort, ich hab das Beispiel mal in mein Projekt eingebunden. Jedoch sagt er mir dann immer "undefinded Variable in Line 86" (
PHP:
$formString = $form->render($view);
PHP:
       public function indexAction()
    {
        $form = new ZendX_JQuery_Form();
        $form->setAction('formdemo.php');
        $form->setAttrib('id', 'mainForm');
        $form->setAttrib('class', 'flora');
     
        $form->setDecorators(array(
        'FormElements',
        array('TabContainer', array(
            'id'          => 'tabContainer',
            'style'       => 'width: 600px;',
        )),
        'Form',
        ));
        
            $subForm1 = new ZendX_JQuery_Form();
    $subForm1->setDecorators(array(
        'FormElements',
        array('HtmlTag',
              array('tag' => 'dl')),
        array('TabPane',
              array('jQueryParams' => array('containerId' => 'mainForm',
                                            'title' => 'DatePicker and Slider')))
    ));
     
    $subForm2 = new ZendX_JQuery_Form();
    $subForm2->setDecorators(array(
       'FormElements',
       array('HtmlTag',
             array('tag' => 'dl')),
       array('TabPane',
             array('jQueryParams' => array('containerId' => 'mainForm',
                                           'title' => 'AutoComplete and Spinner')))
    ));
        // Add Element Date Picker
    $elem = new ZendX_JQuery_Form_Element_DatePicker(
                    "datePicker1", array("label" => "Date Picker:")
                );
    $elem->setJQueryParam('dateFormat', 'dd.mm.yy');
    $subForm1->addElement($elem);
     
    // Add Element Spinner
    $elem = new ZendX_JQuery_Form_Element_Spinner(
                    "spinner1", array('label' => 'Spinner:')
                );
    $elem->setJQueryParams(array('min' => 0, 'max' => 1000, 'start' => 100));
    $subForm1->addElement($elem);
     
    // Add Slider Element
    $elem = new ZendX_JQuery_Form_Element_Slider(
                    "slider1", array('label' => 'Slider:')
                );
    $elem->setJQueryParams(array('defaultValue' => '75'));
    $subForm2->addElement($elem);
     
    // Add Autocomplete Element
    $elem = new ZendX_JQuery_Form_Element_AutoComplete(
                    "ac1", array('label' => 'Autocomplete:')
                );
    $elem->setJQueryParams(array('source' => array('New York',
                                                 'Berlin',
                                                 'Bern',
                                                 'Boston')));
    $subForm2->addElement($elem);
     
    // Submit Button
    $elem = new Zend_Form_Element_Submit("btn1", array('value' => 'Submit'));
    $subForm1->addElement($elem);
        
        $form->addSubForm($subForm1, 'subform1');
    $form->addSubForm($subForm2, 'subform2');
     
    $formString = $form->render($view);
    }
    }
 

Kaiuwe

Super-Moderator
danke für die Antwort, ich hab das Beispiel mal in mein Projekt eingebunden. Jedoch sagt er mir dann immer "undefinded Variable in Line 86" (
PHP:
$formString = $form->render($view);[/QUOTE]
Du musst doch nicht das Formular im Kontroller rendern. Übergib es einfach an dein „View“-Skript und gib es dort aus:
[PHP]echo $this->form
 

-iis-

New member
Method accordionContainer does not exist

Jetzt habe ich auch ein Problem mit dem Accordion:
Ich habe eine Formularklasse MyForm.phtml und mit folgendem Code:
PHP:
<?
class Form_DojoCreateUserForm extends Zend_Dojo_Form
{
   public $_selectOptions;
   public function init()  
    {  
        // Dojo-enable all sub forms:
  

        $this->setMethod('post'); // post form
        $this->setAttrib('accept-charset', 'utf-8');
        
        
        $this->accordionContainer()->captureStart('main-container',
                array('design' => 'headline'),
                array(
                        'style'=>'height:400px;width:400px'
                ));
        
        echo $this->accordionPane(
                'home',
                'This is home page',
                array('region' => 'top','title'=>'Home'),
                array('style' => 'background-color: white;')
        );
        
        echo  $this->accordionPane(
                'gallery',
                'Contents of gallery here',
                array('region' => 'left', 'title'=>'Gallery'),
                array('style' => 'background-color: white;')
        );

..etc..
und bekomme den Fehler:
Zend_Form_Exception: Method accordionContainer does not exist
Was mache ich da falsch?
 

Kaiuwe

Super-Moderator
PHP:
<?
class Form_DojoCreateUserForm extends Zend_Dojo_Form
{
   public $_selectOptions;
   public function init()  
    {  
        // Dojo-enable all sub forms:
  

        $this->setMethod('post'); // post form
        $this->setAttrib('accept-charset', 'utf-8');
        
        
        $this->accordionContainer()->captureStart('main-container',
                array('design' => 'headline'),
                array(
                        'style'=>'height:400px;width:400px'
                ));
        
        echo $this->accordionPane(
                'home',
                'This is home page',
                array('region' => 'top','title'=>'Home'),
                array('style' => 'background-color: white;')
        );
        
        echo  $this->accordionPane(
                'gallery',
                'Contents of gallery here',
                array('region' => 'left', 'title'=>'Gallery'),
                array('style' => 'background-color: white;')
        );

..etc..
und bekomme den Fehler:
Code:
Zend_Form_Exception: Method accordionContainer does not exist
Was mache ich da falsch?
Es gibt zwei Möglichkeiten:
  • Du hast die Fehlermeldung nicht gelesen.
  • Du hast die Grundlagen von OOP nicht verstanden.
Ein Formular kennt keine „Dijit Layout“-Elemente!

Und wieso willst überhaupt in deiner Formularklasse etwas ausgeben?! :confused:
 
Oben