下面的代码是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_",或者可能只是"-")是否已经提交。