2012-05-07 9 views
2

この質問は、ドラッグ・アンド・ドロップWYSIWYGオンラインフォームビルダであるFormStackに精通していることを前提としています。簡単な識別子でFormStackフィールドの名前を付ける(タグ付けする)ことはできますか?

背景

クライアントは、フォームを管理するためにFormStackを使用しています。現在、フォーム提出は電子メールで送信され、手動でデータベースに入力されます。予期せず、私の仕事はこのプロセスを自動化することです。これは、FormStackのWebHooks APIを使用すれば十分簡単です。フォーム送信をURLに送信することができます(例: PHPスクリプトを作成し、幸せに解析します。

質問

は、それは名前(またはタグ)FormStackフィールドに単純な識別子で可能ですか?

クライアントは、複数のフィールドが同じデータベース列に供給されるようにフォームをカスタマイズする必要があります。* FormStackただし、私が知る限り、フィールドラベルを指定する方法のみが提供されています。 Which of these trips interest you?であり、プログラマフレンドリな識別子ではない。 Trip。私のスクリプトは、文字列を比較しなければならないでしょう(ラベルの長さのために、タイプミスが発生しやすくなります)。この問題に対する賢明な回避策は何ですか?同じデータベース列に供給複数のフィールドが存在することができ

明確化*

理由は、クライアントが、条件付きフィールドを使用することです。たとえば、1つのフィールドが質問する可能性があります。Where are you studying abroad? "ヨーロッパ"を選択すると、条件フィールドが表示され、Which of these trips interest you?と表示され、ヨーロッパに関する選択肢が表示されます。ただし、ユーザーが「Africa」を選択した場合、同様のフィールドが表示されることがあります。 Which of these trips interest you?ですが、アフリカに関する選択肢があります。 FormStackでは、これらは実際には2つの異なるフィールドです。しかし、想像できるように、値は同じデータベース列Tripに属しています。

答えて

2

私は今のところハックに乗っています。 FormStackでは、ラベルにHTMLマークアップを使用できます。 Which of these trips interest you? <!--Trip-->。クライアントはこの方法でフィールドに「タグ付け」します。

require_once 'Formstack.php'; 
    $formstack = new Formstack($apiKey); 
    $form = $formstack->form($_POST['FormID']); 
    $taggedFields = array(); 
    foreach ($form['fields'] as $field) 
    { 
     if (preg_match('/<!--\s*([0-9A-Za-z]+)\s*-->/', 
         $field['label'], 
         $matches)) 
     { 
      $taggedFields[$matches[1]] = $_POST[$field['id']]; 
     } 
    } 

実際には、私はそれがもう少し洗練させるために持っていた:それは他の誰かが助けるかもしれない場合には

はここでは、そのようなタグを解析するコードの抜粋です。いくつかのFormStackフィールド型は入力を(恐ろしい方法で)直列化します。例えば、FormStackのフィールド型は、複数のフィールド(接頭辞、最初、真ん中、最後の、初期、接尾辞)かかり、そして文字列に結果を連結します。

'first = Andrew 
initial = W 
last = Cheong' 

はこれを処理するために、私が書きましたそのような構文をラベルで扱う私のコードTell us your name! <!--FirstName=first--> <!--LastName=last--> <!--MiddleInitial=initial-->

コードが続きます。

require_once 'Formstack.php'; 
    $formstack = new Formstack($apiKey); 
    $form = $formstack->form($_POST['FormID']); 
    $taggedFields = array(); 
    foreach ($form['fields'] as $field) 
    { 
     if (preg_match_all('/<!--\s*([0-9A-Za-z]+)\s*(?:=\s*(\w+))?-->/', 
          $field['label'], 
          $matches, 
          PREG_SET_ORDER)) 
     { 
      foreach ($matches as $captures) 
      { 
       if (count($captures) == 3 && 
        preg_match('/(?:^|\n|\r)'.$captures[2].' = ([^\n\r]+)/', 
           $_POST[$field['id']], 
           $subcaptures)) 
       { 
        $taggedFields[$captures[1]] = $subcaptures[1]; 
       } 
       else 
       { 
        $taggedFields[$captures[1]] = $_POST[$field['id']]; 
       } 
      } 
     } 
    } 

FormStackでは、すぐにフィールドの名前付けやタグ付けを行うネイティブな方法が追加されることを願っています。

+0

'FormStack field-types serialize input ' - JSONが使用されている場合、連結が発生しません。 – Piero

関連する問題