turk porno porno escort rokettube
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 20 von 22

Thema: Zusammenlegen von Form Feldern (Decoratoren)

  1. #1
    Neuer Benutzer
    Registriert seit
    28.05.2008
    Beiträge
    19
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Frage Zusammenlegen von Form Feldern (Decoratoren)

    Servus zusammen,

    ich komme hier gerade nicht weiter, ich möchte gerne ein Formular ändern in dem man seine Adressdaten eingeben kann. Hier das Formular:

    PHP-Code:
    class Addresses_Form_SubForm_MainAddress extends Zend_Form_SubForm
    {
        public function 
    __construct($options null)
        {
            
    parent::__construct($options);

            
    $street $this->createElement('text''street');
            
    $street->setLabel('Straße:')
            ->
    addFilter(new Isw_Filter_AlnumExt)
            ->
    addValidator('stringLength'false, array(0255));

            
    $zip_code $this->createElement('text''zip_code');
            
    $zip_code->setLabel('PLZ:')
            ->
    addFilter(new Isw_Filter_AlnumExt)
            ->
    addValidator('int');

            
    $city $this->createElement('text''city');
            
    $city->setLabel('Stadt:')
            ->
    addFilter(new Isw_Filter_AlnumExt)
            ->
    addValidator('stringLength'false, array(0255));

            
    $post_office_box $this->createElement('text''post_office_box');
            
    $post_office_box->setLabel('Postfach:')
            ->
    addFilter(new Isw_Filter_AlnumExt)
            ->
    addValidator('stringLength'false, array(0255));

            
    $post_office_box_zip_code $this->createElement('text''post_office_box_zip_code');
            
    $post_office_box_zip_code->setLabel('P. PLZ:')
            ->
    addFilter(new Isw_Filter_AlnumExt)
            ->
    addValidator('stringLength'false, array(0255));

            
            
    $locale = new Zend_Locale();
            
    $lang 'de_DE';
            
    $countries $locale->getTranslationList('Territory'$lang2);
            
    asort($countriesSORT_LOCALE_STRING);

            
    $country $this->createElement('select''country');
            
    $country->setLabel('Land:')
            ->
    addValidator('stringLength'false, array(0255))
            ->
    addMultiOptions($countries)
            ->
    setValue('DE');

            
    $this->addElements(array(
                    
    $street,
                    
    $zip_code,
                    
    $city,
                    
    $post_office_box,
                    
    $post_office_box_zip_code,
                    
    $country,
                )
            );

            
    $this->setElementDecorators(array(
                    
    'viewHelper',
                    
    'Errors',
                    array(
                        array(
    'data'=>'HtmlTag'),
                        array(
    'tag'=>'td')
                    ),
                    array(
                        
    'Label',
                        array(
    'tag'=>'td')
                    ),
                    array(
                        array(
    'row'=>'HtmlTag'),
                        array(
    'tag'=>'tr')
                    )
                )
            );

            
    $this->setDecorators(array(
                    
    'FormElements',
                    array(
                        array(
    'data'=>'HtmlTag'),
                        array(
    'tag'=>'table''class' => 't1'),
                    )
                )
            );
        }

    Das wird daraus gemacht:

    HTML-Code:
    <legend>Adresse</legend>
    <table class="t1">
    <tr><td id="street-label"><label for="mainAddressSubForm-street" class="optional">Straße:</label></td>
    <td>
    <input type="text" name="mainAddressSubForm[street]" id="mainAddressSubForm-street" value="" /></td></tr>
    <tr><td id="zip_code-label"><label for="mainAddressSubForm-zip_code" class="optional">PLZ:</label></td>
    <td>
    <input type="text" name="mainAddressSubForm[zip_code]" id="mainAddressSubForm-zip_code" value="" /></td></tr>
    <tr><td id="city-label"><label for="mainAddressSubForm-city" class="optional">Stadt:</label></td>
    <td>
    <input type="text" name="mainAddressSubForm[city]" id="mainAddressSubForm-city" value="" /></td></tr>
    <tr><td id="post_office_box-label"><label for="mainAddressSubForm-post_office_box" class="optional">Postfach:</label></td>
    <td>
    <input type="text" name="mainAddressSubForm[post_office_box]" id="mainAddressSubForm-post_office_box" value="" /></td></tr>
    <tr><td id="post_office_box_zip_code-label"><label for="mainAddressSubForm-post_office_box_zip_code" class="optional">P. PLZ:</label></td>
    <td>
    <input type="text" name="mainAddressSubForm[post_office_box_zip_code]" id="mainAddressSubForm-post_office_box_zip_code" value="" /></td></tr>
    <tr><td id="country-label"><label for="mainAddressSubForm-country" class="optional">Land:</label></td>
    Soweit alles toll, jetzt würde ich nur gerne die Postleitzahl und die Stadt direkt hintereinander in einer Tabellenzelle anzeigen. Ich denke dafür muss ich den Decorator der beiden Felder überschreiben, nur wie? Hab in der Dokumentation nichts gefunden.

    Ich möchte einfach das </td></tr> hinter der PLZ löschen und das <tr><td> vor der Stadt, dann sind ja beide in einer Zeile. Ist das einfach möglich, oder soll ich ein Viewscript verwenden und das dann hard coden?

    Gruß

  2. #2
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Würdest du nicht auf (total veraltete) Tabellenlayouts setzen, könntest du das einfach per CSS gestalten. So bleibt dir wohl nichts anderes übrig, als für die beiden Elemente eigene Dekorateure zu setzen, die (für sich genommen) ungültiges HTML erzeugen...

  3. #3
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Sagattarii
    Soweit alles toll, jetzt würde ich nur gerne die Postleitzahl und die Stadt direkt hintereinander in einer Tabellenzelle anzeigen. Ich denke dafür muss ich den Decorator der beiden Felder überschreiben, nur wie? Hab in der Dokumentation nichts gefunden.

    Ich möchte einfach das </td></tr> hinter der PLZ löschen und das <tr><td> vor der Stadt, dann sind ja beide in einer Zeile. Ist das einfach möglich, oder soll ich ein Viewscript verwenden und das dann hard coden?
    • Der King hat es schon angesprochen: Formulare sind keine tabellarischen Daten!
    • Zend_Form kennt eine „init“-Methode, da kannst du dir das mit dem Konstruktor sparen.
    • Filter kann man für ein Formular global setzen, wie bei den Dekorierern.
    • Die Anzeigegruppe sind dafür gedacht, um Felder zusammenzufassen.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  4. #4
    Neuer Benutzer
    Registriert seit
    28.05.2008
    Beiträge
    19
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Also erst mal Danke für die schnellen Antworten, ich denke KingCrunch hat Recht und ich stelle das schreibe das ganze Formular um und mache das per CSS. Ich werde auch die init Methode verwenden, nur stammt das Formular noch aus pre 1.5 zeiten, da gab es das noch nicht.

  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Sagattarii
    ...ich denke KingCrunch hat Recht und ich stelle das schreibe das ganze Formular um und mache das per CSS
    Wie geschrieben, mehrere Felder zu einer Gruppe zusammen geht über die Anzeigegruppen. Schau einfach mal rein, denn auch ohne Tabelle wirst du diese benötigen. (Es geht auch ohne, ist aber zu umständlich!)
    Zitat Zitat von Sagattarii
    Ich werde auch die init Methode verwenden, nur stammt das Formular noch aus pre 1.5 zeiten, da gab es das noch nicht.
    Zend_Form kam mit der Version 1.5 und die „init“-Methode wurde in der Version 1.5.1 eingeführt.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  6. #6
    Neuer Benutzer
    Registriert seit
    28.05.2008
    Beiträge
    19
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Du hast bei beiden Dingen Recht Aber wahrscheinlich habe ich mich damals auf eine veraltete Dokumentation bezogen, bei mir wurde auf jeden Fall immer der Kontruktor missbraucht, das habe ich jetzt aber überall geändert.

    Nun zu meinem Problem, bis jetzt habe ich folgendes:

    PHP-Code:
    class Addresses_Form_EditAddress extends Zend_Form {
        public function 
    init() {

            
    $this->setName('address');
            
    $this->setMethod('post');
            
    $this->setAttribs(array('class' => 'standardform''accept-charset' => 'UTF-8'));

            
    $street $this->createElement('text''street');
            
    $street->setLabel('Straße:')
                    ->
    addFilter(new Isw_Filter_AlnumExt)
                    ->
    addValidator('stringLength'false, array(0255));

            
    $zip_code $this->createElement('text''zip_code');
            
    $zip_code->setLabel('PLZ:')
                    ->
    addFilter(new Isw_Filter_AlnumExt)
                    ->
    addValidator('int')
                    ->
    removeDecorator('label')
                    ->
    removeDecorator('HtmlTag')
                    ->
    setAttrib('style''width:50px');

            
    $city $this->createElement('text''city');
            
    $city->setLabel('Stadt:')
                    ->
    addFilter(new Isw_Filter_AlnumExt)
                    ->
    addValidator('stringLength'false, array(0255))
                    ->
    removeDecorator('label')
                    ->
    removeDecorator('HtmlTag')
                    ->
    setAttrib('style''width:190px');

            
    $country $this->createElement('select''country');
            
    $country->setLabel('Land:')
                    ->
    addMultiOptions($this->getCountryOptions())
                    ->
    setAttribs(array('style' => 'width:250px;'));
            if (
    $country->getValue() == "") {
                
    $country->setValue("DE");
            }

             
    $this->addElements(array(
                    
    $street,
                    
    $zip_code,
                    
    $city,
                    
    $country,
                    )
            );

            
    $this->addDisplayGroup(array('zip_code''city'), 'zip_code_city_wrapper');
            
    $zip_code_city_wrapper $this->getDisplayGroup('zip_code_city_wrapper');
            
    $zip_code_city_wrapper->removeDecorator('fieldset');
            
    $zip_code_city_wrapper->setDescription('PLZ, Stadt');

            
    $this->setDecorators(array(
                    array(
    'ViewScript', array('viewScript' => 'forms/editAddressForm.phtml'))
            )); 
    Das ganze wird in meinem Viewscript ausgegeben mit
    PHP-Code:
    <fieldset>
    <legend>Zustelladresse</legend>
    <?php echo $this->element->street ?>
    <?php 
    echo $this->element->zip_code_city_wrapper ?>
    <?php 
    echo $this->element->country ?>
    </fieldset>
    Ich brauche ein Custom Viewscript für andere Dinge, deshalb habe ich das so gemacht. Funktioniert soweit auch ganz ok, bis auf einige Kleinigkeiten: Eine DisplayGroup wird standardmäßig mit einem Fieldset gewrapped, das will ich ja aber nicht, es sollen einfach nur zwei Elemente in eines gepackt werden, deshalb habe ich den Fieldset Decorator entfernt.

    Hier mal ein Bild wie es aussieht und der HTML Code dazu:



    HTML-Code:
    <legend>Zustelladresse</legend>
    <dt id="delivery_street-label">
    <label for="delivery_street" class="optional">Straße:</label>
    </dt>
    <dd id="delivery_street-element">
    <input type="text" name="delivery_street" id="delivery_street" value="" />
    </dd>
    <dt id="delivery_zip_code_city_wrapper-label">&nbsp;</dt>
    <dd id="delivery_zip_code_city_wrapper-element">
    <dl>
    <input type="text" name="delivery_zip_code" id="delivery_zip_code" value="" style="width:50px" />
    <input type="text" name="delivery_city" id="delivery_city" value="" style="width:190px" />
    </dl>
    </dd>
    <dt id="delivery_country-label">
    <label for="delivery_country" class="optional">Land:</label>
    </dt>
    <dd id="delivery_country-element">
    <select name="delivery_country" id="delivery_country" style="width:250px;">
        <option value="AF" label="Afghanistan">Afghanistan</option>
        <option value="EG" label="Ägypten">Ägypten</option>
    </select>
    </dd>
    </fieldset>
    Das ist schon fast das Ergebnis, das ich haben möchte, jetzt bräuchte ich nur noch ein Label für die DisplayGroup (Vorschläge? Description missbrauchen?) damit das genauso aussieht wie die anderen Felder. Und ich sollte wohl die Definition List loswerden (<dl>) und dann möchte ich noch dass Errors, nicht direkt unter dem Input erscheinen sondern für beide Felder zusammengefasst darunter erscheinen, sonst macht es natürlich das Layout kaputt, da die beiden Felder "float:left" sind und ein Error dann dazwischen erscheint, hier ein Beispiel dazu:



    Gerne nehme ich auch Vorschläge für eine alternative Implementierung entgegen

  7. #7
    Neuer Benutzer
    Registriert seit
    28.05.2008
    Beiträge
    19
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Scheint doch alles nicht so leicht zu sein, habe es jetzt noch nicht geschafft, ein zusätzliches Label anzuzeigen, vielleicht muss es doch direkt im Viewscript einfügen, oder hat jemand Vorschläge?

  8. #8
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    Ich hatte das selbe problem.
    Hab es aber mit einer SubForm gelösst.
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  9. #9
    Erfahrener Benutzer Avatar von Pwner
    Registriert seit
    06.11.2007
    Beiträge
    560
    Thanks
    0
    Thanked 8 Times in 5 Posts

    Standard

    Ich hatte das selbe problem.
    Hab es aber mit einer SubForm gelösst.
    Wie schön für dich! Behalte die Details dazu für dich, dann hast du mehr davon, weil die anderen noch suchen müssen während du eine funktionierende Implementierung besitzt.

  10. #10
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    Klar für euch!

    Default_Form_Adresse
    PHP-Code:
    class Default_Form_Adresse extends Zend_Form
    {
        public function 
    init(){
    ....
    $ZipCitySubForm = new Default_Form_ZipCity("Zip/ City.");
                
    $ZipCitySubForm ->addElement($ZipElement);
                
    $ZipCitySubForm ->addElement($CityElement);
            
    $this->addSubForm($ZipCitySubForm ,"zipcity");
    ...

    Default_Form_ZipCity

    PHP-Code:
    class Default_Form_ZipCity extends Zend_Form_SubForm 
    {
        
    /**
         * Whether or not form elements are members of an array
         * @var bool
         */
        
    protected $_isArray false;
        

        
    /**
         * 
         * Enter description here ...
         * @param string $name
         */
        
    function __construct($name=""){
            
    parent::__construct();
            
            
    //$this->setName($name);
            
    $this->setLegend($name);
            
        }
        
        public function 
    getLabel(){
            return 
    $this->getLegend();
        }
        
        public function 
    isRequired(){
            
        }
        
        public function 
    addElement($element$name null$options null){
            
    $decorators = array('ViewHelper');
            
    $element->setDecorators($decorators);
            
    parent::addElement($element$name$options);
        }
        
        
    /**
         * Load the default decorators
         * 
         * @return void
         */
        
    public function loadDefaultDecorators()
        {
            if (
    $this->loadDefaultDecoratorsIsDisabled()) {
                return;
            }

            
    $decorators $this->getDecorators();
            if (empty(
    $decorators)) {
                
    $this->addDecorator('FormElements')
                     ->
    addDecorator('Label')
                     ->
    addDecorator('HtmlTag', array('tag' => 'div''class' => 'form-row'));
            }
        }

    habe ich noch was vergessen?
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  11. #11
    Erfahrener Benutzer Avatar von Pwner
    Registriert seit
    06.11.2007
    Beiträge
    560
    Thanks
    0
    Thanked 8 Times in 5 Posts

    Standard

    Wie wäre es damit? Damit bekomme ich die Elemente in eine Zeile.

    PHP-Code:
    <?php
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader Zend_Loader_Autoloader::getInstance();

    class 
    MyForm extends Zend_Form
    {
        public function 
    init()
        {
            
    $this->addElement('text''strasse', array(
                
    'label' => 'Straße',
            ));

            
    $this->addElement('text''plz', array(
                
    'label' => 'Postleitzahl',
                
    'size'  => 6,
                
    'decorators' => array(
                    
    'ViewHelper',
                    
    'Label',
                ),
            ));

            
    $this->addElement('text''ort', array(
                
    'label' => 'Ort',
                
    'decorators' => array(
                    
    'ViewHelper',
                    
    'Label',
                ),
            ));

            
    $this->addDisplayGroup(array('plz''ort'), 'anschrift', array(
                
    'decorators' => array(
                    
    'FormElements',
                    array(
    'DtDdWrapper', array('dtLabel' => 'Anschrift')),
                ),
            ));

            
    $this->addElement('text''land', array(
                
    'label' => 'Land',
            ));
        }
    }

    echo <<<EOT
    <style>
    dl, dd {
       margin: 0;
    }

    dt {
       width: 5em;
       float: left;
    }

    #anschrift-element label {
       display: none;
    }

    </style>
    EOT;

    $form = new MyForm();
    $form->setView(new Zend_View());

    header('Content-Type: text/html; charset=utf-8');
    echo 
    $form;

  12. The Following User Says Thank You to Pwner For This Useful Post:

    schlupp2002 (18.01.2012)

  13. #12
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    Hab gerade festgestellt, das die SubForm Elemente obwohl ich gesagt habe

    PHP-Code:
    $_isArray false
    trotzdem als Array in dem Form übergeben werden

    PHP-Code:
    array(11) {
      [
    "Name"] => string(18"Annas"
      
    ["Nachname"] => string(1"sfdsfds"
      
    ["zipcity"] => array(2) {
        [
    "zip"] => string(4"fsdf"
        
    ["city"] => string(5"sdfsd"
      
    }

    warum kommen die den nun doch als Array an?
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  14. #13
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von flod Beitrag anzeigen
    warum kommen die den nun doch als Array an?
    Schau mal den Quellcode der Methode „addSubForm“, denn soweit ich mich erinnern kann, wird unter bestimmten Umständen dort „setElementsBelongTo“ für das neue Formular ausgeführt.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  15. #14
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Schau mal den Quellcode der Methode „addSubForm“, denn soweit ich mich erinnern kann, wird unter bestimmten Umständen dort „setElementsBelongTo“ für das neue Formular ausgeführt.
    Damit kann ich de Array Namen ändern. ok aber das bringt mir ja soweit nichts, möchte ja das die SubForm Elemente dem Form angehören.
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  16. #15
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von flod Beitrag anzeigen
    Damit kann ich de Array Namen ändern. ok aber das bringt mir ja soweit nichts, möchte ja das die SubForm Elemente dem Form angehören.
    Schau nochmals genau rein, denn „setElementsBelongTo“ wird nicht immer ausgeführt.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  17. #16
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Schau nochmals genau rein, denn „setElementsBelongTo“ wird nicht immer ausgeführt.
    PHP-Code:
    if (($oldName $form->getName()) &&
                
    $oldName !== $name &&
                
    $oldName === $form->getElementsBelongTo()) {
                
    $form->setElementsBelongTo($name);
            } 
    sry was meinste du genau?
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  18. #17
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von flod Beitrag anzeigen
    PHP-Code:
    if (($oldName $form->getName()) &&
                
    $oldName !== $name &&
                
    $oldName === $form->getElementsBelongTo()) {
                
    $form->setElementsBelongTo($name);
            } 
    sry was meinste du genau?
    Muss es gerade wieder aus dem Kopf versuchen:
    PHP-Code:
    // Form
    $form = new Zend_Form();

    // Subform
    $subForm = new Zend_Form_SubForm();
    $subForm->setIsArray(false);

    // Elements
    $subForm->addElement(
        
    'text',
        
    'foo',
        array(
            
    'label' => 'Foo',
        )
    );

    $form->addSubForm($subForm'bar'); 
    Sollte zu:
    HTML-Code:
    <input id="foo" type="text" value="" name="foo">
    führen.

    Nimm mal den Debugger zur Hand, dann solltest du ganz schnell das Problem finden können.

    Nachtrag: Konnte jetzt doch prüfen und kann daher bestätigen, das mein kurzes Beispiel passt.
    Geändert von Kaiuwe (19.04.2011 um 16:30 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  19. #18
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    @flod

    Habe mal deine Klasse getestet:
    PHP-Code:
    class Default_Form_ZipCity extends Zend_Form_SubForm 
    {
        
    /**
         * Whether or not form elements are members of an array
         * @var bool
         */
        
    protected $_isArray false;

        
    /**
         * 
         * Enter description here ...
         * @param string $name
         */
        
    function __construct($name=""){
            
    parent::__construct();
            
            
    //$this->setName($name);
            
    $this->setLegend($name);
        }
        
        public function 
    getLabel(){
            return 
    $this->getLegend();
        }
        
        public function 
    isRequired(){
            
        }
        
        public function 
    addElement($element$name null$options null){
            
    $decorators = array('ViewHelper');
            
            if (
    $element instanceof Zend_Form_Element) {
                
    $element->setDecorators($decorators);
            } else {
                
    $options['decorators'] = $decorators;
            }
            
            return 
    parent::addElement($element$name$options);
        }
        
        
    /**
         * Load the default decorators
         * 
         * @return void
         */
        
    public function loadDefaultDecorators()
        {
            if (
    $this->loadDefaultDecoratorsIsDisabled()) {
                return;
            }

            
    $decorators $this->getDecorators();
            if (empty(
    $decorators)) {
                
    $this->addDecorator('FormElements')
                     ->
    addDecorator('Label', array('disableFor' => true))
                     ->
    addDecorator('HtmlTag', array('tag' => 'div''class' => 'form-row'));
            }
        }
    }

    // Form
    $form = new Zend_Form();
    $form->removeDecorator('HtmlTag');

    // Subform
    $ZipCitySubForm = new Default_Form_ZipCity('Zip / City');

    $ZipCitySubForm->addElement(new Zend_Form_Element_Text('zip'));
    $ZipCitySubForm->addElement(new Zend_Form_Element_Text('city'));

    $form->addSubForm($ZipCitySubForm'zipcity'); 
    Läuft:
    HTML-Code:
    <form method="post" action="" enctype="application/x-www-form-urlencoded">
        <div class="form-row">
            <label class="optional">Zip / City</label>
            <input type="text" value="" id="zip" name="zip">
            <input type="text" value="" id="city" name="city">
        </div>
    </form>
    Beachte meine Anpassungen:
    PHP-Code:
    public function addElement($element$name null$options null){
        
    $decorators = array('ViewHelper');
        
        if (
    $element instanceof Zend_Form_Element) {
            
    $element->setDecorators($decorators);
        } else {
            
    $options['decorators'] = $decorators;
        }
        
        return 
    parent::addElement($element$name$options);
    }

    $this
    ->addDecorator('FormElements')
    ->
    addDecorator('Label', array('disableFor' => true))
    … 
    und:
    PHP-Code:
    $form = new Zend_Form();
    $form->removeDecorator('HtmlTag'); 
    Brauchst du wirklich die Klasse beim „div“-Element? Es reicht doch in CSS:
    Code:
    form div { … }
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  20. #19
    Erfahrener Benutzer
    Registriert seit
    28.10.2009
    Beiträge
    480
    Thanks
    7
    Thanked 13 Times in 5 Posts

    Standard

    @Kaiuwe

    Das Formular baut er mir auch mit meiner Klasse richtig.

    Problematisch ist es wenn ich per POST die Daten absende und per VormValid überprüfen...

    PHP-Code:
    if ($this->_request->isPost())
            {
                
    $formData $this->_request->getPost();
                
                if (
    $form->isValid($formData))
                {
    Zend_debug:dump($form->getValues()); 
    kommt folgendes:

    PHP-Code:
    array(1) {
        ....
        [
    "street"] => string(13"strasse"
        
    ["zipcity"] => array(2) {
          [
    "zip"] => NULL
          
    ["city"] => NULL
        
    }
    ...

    Da fehlen ihm dann die Values des Subforms obwohl Sie per POST mitgesendet werden.
    Geändert von flod (19.04.2011 um 17:40 Uhr)
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

  21. #20
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von flod Beitrag anzeigen
    Da fehlen ihm dann die Values des Subforms obwohl Sie per POST mitgesendet werden.
    Auch dies hatte ich getestet mit deiner Klasse und es läuft ebenfalls durch:
    PHP-Code:
    // Form
    $form = new Zend_Form();
    $form->removeDecorator('HtmlTag');

    // Subform
    $ZipCitySubForm = new Default_Form_ZipCity('Zip / City');

    $ZipCitySubForm->addElement(new Zend_Form_Element_Text('zip'));
    $ZipCitySubForm->addElement(new Zend_Form_Element_Text('city'));

    $form->addSubForm($ZipCitySubForm'zipcity');

    $form->addElement(
        
    'submit',
        
    'send',
        array(
            
    'label' => 'Send',
        )
    );

    // Validation
    if (count($_POST) && $form->isValid($_POST)) {
        
    Zend_Debug::dump($_POST'$_POST:');
        
    Zend_Debug::dump($form->getValues(), 'Form values:');

    Code:
    $_POST: array(3) {
      ["zip"] => string(3) "foo"
      ["city"] => string(3) "bar"
      ["send"] => string(4) "Send"
    }
    
    Form values: array(1) {
      ["zipcity"] => array(2) {
        ["zip"] => string(3) "foo"
        ["city"] => string(3) "bar"
      }
    }
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Seite 1 von 2 1 2 LetzteLetzte

Ähnliche Themen

  1. PHPUnit, testen von value bei input Feldern
    Von Schnoop im Forum Testing & Deployment
    Antworten: 0
    Letzter Beitrag: 30.10.2009, 19:06
  2. Integration von Enum Feldern
    Von deetee im Forum PHP X-Talk
    Antworten: 30
    Letzter Beitrag: 15.09.2009, 21:26
  3. Antworten: 2
    Letzter Beitrag: 07.01.2009, 23:56
  4. Antworten: 0
    Letzter Beitrag: 11.09.2008, 11:27
  5. zend_db_table mit modifzierten feldern
    Von rufinus im Forum DB
    Antworten: 0
    Letzter Beitrag: 25.01.2008, 07:08

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •