在选项列表中添加php错误


Adding error with php in option list

下面的代码是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;
  }

您可以使用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的最新副本,并将selectbox的id="值更改为options(不包含任何PHP变量)。

此外,如果用户提交了有效的颜色,不要忘记仍然检查PHP。这样做是因为如果用户禁用了Javascript,他仍然可以选择"请选择模式"项。

这是一个商业插件(尽管有免费的"lite"版本)。我首先建议查看他们的支持论坛:

http://cart66.com/support/

如果你不介意自己编辑PHP,那么也许我可以提供一些建议。

例如,您可以先有一个空白选项,然后在选择空白项目时,验证码拒绝将项目添加到卡中。粘贴的代码看起来像是将选项列表作为逗号分隔的字符串。因此,您可以通过以","开头的字符串来获得一个空白选项,例如",Red,Yellow,Blue"。但这不会很方便用户,最好有第一个名为"选择选项"的选项,并且值为"。由于上面的代码不允许这样做,您可以更改该代码,例如:

  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的验证码,以确保它拒绝空白选择。我不知道它是否只是通过查看上面的代码片段。

有几种方法可以做到这一点。最简单的是,使用纯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_",或者可能只是"-")是否已经提交。