We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10105
    • 51 Posts
    またまたお世話になります。

    eform でフォームを作っていて気になったのですが、
    チャンクに<input type="text" name="name" value="お名前" />として
    ドキュメントから呼び出したときにvalue値が消えてしまいます。

    MEGUさんのHPのサンプルでも、フォームテンプレートサンプルにはvalue="お名前"とあるのですが
    サンプルページのソースを開くとvalue=""となって値が消えてしまってます。
    http://modx.liolion.net/modxsample/efsample01/

    これは仕様なのでしょうか?
      • 33488
      • 429 Posts
      ソースをチェックしてないのでなんともいえませんが、多分プログラム的に考えると最初の状態(そのセッションで始めて訪れた場合)には、入力データ(POSTのデータ)がないという状態をそのままValueに入れてるからだと思います。
      要するにPOSTされたデータをValueにセットする仕組みになっていますが、POSTデータがない状態が入力値ナシとして扱われてValueにセットされるからじゃないかと推測されます。

      なんらかの修正かExtenstionみたいな感じで回避できるのかも知れませんが、そこまでは追ってません(^^;
        • 6350
        • 421 Posts
        eForm の呼び出しで以下の5つのイベントが指定できますが
        eFormOnBeforeFormParse
        eFormOnValidate
        eFormOnBeforeMailSent
        eFormOnMailSent
        eFormOnBeforeFormMerge

        各項目の値を設定するにはフォームが表示される直前に呼び出される eFormOnBeforeFormMerge を使います。
        [!eForm? ~ &eFormOnBeforeFormMerge=`initialForm`  !]

        function initialForm( &$fields ) {
        $fields[’name’] = ’お名前’;
        return $fields;
        }

        ただし、チェックのたびに呼び出されるので上記のように固定値を指定してはいけないようです。
        初期値だけ指定したい場合は以下のような書き方になります。
        function initialForm( &$fields ) {
        if ($fields[’name’]==’’) {
            $fields[’name’]=’お名前’;
        }
        return $fields;
        }

        この、イベントで呼び出される関数をどこに書けばいいのかですが僕の場合 eform.inc.php の最後に付け加えました。またはスニペット eForm の中に書く方法しか思い浮かびません。

        別のスニペットが指定できれば便利なんですが・・・いい方法があれば教えてください smiley
        実際の使用例とかが、さがしてもないんですよね・・・
          • 33488
          • 429 Posts
          フォローどうもです。
          今しがた/assets/snippets/eform/docs/eform_example_events.htmを見たところ、Event用のスニペットを作ってそれを先に呼び出して、その後にeFormを呼び出すというサンプルがありました。
          これとdainichiさんのサンプルイベント処理を組み合わせればOKそうっすね。

          例としては、

          eFormEventスニペットとして以下のソースで作成
          --------
          //functions for eForm events
          function initialForm( &$fields ) {
            if ($fields[’name’]==’’) {
                $fields[’name’]=’お名前’;
            }
            return $fields;
          }
          //return empty string
          return ’’;
          -------

          ドキュメントの方では、
          [[eFormEvent]]
          [!eForm? ~ &eFormOnBeforeFormMerge=`initialForm`!]

          とするっていう感じでしょうか

          ではでは(^^;
            • 6350
            • 421 Posts
            Quote from: ZeRo at Feb 20, 2009, 06:59 AM

            今しがた/assets/snippets/eform/docs/eform_example_events.htmを見たところ、Event用のスニペットを
              ・
              ・
            ドキュメントの方では、
            [[eFormEvent]]
            [!eForm? ~ &eFormOnBeforeFormMerge=`initialForm` !]
            eform_example_events.htm の [[eFormEvent]] の部分、目には入ってたんですが頭が痛くなってきたので無視していたんですがようやく使い方がわかりました。

            ありがとうごぜーますだ、お代官様 laugh
              • 10105
              • 51 Posts
              dainitiさん、ZeRoさんありがとうございます。

              さっそく試してみたところ、最初の表示では問題なく表示したのですが
              2回目以降は以下のエラーが発生してしまいました。

              Fatal error: Call to undefined function initialForm() in /assets/snippets/eform/eform.inc.php on line 588

              2回目以降ということでキャッシュの問題?なのかなぁと思い

              [[eFormEvent]] → [!eFormEvent!] にして問題なく動いている状態です。



                • 6350
                • 421 Posts
                Quote from: freakale at Feb 22, 2009, 08:33 PM

                Fatal error: Call to undefined function initialForm() in /assets/snippets/eform/eform.inc.php on line 588

                2回目以降ということでキャッシュの問題?なのかなぁと思い

                [[eFormEvent]] → [!eFormEvent!] にして問題なく動いている状態です。
                こちらでは、Fatal error は出たことは有りません。
                もしかして、Contact Us ではなく自分でつくったドキュメントで「キャッシュを生成」のチャックが入ったままになってるんじゃありませんか。

                まあ、[!eFormEvent!] にしておいたほうが無難だとは思います。
                freakale のおかげで僕もひとつ勉強になりました。

                こちらも参考にしてください。JavaScript で value の初期値を操作するより便利です。
                http://modxcms.com/forums/index.php/topic,33266.0.html

                freakale さんの素朴な質問がなければ自分では試してなかったと思います。 smiley
                  • 36592
                  • 970 Posts
                  ここに書いてあったんですが、Ver1.4.4.6ではふつーにテンプレートに書いた値が表示されるようになったそうです。

                  http://modxcms.com/eForm-1003.html

                  # eForm now retains default values for check boxes and radio buttons
                  # text input fields now retain default value set in form template
                    • 33488
                    • 429 Posts
                    あちゃ、もう1.4.4.6が出ていたとは・・
                    昨晩1.4.4.5のJP修正版をアップしたばかり・・・週末に再アップしますだ
                      • 10105
                      • 51 Posts
                      Quote from: dainiti at Feb 22, 2009, 08:45 PM

                      もしかして、Contact Us ではなく自分でつくったドキュメントで「キャッシュを生成」のチャックが入ったままになってるんじゃありませんか。
                      すいません・・・チェック入ってました embarrassed

                      Quote from: tkfm at Feb 24, 2009, 11:28 PM

                      ここに書いてあったんですが、Ver1.4.4.6ではふつーにテンプレートに書いた値が表示されるようになったそうです。
                      これまたすいません・・・ちゃんと調べないといけませんね