ECSHOP 商品,分类自定义URL

 

作者:konakona

 

转载请著名!

申明,这不是一篇教学文,我没有义务教会每一个人,但我有必要分享我的所懂得的给大家,所以能不能真正看懂,就在你各人的LAMP能力了.

 

因为我不善解释…

我只是提供一个改的思路,大家想改成什么样,只要够灵活都可以实现.

最近客户有一个需求,就是他可以在后台修改商品和分类的URL,大概是 http://www.xx.com/yourcatename.html 这样子.

但这样的结果是:要将请求提取出来后拿到数据哭中LIKE…牺牲的效率太大,不适合B2C网站.

所以我推荐客户一种易于SEO,同时能减轻服务器负担,又提升执行效率的URI.

分类 http://www.xx.com/c-[yourcatename]-id[-bid].html

商品 http://www.xx.com/s-[yourdefinedname]-id.html

 

很明显,我的c-和s-是一个标识符,用于表名他是一个category还是一个shop.

开始改代码.
存客户的URL,首先需要有一个字段.

ALTER TABLE `ecs_goods` ADD `goods_url` VARCHAR( 20 ) NOT NULL AFTER `goods_name`

ALTER TABLE `ecs_category` ADD `cat_url` VARCHAR( 20 ) NOT NULL AFTER `cat_name`

 

ECSHOP的URI重写FUNCTION在lib_common.php叫build_uri()

当条件为category时,我们在if ($rewrite) {后加入一段代码

//$uri = 'category-' . $cid; //切记先将原来的$uri注释掉
$tmp = $GLOBALS['db']->getRow("select * from ecs_category where cat_id = $cid");
$cat_url = empty($tmp['cat_url']) ? 'noname' : $tmp['cat_url'];
$uri = 'c-' . $cat_url . '-' . $cid;

 

再在条件为goods的else里的代码全部改成

 

$tmp = $GLOBALS['db']->getRow("select * from ecs_goods where goods_id = $gid");
$url = empty($tmp['goods_url']) ? 'noname' : $tmp['goods_url'];
$uri = $rewrite ? 's-' . $url . '-' . $gid : 'goods.php?id=' . $gid;

在后台清空缓存,大功告成.
你还没有?FUCK!自己去看后台设置.

然后继续下一步,打开跟目录的.htaccess

 

#RewriteRule ^goods-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]
RewriteRule ^s-[a-z]+-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]

#RewriteRule ^category-([0-9]+)(.*)\.html$                                                                         category\.php\?id=$1 [QSA,L]
RewriteRule ^c-[a-z]+-([0-9]+)(.*)\.html$                                                                          category\.php\?id=$1 [QSA,L]

 

完~!休息去咯~!

posted @ 2012-09-25 16:41  longailili  阅读(364)  评论(0编辑  收藏  举报