所以我有一个计算客户订单数量的函数。
我想显示一个祝贺模式,当客户点击特定数量的订单时会出现该模式。
我的所有代码都工作正常,除非我将此部分添加到IF语句中:
|| in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count )
cookie正在正确保存,保存时,数字将保存为的当前值
count
. 其思想是,只有在以下情况下,模态才会显示:
A) 其当前计数为$the_digits
阵列(&A);未设置cookie。B) 其当前计数为$the_digits
阵列(&A);已设置cookie,但cookie值不等于其当前顺序$count
数量
这是为了防止模式在初始显示之后显示,但如果他们点击下一个,仍然允许它再次显示$count
移动到下一层的金额。
不知道怎么了。或者也许有更好的方法来做到这一点。感谢所有帮助。
$the_digits = [\'3\',\'5\',\'15\',\'30\',\'50\'];
if ( in_array($count, $the_digits) && !isset( $_COOKIE[ \'tier_advance\' ] ) || in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count ) {
echo\'
<script>
jQuery(window).on("load",function(){
jQuery("#tier_advance").modal("show");
});
jQuery(document).on("click", "#tier_confirm", function(){
// Set a cookie
Cookies.set("tier_advance", "\' . $count . \'", { expires: 356 });
});
</script>
<!-- BEGIN Share Modal -->
<div class="modal fade" id="tier_advance" tabindex="-1" role="dialog">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header text-center">
<h5>CONGRATULATIONS!</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body text-center">
<p>You are now a <strong class="all-caps"> \' . $tier_name . \' </strong>tier customer!</p>
<p>Expect some dope rewards to start coming your way!</p>
</div>
<div class="modal-footer modal-footer-centered">
<button id="tier_confirm" type="button" class="btn btn-secondary" data-dismiss="modal">Awesome, thanks!</button>
</div>
</div>
</div>
</div>
<!-- END Share Modal -->\';
}
SO网友:mozboz
如果问题出在那份包含大量&&;然后简化它是个好主意。要稍微重构一下代码,使其更易于理解(这样,当你在2年内看到它时,你就可以理解它),你可以这样做:
之前:
if ( in_array($count, $the_digits) && !isset( $_COOKIE[ \'tier_advance\' ] ) || in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count )
之后:
$showModal = false;
if (in_array($count, $the_digits)) {
if (!isset( $_COOKIE[ \'tier_advance\' ] )) {
$showModal= true;
} else {
if ($_COOKIE[\'tier_advance\'] !== $count) {
$showModal = true;
} else {
// echo "false because tier_advance !== count
}
}
} else {
// echo "false because not in the_digits";
}
if ($showModal) {
// do the thing
}
虽然这要长得多,但更容易理解逻辑
and 它允许您向其中添加一些调试语句,以便您可以看到它在什么时候设置为true/false进行调试。我在这里举了几个echo作为例子,但很明显,如果您可以使用日志功能,那就更好了。
编辑:我刚刚注意到您正在使用!==
正如您所知,它执行类型检查和相等性检查。我认为在这种情况下,cookie可能始终是一个字符串,因此您应该使用!=
相反