Nasıl devre dışı seçeneğini seçenekler eklemek için QuickForm kullanabilirim?

2 Cevap php

Ben QuickForm aşağıdaki ile seçkin bir Widget oluşturur ki kullanarak kod var:

$form->addElement( 'select', 'state_id', 'State:', statesArray() );

statesArray() devletlerin mevcut almak için veritabanını sorgular ve devlet adları bağlı kimlikleri ile bir ilişkisel dizi döndürür. I çözeltisi boyunca benzer bir teknik kullanıyorum.

Varsayılan olarak seçme menüsü devre her ikisi de bir çizgi, ardından "bir durum seçin" gibi bir şey diyor ki ne yapmak istiyorum, engelli iki seçenekleri ile bu dizi Önlerine edilir. Ben QuickForm kullanarak olmasaydı, seçeneğini ilk iki seçenek olarak şu olurdu:

  <option value="" disabled="disabled">Select a State</option>
  <option value="" disabled="disabled">-</option>

Her iki seçenek devre dışı bırakılır ve kullanıcı ilk değeri seçeneği bırakırsa, seçin Widget formu kontrol kodu tarafından geçersiz yapılan boş bir değer gönderir.

QuickForm ile bunu yapmanın bir yolu var mı?

Thanks, Chuck

2 Cevap

Tamam, QuickForm belgelere içine çok derin kazma sonra, ben bunu anladım. Çözelti bir dizi seçin Widget doldurmak değil, ancak seçme elemanı elle forma bu eklemek inşa etmektir.

Başlangıçta, ben bu vardı:

function dbArray( $tableName, $fieldName ) {
    $query = <<< EOT
SELECT   `id`, `$fieldName`
FROM     `$tableName`
ORDER BY `$fieldName`
EOT;

    $link = connectToDatabase();
    $result = mysql_query( $query, $link );
    while ( $rec = mysql_fetch_assoc( $result ) );
    {
        $array[$rec['id']] = $rec[$fieldName];
    }

    return $array;
}

function statesArray() {
    return dbArray( 'states', 'name' );
}

$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( 'select', 'state_id', 'State:', statesArray() );

I array( 'none' => 'Please select a State' ) çağıran kod dizi dönmeden önce dbArray çağrısına önüne, ancak bu seçenek devre dışı bulmadı bir versiyonunu yaptım. Seçim sayısal çözüm olduğunu olduğunu onaylamak için bir kural ekleme ($form->addRule( 'state_id', 'You must select a state.', 'numeric' )). Ama ben yine de seçilebilir olduğunu gibi değildi. Burada bulunan çözümdür.

function statesSelect() {
    $select = HTML_QuickForm::createElement( 'select' );
    $select->addOption( 'Select a State', '', array( 'disabled' => 'disabled' ) );
    $select->addOption( '-', '', array( 'disabled' => 'disabled' ) );

    $statesArray = dbArray( 'states', 'name' );
    foreach ( $statesArray as $id => $name ) {
        $select->addOption( $name, $id );
    }

    return $select;
}

$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( statesSelect() );
$form->addRule( 'state_id', 'You must select a state.', 'required' );

Ben bu başkası yardımcı olur umarım. :)

Techinically, en iyi çözüm optgroup kullanmak, ancak tarayıcılar genellikle bu değere varsayılan olmaz olurdu ama onun yerine ilk option olarak select grubuna .

Lütfen Select State (size verilen eski okul çözeltisine benzer) "None" değerine sahip olması ve etkin ayrılmak değil Neden sonra Widget onlar boş bırakırsanız geçersiz formu var mı? Bu QuickForm kapsamı dışında mı?

Ben bir şey etkin veya devre dışı olup olmadığını çoğu kullanıcı fark yok düşünüyorum ve devre dışı bırakılması sadece parası un-seçilebilir yapmaktır.

Amacınız giriş doğrularken yönelik olduğunu? Eğer öyleyse, neden sadece kullanıcı göndermeden önce bir özürlü (ya da değer = "Boş") öğesi seçili olup olmadığını denetlemek için form ve QuickForm arasında bazı javascript eklemek değil mi?

Açıkçası ben tam bir resim elde etmek QuickForm belgeleri okumak gerekir, ama ben örnek olsun ne göre, sadece state_array için Please Choose State => None ekleyin ve sonra değil kullanmayı planladığınız ne şekilde olursa olsun onaylayıcısı olabilir geçerli bir girdi olarak "None" kabul.