昨天在体验 OpenCart 时,顺便提了一下 Zen Cart。之后搜了下,没想到它还健在。既然还在,那我今天就来介绍一下这个曾经让我又爱又恨的电商建站软件:Zen Cart。
老规矩,先说说它的安装流程。后面会给出我的使用体验和建议。
准备工作
Zen Cart 基于 PHP 语言开发,开始前需要先搭建好 PHP 运行环境。目前(2022-08)最新的 Zen Cart 版本为 1.5.7。这个版本对 PHP 要的要求为 7.3.19,建议使用 PHP 7.4。而且跟 WordPress 一样,需要启用 mysqli 扩展。
另外 Zen Cart 只支持 MySQL 数据库,所以还需要搭建好 MySQL 数据库环境。对于 MySQL 数据库的最低版本要求为 5.7.3,建议版本为 8。
安装 Zen Cart
首先到官网去下载源码:
上面地址打开后,右侧有下载连接。下载的文件为 zip 格式,下载到本地后解压,并把代码复制到 PHP 的运行环境。然后通过浏览器访问 /zc_install
目录。比如我是安装在本地开发环境的二级目录下,输入的访问地址为 http://localhost/zencart/zc_install
。操作无误的话,应该会出现以下安装界面:
点击 「Continue」 继续,来到系统设置界面:
勾选最上面的选项框表示同意相关协议,继续 「Continue」,来到数据库设置界面:
根据自己的数据库信息进行配置,完成配置后,点击「Continue」按钮继续,来到设置管理员账号和密码的界面:
注意随机生成的管理员密码和后台目录名称,复制一下,等下登录后台会用到。最后再点一下 「Continue」,完成安装流程。
根据这个完成页面的提示,需要删除 zc_install
这个目录,留着会有数据被覆盖的风险。
默认的 Zen Cart 前台界面效果如下:
看起来比我多年前用的版本有了明显改善。不过演示用的商品数据一点都没变,皮克斯的《虫虫危机》和布鲁斯·威利斯的《虎胆龙威》依旧还在。
来看看后台:
嗯,还是熟悉的味道,只是整体色调从绿色换成偏棕灰的色调。至此,Zen Cart 安装算是完成。
体验总结
从功能上来说,Zen Cart 是一个合格的购物网站搭建程序,开箱即用。而且依靠多年积累下来的名号,其周边的模板和插件也算丰富。单就这方面来说,是值得选择使用的。
如果需要在它上面做自定义的一些功能开发,那就十分不推荐了,因为从开发效率来衡量,投入精力和产出比太小。我对这玩意儿太熟了,从 2006 年用 Zen Cart 搭建第一个购物网站开始,后面三四年的时间每天都在和它打交道。一开始我对这个分分钟就能搭建出购物网站的程序非常有好感。但随着使用的深入,需要通过二次开发进行功能扩展的时候,痛苦就随之而来了。
来看看这样一段代码:
<div class="floatButton">
<button type="submit" class="btn btn-primary"><?php echo IMAGE_SAVE; ?></button> <a href="<?php echo zen_href_link(FILENAME_CATEGORY_PRODUCT_LISTING, 'cPath=' . $cPath . '&cID=' . $cInfo->categories_id . ((isset($_GET['search']) && !empty($_GET['search'])) ? '&search=' . $_GET['search'] : '')); ?>" class="btn btn-default" role="button"><?php echo IMAGE_CANCEL; ?></a>
</div>
<?php
if ($action === 'edit_category') {
?>
<div class="form-group">
<?php echo zen_draw_label(TEXT_RESTRICT_PRODUCT_TYPE, 'restrict_type', 'class="col-sm-3 control-label"'); ?>
<div class="col-sm-9 col-md-6">
<?php echo zen_draw_pull_down_menu('restrict_type', $type_array, '', 'class="form-control" id="restrict_type"'); ?>
<br>
<input type="submit" name="add_type_all" class="btn btn-info" value="<?php echo BUTTON_ADD_PRODUCT_TYPES_SUBCATEGORIES_ON; ?>"> <input type="submit" name="add_type" class="btn btn-info" value="<?php echo BUTTON_ADD_PRODUCT_TYPES_SUBCATEGORIES_OFF; ?>">
</div>
</div>
<?php
}
?>
<?php echo '</form>'; ?>
<?php
$restrict_types_query = "SELECT *
FROM " . TABLE_PRODUCT_TYPES_TO_CATEGORY . "
WHERE category_id = " . (int)$cInfo->categories_id;
这是我从 Zen Cart 后台的分类管理功能中截取出来的,格式没有做任何调整。你能看出这中间存在哪些问题吗?
这段代码让我十分的不爽。对我来说,主要存在这些问题:
- PHP 和 HTML 代码混杂在一起。
- 代码缩进没有标准,一会 2 个空格,一会儿又是 4 个。
- 该断行时不断行。
- 有的表单元素用了函数封装,有的又没有用。
- 看见那段输出
</form>
的代码了吗?这里非要用 PHP 代码输出的意义何在?
这是短短十多行代码就能找到的一些问题。如果去看一下完整的代码和逻辑,还能发现更多让人迷惑的行为。面对这种代码,我不知道各位看了是什么感觉,反正我是受不了。如果让我就此发表一下评论,那就是我见过开源项目中「屎山」级别的存在。
那么都过去十多年了,目前的 Zen Cart 在这方面有所改观吗?没有!上面的代码就出自最新的 1.5.7 版本。可见 Zen Cart 的开发团队完全没有从根本上优化其代码结构的意愿,这在我看来完全是得过且过的吃老本行为。
如果你想要用 Zen Cart 架设新的电商购物网站,请务必三思。除非你笃定认为只需要用到它的默认功能,不需要动任何代码。否则我还是建议考虑其他的选择。比如 OpenCart 在这方面就好多了。