发现zencart 一个bug, 也不清楚是模版的问题,还是zencart本身的问题。
在产品列表点击buy now 图标,把产品加到购物车,在点击back to shopping按钮返回产品列表页面,继续添加商品,当再次点击buy now图标添加另外的产品,产品不会加到购物车,而是把第一次加到购物车的产品数量加1。查看back to shopping的链接发现有个products_id参数,值是之前加入购物车的产品ID,基本肯定问题出在这里,回到产品列表的查看buy now 链接,发现所有的链接的products_is之前加入购物车的产品ID,找到问题所在了。
解决方案:
找到模板 tpl_shopping_cart_default.php 136行左右,即生成back to shopping链接的那行,
<div><?php echo zen_back_link() . zen_image_button(BUTTON_IMAGE_CONTINUE_SHOPPING, BUTTON_CONTINUE_SHOPPING_ALT) . '</a>'; ?></div>
该链接是由函数zen_back_lin()函数生成的,如果修改这个函数,其他使用这个函数的地方会受到影响。但是该函数接受一个参数$link_only,默认为false,默认情况返回包含<a href="url"的HTML代码。如果$link_only为true,只返回url地址,这样我可以用正则替换把&products_id=xxxx部分替换为空,这样就可以正常工作了,把上面的代买改为:<div><?php echo '<a href="' . preg_replace('/&products_id=\d*/i', '', zen_back_link(true)) . '">' . zen_image_button(BUTTON_IMAGE_CONTINUE_SHOPPING, BUTTON_CONTINUE_SHOPPING_ALT) . '</a>'; ?></div>