这是我刚刚添加到购物车中的一个片段,它基本上会呈现一个包含4个数量选项的选择框,并刷新页面。最初,有一个简单的输入框,用户可以使用它来操纵数量,但是一小部分用户实际上并没有点击"更新购物车"在他们前往Checkout之前,我决定更积极主动。除了UX实践和AJAX方法之外,我只是好奇这些选项的冗余是否在PHP中是必要的。我怎样才能提高效率呢?
<select name="quantity" onchange="return updateCart();">
<?php if($this->getQty() == 1) : ?>
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<?php elseif($this->getQty() == 2) : ?>
<option value="1">1</option>
<option value="2" selected="selected">2</option>
<option value="3">3</option>
<option value="4">4</option>
<?php elseif($this->getQty() == 3) : ?>
<option value="1">1</option>
<option value="2">2</option>
<option value="3" selected="selected">3</option>
<option value="4">4</option>
<?php elseif($this->getQty() == 4) : ?>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4" selected="selected">4</option>
<?php else : ?>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<?php endif; ?>
</select>
答案 0 :(得分:6)
$quantity = $this->getQty();
for($i=1; $i<=4; $i++){
if($quantity == $i)
echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
else
echo '<option value="'.$i.'">'.$i.'</option>';
}
答案 1 :(得分:2)
首先,只调用一次getQty()
函数。保存返回值,然后检查。
其次,无需重复所有选项。根据实际用例的不同,使用循环可能更有意义,或者像这样做......
<select name="quantity" onchange="return updateCart();">
<?php $qty = $this->getQty(); ?>
<option value="1" <?php if($qty == 1): ?>selected="selected"<?php endif; ?>>1</option>
<option value="2" <?php if($qty == 2): ?>selected="selected"<?php endif; ?>>2</option>
<option value="3" <?php if($qty == 3): ?>selected="selected"<?php endif; ?>>3</option>
<option value="4" <?php if($qty == 4): ?>selected="selected"<?php endif; ?>>4</option>
</select>
使用循环的示例
<select name="quantity" onchange="return updateCart();">
<?php $qty = $this->getQty();
for($i=1; $i<=4; $i++):
?>
<option value="<?php echo $i; ?>" <?php if($qty == $i): ?>selected="selected"<?php endif; ?>><?php echo $i; ?></option>
<?php endfor; ?>
</select>
答案 2 :(得分:0)
这个怎么样:
<select name="quantity" onchange="return updateCart();">
<option value="1" <? echo ($this->getQty()==1?'selected="selected"':""); ?> >1</option>
<option value="2" <? echo ($this->getQty()==2?'selected="selected"':""); ?> >2</option>
<option value="3" <? echo ($this->getQty()==3?'selected="selected"':""); ?> >3</option>
<option value="4" <? echo ($this->getQty()==4?'selected="selected"':""); ?> >4</option>
</select>
它不会使您的代码更快,但更小且更多清除。
如果您的选项越来越多,请考虑使用for循环。
答案 3 :(得分:0)
这有点浓缩,但我不认为它效率更高或更好,但你可能会喜欢它。
<select name="quantity" onchange="return updateCart();">
<?php for($i=1;$i<5;$i++): ?>
<option value="<?php echo $i; ?>" <?php echo ( $this->getQty() == $i ? 'selected="selected"' : '' ); ?>><?php echo $i; ?></option>
<?php endfor; ?>
</select>