We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 33488
    • 429 Posts
    こっそり、自サイトで公開していましたが、正式に・・・V1.2対応版+オリジナル追加機能付きです。
      • 8382
      • 253 Posts
      昨晩から、phpmailerを使ってる他のCMS、xoopsとPostNukeのソースを読んでいたので、eform-patchが未だ読めてません tongue
      PostNukeのモジュールでは、languageごとにphpmailerの変数初期化を持つ形式です。
      xoopsではphpmailerにxoopsmailer、xoopsMailerLocalなどのラッパークラスをlanguageごとに定義してますね。
      やっぱり、ラッパークラスを定義するように言うべきか、悩みます。 :’(

        • 33488
        • 429 Posts
        Quote from: eastbind at Jul 26, 2006, 03:04 AM

        昨晩から、phpmailerを使ってる他のCMS、xoopsとPostNukeのソースを読んでいたので、eform-patchが未だ読めてません tongue
        PostNukeのモジュールでは、languageごとにphpmailerの変数初期化を持つ形式です。
        xoopsではphpmailerにxoopsmailer、xoopsMailerLocalなどのラッパークラスをlanguageごとに定義してますね。
        やっぱり、ラッパークラスを定義するように言うべきか、悩みます。 :’(


        おお、そうですね POSTNUKEみたいな言語別の部分で被せるのがいいかもです。

        ちょっと、試しにやってみたんですが・・。


        <?php

        include_once "manager/includes/controls/class.phpmailer.php";

        class MODxMailer extends PHPMailer
        {
        function MODxMailer()
        {
        $this->CharSet = ’iso-2022-jp’;
        $this->Encoding = ’7bit’;
        $this->LE ="\n";
        }
        function setFromName($value)
        {
        $this->FromName = mb_encode_mimeheader($value,$this->CharSet,"B",$this->LE);
        }

        function setText($name,$value,$enc_code)
        {
        $this->$name = mb_convert_encoding($value,$this->CharSet,$enc_code);
        }

        }
        ?>

        言語を引っ張り出すのは、$modx->config[’manager_language’]で取得できるので、これでeformのINCLUDEで呼び出しファイル名を決めちゃえばいいかな。
        メール送信部分はこれでOKにはなりますね、後はフォームのエラー時のメッセージも言語ファイル側で定義するようにすれば
        できるような・・、phpmailerのINCLUDEの位置を変える必要はありますけど・・。
        ところで、XOOPSやPostNukeでは、SubjectとBODYの変換はどうなってるでしょう?


          • 8382
          • 253 Posts
          PostNukeでは、変換は使用者任せのようです。エンコード変換が見当たりませんでした。
          xoopsでは、phpmailerをオブジェクト変数として内部に持つラッパークラスが定義されていて、言語ごとにさらにそのクラスを拡張定義しています。
          class XoopsMultiMailer extends PHPMailer {
          :
          }
          
          class XoopsMailer
          {
          	var $multimailer;
          
          	function XoopsMailer()
          	{
          		$this->multimailer = new XoopsMultiMailer();
          		$this->reset();
          	}
          
          	function sendMail($email, $subject, $body, $headers)
          	{
          		$subject = $this->encodeSubject($subject);
          		$this->encodeBody($body);
          		$this->multimailer->ClearAllRecipients();
          		$this->multimailer->AddAddress($email);
          		$this->multimailer->Subject = $subject;
          		$this->multimailer->Body = $body;
          		$this->multimailer->CharSet = $this->charSet;
          		$this->multimailer->Encoding = $this->encoding;
          		if (!empty($this->fromName)) {
          			$this->multimailer->FromName = $this->encodeFromName($this->fromName);
          		}
          		if (!empty($this->fromEmail)) {
          			$this->multimailer->From = $this->fromEmail;
          		}
          		$this->multimailer->ClearCustomHeaders();
          		foreach ($this->headers as $header) {
          			$this->multimailer->AddCustomHeader($header);
          		}
          		if (!$this->multimailer->Send()) {
          		    $this->errors[] = $this->multimailer->ErrorInfo;
          			return FALSE;
          		}
          		return TRUE;
          	}
          }

          ここまでが共通定義です。言語別にさらに拡張していて、日本語の場合、
          class XoopsMailerLocal extends XoopsMailer {
              function encodeBody(&$text){
                  if ($this->multimailer->needs_encode) {
                      $text = $this->STRtoJIS($text,_CHARSET);
                  }
              }
          }

          としています。iso-2022-jp決めうちでした。FromやSubjectも同様の感じです。
          さすが練り上げられてますが、なんかここまでしなくても、とも思います。

          ちなみにdrupalでは、もっと簡単に言語ごとにmail()のラッパー関数を上書きできるようになっていて、日本語のはその関数の中でmb_send_mailするてな感じでした。
            • 33488
            • 429 Posts
            私もeastbindさんと同意見ですね。
            もし、同じレベルのやるとするならばコアに入れてもらった方がよいかと思います。
            それでも、ちょっと・・・そこまではっていう気はしますが。

            eformのみ(当面)をターゲットにするならば、試しで作った程度ぐらいの言語依存しそうな部分
            に薄皮かぶせる程度のラッパークラスでよいんじゃないかなぁとか思います。

            一応、お試しのクラスで動かしてはみました。
            中身は、eform-jp版でやってることと同じなので動くのは当たり前ですけど。
            ついでに直してたらeform v1.2jpにミス発見しました。笑
            きっと、使われない部分かと思うので・・・そのうちに修正します(^^;;
              • 8382
              • 253 Posts
              その薄皮ラッパークラスを言語別にすべきでしょうか?
              それともsusanの$_eformにエントリを付け加えるぐらいでうまいことできますかね?

              まぁ、とりあえずtakizさんのスクリプトをまんま投げてみてjasonやryanにも一緒に考えてもらうってのも当然ありなんですが。

              話かわってeformParserも良くできてますね。でもこれも各言語版があるほうがいいかも。takizさんのスクリプトにもありましたが電話番号や郵便番号などのフィールドも欲しいところですから。
                • 33488
                • 429 Posts
                Quote from: eastbind at Jul 27, 2006, 04:26 AM

                その薄皮ラッパークラスを言語別にすべきでしょうか?
                それともsusanの$_eformにエントリを付け加えるぐらいでうまいことできますかね?

                まぁ、とりあえずtakizさんのスクリプトをまんま投げてみてjasonやryanにも一緒に考えてもらうってのも当然ありなんですが。

                話かわってeformParserも良くできてますね。でもこれも各言語版があるほうがいいかも。takizさんのスクリプトにもありましたが電話番号や郵便番号などのフィールドも欲しいところですから。

                言語ファイルは、んーー どうなんでしょう? 
                他の多バイト圏の方がわかってないので、どっちがよいのやら・・・。
                でも、簡単な実装がよいですよねぇ。
                前回出したサンプルでも、言語単位にCaseでCharSetしちゃってもいいわけですし、Subject,Body類は英語のみなら変換なしなので、意外とCaseの種類も少ないのかも・・・であれば、言語ごとにクラスファイルを作る必要はないですね。
                やってることは大したものではないので、1つでまとめられそうな気もしてきました。

                eFormParserはいい感じですね、分離したのは正解かと・・。
                確かにこれも言語というか国対応できるとよいかも。

                  • 8382
                  • 253 Posts
                  今日明日ぐらい考えて見ます grin
                  言語別にっていうのは、韓国でページはUTF-8だけどメールはeuc-krとか、大陸でページはGBだけどメールはUTF-8とか、に対応できるほうがいいかなと思うので。日本語でもメールがUTF-8が既定になってしまうとも限らないですし。
                  まぁ、何かしらソースをいじらずにフックできる形式がほしいと言う事なんです。パラメータでもできるかもと迷いがありますが。
                    • 33488
                    • 429 Posts
                    Quote from: eastbind at Jul 30, 2006, 08:38 PM

                    今日明日ぐらい考えて見ます grin
                    言語別にっていうのは、韓国でページはUTF-8だけどメールはeuc-krとか、大陸でページはGBだけどメールはUTF-8とか、に対応できるほうがいいかなと思うので。日本語でもメールがUTF-8が既定になってしまうとも限らないですし。
                    まぁ、何かしらソースをいじらずにフックできる形式がほしいと言う事なんです。パラメータでもできるかもと迷いがありますが。

                    よろしくお願いします。
                    パラメタでもできそうですね、PHPMailerに与える部分をパラメタにしておけば・・。
                    mbへの変換部分もphpmailer用CharSetとconfig[’etomite_charset’]をみて変換しちゃうと共通になるかなあ。
                    フォームのメッセージはやはり言語対応をIncludeするしかないかもですが・・。
                    defineでeForm内でハンドリングでもいいのかも・・
                      • 33488
                      • 429 Posts
                      http://modxcms.com/forums/index.php/topic,7854.0.html
                      で、V1.4βが出てるようです。
                      POSTデータのチェックとかちょっとセキュリティ強化されているようです、あと、言語ファイル化もしてますね
                      PHPMailer部分はそのままですが・・・。
                      前のテンプレートパースのロジックは入ってないようです。
                      ↑ ソースの中にありました、2つのファイルに分かれてたのがマージされたようです。

                      こっちのバージョンを先週日本語で通すようにしてみたんですが  :’(
                      1.4を待って再度やり直しますだ。

                      意外とテンプレートのパース部分(っても format変数を作ってくれるだけですが)ってスニペットにだらだら書かなくていいのが便利だったりするんですけどね

                      ということで、日本語化実験してみます