1

我正在尝试在 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();
4

1 回答 1

2

我假设您有一个 .htaccess 文件设置并且您已经在使用 OpenCart 1.5 中内置的 SEO。如果没有,这里有一些很好的说明:Kevin Dees将 SEO Friendly URL'S 添加到 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以生成正确的 url。我注释掉了生成链接的行并在其上方添加了我自己的 2 行(您需要将http://www.example.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.example.com/search?".$url."&page={page}";
//$pagination->url = $this->url->link('product/search', $url . '&page={page}');

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

资源:

于 2012-07-31T20:05:01.547 回答