OPENCART开发部署常见问题

    PHP

最近在做一个opencart的项目,遇到的坑不少,不过相对来说还是一套比较成熟的系统,该有的功能都比较齐全了。 如果选一套合适的主题,可以实现大多数的功能了。 下面说一下部署方面遇到的几个问题吧。

使用的git自动部署,忽略以下文件,手动上传

1
2
3
4
5
6
7
/install
/journal-cache
/test
/config.php
/system/storage/cache/
/system/storage/logs/
/admin/config.php

其中config.php的配置 包括 admin/config.php的文件中的路径是相对服务器的根路径的。 因此这个位置的修改比较重要,如果没有写对,通常后台会报500。

另外,登录后发现前台或者后台报了一堆错误,通常是 unexpect xxx 之类的内容。 fclose failed 等等,推测应该是文件读写权限问题,或者找不到对应的问题。 仔细一想就明白了,那就是linux下的 缓存文件写入失败了,没权限,从而导致打开失败,关闭文件也失败。 在终端运行一下

1
chmod -R 777 /path/to/your/site/system/storage/

OK,运行之后上面报的错误就消失了。

本地测试导入的图片数据上传后无法显示

其实 opencart这点做的有点像 WordPress,就是把图片路径使用了绝对路径,这样会导致更换域名或者空间后无法打开文件的问题。 可以将导出的sql文件 放到文本编辑器(例如atom)等,然后使用批量替换 将 http://www.yourdomain.com/ 替换为 / 这样再导入数据库 引用的就是相对路径了,图片一起上传就可以看到啦。

多语言设置后,指定前台语言无效

这个问题再网上搜了很久,例如 language front end not working 等, 最后也未能找到答案。 只能翻看源码了, 其实从oc2.3以后,管理后台增加了 language选项locale这个输入框,作用就是根据用户浏览器的接受语言(详见浏览器请求header中的 accept-language 的值)进行自动判断 auto-detected, 而这个优先级是高于后台设置的前台语言的。 也就是说如果判断有匹配的语言,那就会根据用户浏览器的语言读取对应的语言包,如果没有得到才会取后台指定的这个前台语言。

这部分的逻辑可言从 /siteroot/catelog/controller/startup/startup.php 中找到。 有时候用户就希望无论用户语言是什么都优先显示一种语言,然后允许用户手动切换。 或者只为后台设置中文,前台显示英文,这种情况就只能将判断的逻辑去掉,或者直接用后台设置的选项覆盖。

例如本例的情况可以将/siteroot/catelog/controller/startup/startup.php 中大概61~63行

1
2
3
if (!array_key_exists($code, $languages)) {
$code = $this->config->get('config_language');
}

改为

1
2
3
// if (!array_key_exists($code, $languages)) {
$code = $this->config->get('config_language');
// }

这样既可将前台语言固定为 后台设置中指定的前台语言。

页阅读量:  ・  站访问量:  ・  站访客数: