0

以下のコードは、cart66 WordPress プラグインの php ファイルの一部です。たとえば、アイテムのオプションをリストすると、

Tシャツ 数量: 1 オプション: 赤、黄、青

最初のオプションは、常にリストの最初に置くものです。したがって、私の顧客が注意を払わず、リストを見ずにカートに追加すると、注文は赤になります。上部に「パターンを選択してください」オプションを追加しましたが、それでもカートとチェックアウトに追加されます. オプションを追加して、そのオプションが選択された場合にエラーを発生させる方法はありますか?

  private function _buildOptionList($optNumber) {
    $select = '';
    $optionName = "options_$optNumber";
    if(strlen($this->$optionName) > 1) {
      $select = "\n<select name=\"options_$optNumber\" id=\"options_$optNumber\" class=\"cart66Options options_$optNumber\">";
      $opts = split(',', $this->$optionName);
      foreach($opts as $opt) {
        $opt = str_replace('+$', '+ $', $opt);
        $opt = trim($opt);
        $optDisplay = str_replace('$', CART66_CURRENCY_SYMBOL, $opt);
        $select .= "\n\t<option value=\"" . htmlentities($opt) . "\">$optDisplay</option>";
      }
      $select .= "\n</select>";
    }
    return $select;
  }
4

3 に答える 3

2

jQuery と Javascript を使用して警告ボックスを表示できます。

<script type="text/javascript">
    $(function() {
        $('#options').change(function() {
            if ($(this).attr('value') == "Please choose a pattern") {
                alert("Please pick a color!");
            }
        });
    });
</script>

ページに jQuery の最新のコピーを必ず含め、選択ボックスの id="" 値をオプション (PHP 変数なし) に変更してください。

また、ユーザーが有効な色を送信したかどうかを PHP で確認することも忘れないでください。これは、ユーザーが Javascript を無効にしている場合でも、「パターンを選択してください」項目を選択できるためです。

于 2012-07-18T22:43:42.363 に答える
1

これは商用プラグインです (ただし、無料の「ライト」バージョンがあります)。まず、サポート フォーラムをチェックすることをお勧めします。

http://cart66.com/support/

PHP を自分で編集してもかまわない場合は、いくつか提案できることがあります。

たとえば、空白のオプションが最初に来て、空白のアイテムが選択されたときにカードへのアイテムの追加を検証コードが拒否するようにすることができます。貼り付けたコードは、オプションのリストをコンマ区切りの文字列として受け取るように見えます。したがって、「,Red,Yellow,Blue」などのように、文字列を「,」で開始することにより、空白のオプションを指定できます。しかし、それはあまりユーザーフレンドリーではありません。最初のオプションを「Select Option」という名前にして、値を「」にしたほうがよいでしょう。上記のコードではこれが許可されていないため、そのコードを次のように変更できます。

  private function _buildOptionList($optNumber) {
    $select = '';
    $optionName = "options_$optNumber";
    if(strlen($this->$optionName) > 1) {
      $select = "\n<select name=\"options_$optNumber\" id=\"options_$optNumber\" class=\"cart66Options options_$optNumber\">";
      $opts = split(',', $this->$optionName);
      foreach($opts as $opt) {
        if($opt == "<blank>") {
          $opt = "";
          $optDisplay = "Select One";
        } else {
          $opt = str_replace('+$', '+ $', $opt);
          $opt = trim($opt);
          $optDisplay = str_replace('$', CART66_CURRENCY_SYMBOL, $opt);
        }
        $select .= "\n\t<option value=\"" . htmlentities($opt) . "\">$optDisplay</option>";
      }
      $select .= "\n</select>";
    }
    return $select;
  }

次に、オプション リストを ",Red,Yellow,Blue" にすることができます。

また、空白の選択を確実に拒否するように、cart66 の検証コードを変更する必要がある場合もあります。上記のコードスニペットを見るだけでは、それが機能するかどうかはわかりません。

于 2012-07-18T22:48:48.483 に答える
1

これを行うにはいくつかの方法があります。最も簡単な方法は、プレーンな Javascript を使用して、これを<form>要素に追加することです。<form onsubmit="if ( this.options_1.selectedIndex() == 0 ) { alert( 'Please select a colour' ); return false; >

(ドロップダウンを生成するために使用されるoptions_1と一致する必要があります。これにより、フォームが送信されなくなります)$optNumberreturn false;

jQuery を使用して、これをより適切かつ柔軟にすることができます。たとえば、オプションに「_NOT_SELECTED_」などの特別な値を指定し、次のようなものを使用します

<script type="text/javascript">
jQuery(function($) {
    $('form.cart66Form').bind('submit', function()
    {
        $('select.cart66Options').each( function()
        {
            if ( $(this).val() == '_NOT_SELECTED_' )
            {
                $('#incorrect_submission_message').show();
                return false;
            }
        }
        return true;
    }
});
</script>

最後に、もちろん、検証は常にサーバー側で行う方が適切です。この場合は PHP を意味するため、プラグインで「バスケットに追加」アクションが発生する場所 (またはいくつかのアクションを追加できる場所) を見つける必要があります。それに)、特別な値(「_NOT_SELECTED_」、または単に「-」)が送信されたかどうかを確認する何かを追加します。

于 2012-07-18T23:07:15.427 に答える