10

我可以在控制器中使用一行代码来确定当前页面的路由吗?

例如,我想用 SEO url 找到页面的路由https://example.com/desktops(这应该返回路由product/category)。

类似地,诸如 url 之类的https://example.com/index.php?route=product/product&path=18&product_id=47应该将路由返回为product/product.

4

3 回答 3

15

老实说,正确的答案是$this->request->get['route'];

为了捕捉当前路线,可以$this->request->get['route'];catalog/controller/common/header.php文件中使用index()函数。Header.php几乎是任何前端输出的一部分(据我了解,现在您不确定使用的是什么控制器,http://example.com/desktops因此您需要在任何情况下都可以运行代码的正确位置)。

SEO 模块不会取消设置请求对象的这一部分。另外,请记住,在 OpenCart 代码生成过程中,$_GET数组和$this->request->get数组不是一回事。当 SEO 模块运行时,您不会在 $_GET 超全局 php 数组中捕获当前路线(以“路径/控制器/操作”格式),但您可以使用$this->request->getOpenCart 引擎为您准备的数组使用任何控制器捕获它.

于 2013-09-25T19:08:52.537 回答
0

这是通过在url_alias表中查询特定关键字来完成的,以便为您提供标准设置附带的四个 ID 之一(product_idcategory_id和)information_id以及manufacturer_id由 分隔的 id 值=

在您的桌面示例中,它类似于category_id=20. 从那里,您需要制定路线

您可以在文件中找到 OpenCart 执行此操作的确切方式/catalog/controller/common/seo_url.php

于 2013-06-26T14:43:49.137 回答
0

编辑:

在控制器中,我们有$this->request->get['route'].

seo_url.php:

if (isset($this->request->get['product_id'])) {
    $this->request->get['route'] = 'product/product';
} elseif (isset($this->request->get['path'])) {
    $this->request->get['route'] = 'product/category';
} elseif (isset($this->request->get['manufacturer_id'])) {
    $this->request->get['route'] = 'product/manufacturer/info';
} elseif (isset($this->request->get['information_id'])) {
    $this->request->get['route'] = 'information/information';
}
于 2013-06-27T13:03:18.017 回答