OpenCart Change Pagination链接到SEO链接

时间:2012-07-24 10:50:56

标签: php nginx preg-replace str-replace opencart

我试图在OpenCart中替换我的分页。

由此:

$pagination->url = $this->url->link('product/search', $url . '&page={page}');
// Spits out 
www.site.com/index.php?route=product/search&filter_name=QUERY&page=2

到此:

$pagination->url = $this->url->link('product/search', $url . '&page={page}');
// Spits out 
www.site.com/search?q=QUERY&page=2

该文件位于 /catalog/controller/product/search.php (OC 1.5靠近第438-444行)。完整的代码块:

$pagination = new Pagination();
$pagination->total = $product_total;
$pagination->page = $page;
$pagination->limit = $limit;
$pagination->text = $this->language->get('text_pagination');

$pagination->url = $this->url->link('product/search', $url . '&page={page}');
$this->data['pagination'] = $pagination->render();

1 个答案:

答案 0 :(得分:1)

我假设你有一个.htaccess文件设置,你已经在使用OpenCart 1.5中内置的SEO。如果没有,这里有一些非常好的指示:Kevin Dees的Adding SEO Friendly URL’S to OpenCart

这是一个部分黑客攻击,但是如果你想修复的只是分页,它应该可以工作。

首先,您需要在前面引用的.htaccess文件中添加3行。在这一行之后:

RewriteRule sitemap.xml /index.php?route=feed/google_sitemap

添加:

RewriteCond %{QUERY_STRING} q=([^&]*) [OR]
RewriteCond %{SCRIPT_FILENAME} .*search$
RewriteRule search$ /index.php?route=product/search&filter_name=%1 [L,QSA]

因此,.htaccess文件的所有部分应如下所示:

RewriteBase /
RewriteRule sitemap.xml /index.php?route=feed/google_sitemap
RewriteCond %{QUERY_STRING} q=([^&]*) [OR]
RewriteCond %{SCRIPT_FILENAME} .*search$
RewriteRule search$ /index.php?route=product/search&filter_name=%1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

接下来,您需要修改 /catalog/controller/product/search.php 以生成正确的网址。我注释掉生成链接的行并在其上面添加了我自己的2行(您需要用您自己的信息替换 http://www.site.com ):

$pagination = new Pagination();
$pagination->total = $product_total;
$pagination->page = $page;
$pagination->limit = $limit;
$pagination->text = $this->language->get('text_pagination');

$url = preg_replace("/filter_name/","q",$url);
$pagination->url = "http://www.site.com/search?".$url."&page={page}";
//$pagination->url = $this->url->link('product/search', $url . '&page={page}');

$this->data['pagination'] = $pagination->render();

<强>资源:
我从RoScripts.com Pretty URLs - a guide to URL rewriting找到了RewriteRules的一些基础知识 以下是Nidaan here从博客评论中提取查询字符串的示例。
最后关于apache&mods.rewrite的其他内容访问:Apache Module mod_rewrite

祝你好运!上帝保佑!