2011-01-30 11 views
0

Joomlaの一般的なChoronoFormプラグインを使用しています。私は動的なフィールドを含むフォームを作成しました。複数の「項目」を追加するには、javascript関数を使用します。ユーザは、「別のアイテムを追加する」ボタンをクリックし、追加の「アイテム」を挿入するためにアイテムフィールドが再表示される。このウェブサイトのフォームhttp://www.unclesmoney.co.uk/home3.phpに似ています(アイテムの詳細セクションを記入し、「別のアイテムを追加」をクリックしてください)。フォームが提出されると、情報は電子メールで送信されます。問題は、最後に挿入されたアイテムのみが送信され、他のitensは無視されます(送信されません)。 2つ以上のアイテムのみを記入すると、記入された最後のアイテムの詳細が送信されます。私はこれらの値をhtmlテンプレートに渡すためにPHPやjavascriptを書く必要があるとか、もっと簡単な方法がありますか?どのように私はこれを達成するためにいくつかの指針で行うことができます。このフォーラムには似たようなスレッドがあり、大きな助けになっていますが、htmlテンプレートを変更する方法はわかりません。ありがとうフォームにダイナミックフィールドを追加する(Chronoform)

<div class="form_element cf_dropdown"> 
    <label class="cf_label" style="width: 150px;">Item Type:</label> 
    <select class="cf_inputbox validate-selection" id="select_19" size="1" title="" name="select_19"> 
    <option value="">Choose Option</option> 
     <option value="Option 1">Option 1</option> 
<option value="Option 2">Option 2</option> 
<option value="Option 3">Option 3</option> 
<option value="Option 4">Option 4</option> 
<option value="Option 5">Option 5</option> 

    </select> 

    </div> 
    <div class="cfclear">&nbsp;</div> 
</div> 

<div class="form_item"> 
    <div class="form_element cf_textarea"> 
    <label class="cf_label" style="width: 150px;">Detail</label> 
    <textarea class="cf_inputbox required" rows="3" id="text_2" title="Please enter Item Detail" cols="30" name="text_2"></textarea> 

    </div> 
    <div class="cfclear">&nbsp;</div> 
</div> 

<div class="form_item"> 
    <div class="form_element cf_fileupload"> 
    <label class="cf_label" style="width: 150px;">File</label> 
    <input class="cf_fileinput cf_inputbox" title="" size="20" id="file_3" name="file_3" type="file" /> 

    </div> 
    <div class="cfclear">&nbsp;</div> 
</div> 

<div class="form_item"> 
    <div class="form_element cf_textbox"> 
    <label class="cf_label" style="width: 150px;">File 2</label> 
    <input class="cf_inputbox required validate-number" maxlength="150" size="30" title="Must contain a value" id="text_4" name="text_4" type="text" /> 

    </div> 
    <div class="cfclear">&nbsp;</div> 
</div> 
</div> 

<span id="writeroot"></span> 
<input type="button" value="Add Another Item" onclick="moreItems()" /> 
..... 

Javascript 

    var counter = 0; 

function moreItems() { 
    counter++; 
    var newFields = document.getElementById('readRoot').cloneNode(true); 
    newFields.id = ''; 
    newFields.style.display = 'block'; 
    var newField = newFields.childNodes; 
    for (var i=0;i<newField.length;i++) { 
     var theName = newField[i].name 
     if (theName) 
     newField[i].name = theName + counter; 
    } 
    var insertHere = document.getElementById('writeroot'); 
    insertHere.parentNode.insertBefore(newFields,insertHere); 
} 

答えて

0

Chronoformsはフォームテンプレートに簡単な置き換えを行い、フォームの値を入力します。あなたがそれを操作するコードを持っていなければ、ただ一つの値しか期待していません。あなたがする必要があるのは、フォームコードタブの "電子メールを送信する前にコードを送信する"領域にPHPを追加することです。余分なすべてのフィールドを素早くループして、Chronoformsが期待している単一の変数名にそれらを組み合わせて、問題を解決する必要があります。

+0

ブレント、返信いただきありがとうございます。あなたが見ることができるように私はクライアント側であるJavascriptを使用しています。私が間違っていない限り、私はサーバー側PHP内のjs変数を参照することができません。これらの「余分な」変数への参照をループに入れるにはどうすればよいですか?私は一種の固執されているので、例が分かるでしょう。 – Apprentice

+0

JavaScriptはフォームフィールドを追加するだけなので、結果のフィールドはすべて$ _POSTの一部として送信されます。すべてのものをループするためには、これを使うことができます - foreach($ _ POST as $ k => $ v)$$ k = $ v; –

関連する問題