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;
  }

然后你可以让你的选项列表是“,红色,黄色,蓝色”。

您可能还需要修改 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将需要与$optNumber用于生成下拉列表的匹配。return 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 回答