Zend_Form + DHTML içerik

3 Cevap php

Nedir dinamik Zend_Form yoluyla oluşturulan oluyor bir form NEW dhtml içerik eklemek için en iyi yoldur. Örnek, formu şöyle oluşturulur ki:

class formUser extends Zend_Form {
    public function __construct( $options = null ) {
        parent::__construct( $options );

        $page1 = new Zend_Form_Element_Text( 'page1' );
        $page1->setLabel( 'Page 1' );

        $submit = new Zend_Form_Element_Submit( 'submit' );
        $this->addElements( array( $page1, $submit ) );
    }
}

İşte formu ", sayfa1" ONE denilen ve sadece bir unsuru oluşturur but what if I wanted to throw in an "Add" button in the view that would dynamically generate more elements, Sayfa2, page3, Page4, vb gibi, Zend_Form ile entegre ederken?

Here is the effect I'm talking about

This isn't me, but he's got the same question and maybe worded it better

Benim durumumda, onun aslında bir çocuk ve ebeveyn ilişkileri. Bu alanı çevresinde, bir kişi ya da 0 15 çocuğum var olabilir ve ben bir kaş olmaz.

Teşekkürler!

3 Cevap

Ben şimdi bu hakkı kodlama detaya gitmek için zamanımız var, ama burada bu konuda gitmek nasıl yok:

Düzenlenebilir olması için formun yapısı (ve sadece bunu verilerini) istediğiniz beri, bunu örneğini ve bu oturumda saklamak zorunda olacak.

Bunun yerine sadece bazı ek HTML biçimlendirmesi üretme, JavaScript Ajax geri sunucuya çağrı yapmak zorunda kalacak. "Add" butonuna tıklandığında bu şekilde adlandırılan eylem sonra oturumunda Zend_Form örnek deposunu değiştirmek istiyorum. Ajax arama daha sonra eklenecek ek biçimlendirme veya tüm form biçimlendirme yeni sürümünü ya dönmek olabilir.

Eski durumda, biçimlendirme tarayıcı ekran sunucuda Zend_Form gösterimi ile tutarlı bir şekilde takıldığından emin olmak için JavaScript kod kadar olacaktır. Ikinci durumda - tüm form döndürülür nerede - kullanıcı girişi Ajax çağrısı transfer edilmesi veya yeni bir sürümü ile form değiştirildiği zaman kayıp olacağını olurdu.

Bunu çözmek için herhangi bir özel Zend şeyler gerek olduğunu sanmıyorum - deftere javascript örnek gönderdiğiniz zaman, size gönderilen sayfada veri olacak, sonra istediğiniz sayfanızda html katacak tüm Aynı. Sadece başladığınızda kullandığınız adlandırma şemasını takip ettiğinizden emin olun. Hatta dizi kullanabilirsiniz

$element->setIsArray(true);

Böyle HTML oluşturmak için

name="foo[]" id="foo"

Görevi yerine getirmek için bir ipucu yeni bir öğe eklediğinizde size 'pageNb' artırmak verebilecek bir gizli girişi tanımlamak olabilir.

Sonra süzün ve için Formunuzu doğrulamak, size dynamicly controller içinde eleman ve validasyonlar ihtiyacını oluşturmak için bir döngü kullanabilirsiniz.

Gibi bir şey:

/ / PHP

$userForm = new formUser();

for ($i = 0; $i < $_POST['pageNumber']; ++$i)
{
  $element = new Zend_Form_Element_Text('page' . $i);
  $element->addValidator('SomeValidator');

  $userForm->addElement($element);
}

if ($userForm->isValid($_POST]) 
{
 // bla bla bla
}

/ / Javascript

function addNewInput ()
{
   pageNb = document.getElementbyId('pageNb').value;
   pageNb.value = ++pageNb;
   // here put the trick to create a new node/input element.
   newElement.id = pageNb.value;
}