1

オフラインの人が、すでに顧客として登録されている firecheckout ページに電子メールを入力しないようにしています。そのため、開発コントローラーの 1 つでこのサンプル php スクリプトを作成しました。

public function mailExists(Varien_Object $customer, $mail, $websiteId)
{
    if($websiteId){
        $customer->setWebsiteId($websiteId);
    }
    $customer->loadByEmail($mail);
    if($customer->getId()){
        return $customer->getId();
    }
    return FALSE;
}

public function formAction()
{
    $customer = Mage::getModel('customer/customer');
    $websiteId = Mage::app()->getWebsite()->getId();
    $email = $_POST['email'];
    if($this->mailExists($customer, $email, $websiteId))
    {
        echo 'mail <u>'.$email.'</u> exists containing customer id '.$this->mailExists($customer, $email, $websiteId);
    }
    else{
        $this->_formPost();
    }
}

public function _formPost()
{
    echo "<form enctype='multipart/form-data' action='".Mage::getUrl('index/form/')."' method='post'>";
    echo "<input type='text' value='shane.test@hotmail.com' id='email' name='email' />";
    echo "<input type='submit' value='verzend' />";
    echo "</form>";
}

これは完全に正常に機能します。しかし、私の懸念は、誰かがチェックアウト ページのすべてのフィールドに入力して送信ボタンを押すと、入力されたすべてのデータが空に設定されるという事実です。それは私の顧客に不満を引き起こすでしょう。そのため、オフラインの顧客に、既に登録されている電子メールを使用しないように、または電子メール アドレス入力フィールドに電子メール アドレスを入力するときにアカウントにログインするように通知するには、jQuery スクリプトが適していると考えました。

電子メール入力フィールドにユーザーが入力したテキストに対して jQuery スクリプトを実行したいと考えています。私はこれを思いついた:

public function testAction()
{
    echo("
            <script src='http://code.jquery.com/jquery-latest.js'></script>
            <script type='text/javascript'>
            $(document).ready(function()
            { 
                $('#email').onChange(function()
                {
                    alert('input');
                });
            });
            </script>
        ");
    $this->_testPost();
}

public function _testPost()
{
    echo "<form name='test' enctype='multipart/form-data' action='".Mage::getUrl('index/form/')."' method='post'>";
    echo "<input type='text' value='' id='email' name='email' />";
    echo "<input type='submit' value='verzend' />";
    echo "</form>";
}

inputこれは警告ボックスに印刷されます。jQueryでPHPチェックを実装するにはどうすればよいですか? 前もって感謝します、シェーン

4

2 に答える 2

2

jQuery AJAX 呼び出しを使用してコントローラー関数を呼び出します。これを次のように書き直します。

public function ajaxAction()
{
    $customer = Mage::getModel('customer/customer');
    $websiteId = Mage::app()->getWebsite()->getId();

    if (array_key_exists('email', $_POST)) {
        $email = $_POST['email'];
    } else {
        $this->getResponse()->setBody(false);
        return;
    }
    if ($websiteId) {
        $customer->setWebsiteId($websiteId);
    }
    $customer->loadByEmail($email);
    if ($customer->getId()) {
        $this->getResponse()->setBody(true);
        return;
    }
    $this->getResponse()->setBody(false);
    return;
}

したがって、実際には、すべての JavaScript をコントローラーからビューに移動し、jQuery.ajaxメソッドを使用して次のようにします。

    var mail = 'a@a.com';
jQuery.ajax({
    type: "POST",
    url: "<?php echo Mage::getUrl('your/frontend/ajax') ?>",
    dataType: "json",
    data: {email: mail},
    success: function (exists) {
        if (exists == 0) {
            // js for fail, hide disable button etc etc
        } else if (exists == 1) {
            // js for success bits
        }
    },
    error: function (jqXHR, textStatus, errorThrown) {
                   // error handling
    }
});

AJAX の優れた点は、必要なときにチェックを起動できることです。そのため、電子メールの送信が完了するのを待ち、相手が詳細を入力したらすぐにリクエストを起動できます。

于 2013-10-03T14:38:59.907 に答える