你现在的位置:首页 > opencart 正文

opencart静态化与OPENCART伪静态的方法

今天分析了一下opencart的URL链接,总结一些小经验.
opencart是构建了一个轻量级的MVC框架,总体来说思路都是比较清析的.
URL重构这一块,就是分类(category)为例吧.
opencart默认就有URL重写这个功能,你只需要在后台开启这个功能则可,可系统自带的这有一些不足之处,总结有以下几个问题.
1.不能自动生成SEO keyword
2.SEO keyword的值不是惟一的.

针对第一个问题,我是这么解决的:
采用其它系统常用的一种方式,就是用产品名自动生成SEO keyword,一般生成比较友好的URL,通常只包括字母和数字.
这里可以用正则替换就可以了.
可是呢,也不是替换就行了,还一种比较特殊的情况,就是如果产品名全是特殊字符,比如,我加一个中文产品,产品为"脑白金"
而SEO keyword又为空,这个又怎么实现伪静态呢,这种情况下,自动替换就不行了.
这种情况我是这么处理的,就是假设如果全为特殊字符的话,我就直接生成category-{$category_id}的形式.

第二个问题
怎么理解urlkey的值不是惟一的呢。
比如,我新加一个分类1,然后在Data里面的SEO keyword里面加入:mycategory
然后,我再建一个分类2,而且同样也在Data里面的SEO keyword里面加入:mycategory
这样一来,就会出现一个问题,那就是两个URL都一个,你将无法访问分类2.

好了,理论说了一大堆,我们来实际操作.
首先,保存SEO keyword的数据表是url_alias这个表,我们需要找到程序是在哪一个位置插入数据这个表的.
找到/admin/model/catalog/category.php文件

大概在20-30(添加分类),50-60(修改分类)左右,也就是
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
opencart静态化与OPENCART伪静态的方法,如何去除修改OPENCART底部的版权信息POWERED BY OPENCART

转静态的方法:

Opencart的转静态是一个比较重要的问题!也是在第一次使用opencart是遇到一个最大的问题!也许我受到zen-cart转静态的影响!所以以为只要把“..htaccess”上传到服务器跟目录下!然后再打开opencart转静态按钮!

可是结果却超出了我想像之外!他是跟打开之前一模一样!也就是还是动态的URL地址,当时我以为那一定是我的那个“.htaccess”出错了!于是我就找我朋友拿了一个“.htaccess”,当然是Opencart使用(不同的网站,转静态用的“.htaccess”是不一样的),可是还是不行!于是我只能把原程序上传到服务器上!然后重新安装一下!结果手动上传产品到网站中!还是一样的!于是我就很无语,按理来说(当然程序很多时候都不能按理来说的),我在安装前就把“.htaccess”空的文件,上传上网站的跟目录下,并且把“.htaccess”设置为777,而且我把 “.htaccess”下载下来也是可以使用的,可是就不知道为什么!

于是我又用同样的方法,不过这个时候有开启测试产品!又自己上传了产品!才发现原来测试产品是可以用的!自己上传就不可以用了!于是我说开了数据库看他们的数据有什么差别!在一个表“url_alias”中有数据!而且没劲的产品有!我上传的就没有了!于是就在后以找到那个产品在“url_alias”中的keyword数据才知道原来,Opencart后台产品编辑页面的一个字段 “Product Tags:”一样,才知道原来Opencart的作者写的跟别人不一样!其他作品的URL地址都是自动生成的!但是他不一样!他是用自己去填写!而且你爱什么写就什么写!只要你是唯一的就可以!当然也给业务带来一些不便!不过他却可以给URL优化带来很大的帮助!

这个就实现了Opencart 转静态,当然这样做有点儿麻黄!我在自己做的Opencart 批量上传中就把那个URL地址直接用产品的名字代替!把空格变成中划线!这样大家就不要为个URL而烦恼了!当然在我写的PHP批量上传中没有提到!有时间我会写一个《Opencart 批量上传》再认真的说一下!

这是opencart “.htaccess”的内容:

# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.

# 2. In your opencart directory rename htaccess.txt to .htaccess.

# For any support issues please visit: http://www.opencart.com

RewriteEngine On

RewriteCond %{HTTP_HOST} !^cheap-shoes-wholesale.com$ [NC]

RewriteRule ^(.*)$ http://cheap-shoes-wholesale.com/$1 [L,R=301]

Options +FollowSymlinks

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)?*$ index.php?_route_=$1 [L,QSA] RewriteEngine

===========================================================

伪静态的方法:

我们需要在这个判断前对$data['keyword']进行验证,验证它是否为空,因为只有不为空的情况下,
我们重构这个分类的URL才有意义.
这if ($data['keyword']) {前面添加以下代码

...Oter code...
if(!$data['keyword']){
//生成友好的只带数字和字母的URL
$keywordUrl = preg_replace("/[^-0-9a-zA-Z]+/","",str_replace(' ','-',$this->db->escape($value['name'])));
//如果产品名为特殊字符,则改成category-{$category_id}的形式.同时给自动生成的SEO keywork加上标识ID
$data['keyword'] = strlen($keywordUrl)>0?$keywordUrl.'-'.$category_id:'category'.'-'.$category_id;
}
if ($data['keyword']) {
...Oter code...

根据同样的方法可以修改产品的SEO keyword
修改文件/admin/model/catalog/product.php文件
则可,方法一样,在此不重叙。