我可以在控制器中使用一行代码来确定当前页面的路由吗?
例如,我想用 SEO url 找到页面的路由https://example.com/desktops
(这应该返回路由product/category
)。
类似地,诸如 url 之类的https://example.com/index.php?route=product/product&path=18&product_id=47
应该将路由返回为product/product
.
老实说,正确的答案是$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->get
OpenCart 引擎为您准备的数组使用任何控制器捕获它.
这是通过在url_alias
表中查询特定关键字来完成的,以便为您提供标准设置附带的四个 ID 之一(product_id
、category_id
和)information_id
以及manufacturer_id
由 分隔的 id 值=
。
在您的桌面示例中,它类似于category_id=20
. 从那里,您需要制定路线
您可以在文件中找到 OpenCart 执行此操作的确切方式/catalog/controller/common/seo_url.php
编辑:
在控制器中,我们有$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';
}