我在Prestashop 1.7.1.1安装中定义了一个自定义模块。
此模块定义了一个新的类别页面,其中添加了自定义功能和布局。
类别1034
代表Foo Brand
,并且可以通过以下两种方式访问:
https://www.example.com/module/categorypage/subcategory?id_category=1034
及其seo友好URL:
https://www.example.com/1034-foo-brand
但是,当使用最新版本时,显示的页面是第一页。
在浏览器中进行调试时,我可以看到Prestashop如何返回html 302代码,从而重定向到非seo友好的URL。
这是控制器的初始化功能。但是我无法继续继续或研究如何/寻找为该替代页面/控制器启用seo友好URL的方法:
public function init()
{
// Get category ID
$id_category = (int)Tools::getValue('id_category');
if (!$id_category || !Validate::isUnsignedId($id_category)) {
$this->errors[] = Tools::displayError('Missing category ID');
}
$checkCategoryDepth = new Category($id_category, $this->context->language->id);
$depth = $checkCategoryDepth->level_depth - 1;
if ($depth > 2) {
Tools::redirect($this->context->link->getCategoryLink($checkCategoryDepth->id, $checkCategoryDepth->link_rewrite));
}
if ($depth == 2) {
$this->context->smarty->assign('selected_category_id', $checkCategoryDepth->id);
$this->category = new Category($checkCategoryDepth->id_parent, $this->context->language->id);
} else {
$this->category = $checkCategoryDepth;
}
parent::init();
// Check if the category is active and return 404 error if is disable.
if (!$this->category->active) {
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
}
// Check if category can be accessible by current customer and return 403 if not
if (!$this->category->checkAccess($this->context->customer->id)) {
header('HTTP/1.1 403 Forbidden');
header('Status: 403 Forbidden');
$this->errors[] = Tools::displayError('You do not have access to this category.');
$this->customer_access = false;
}
}
答案 0 :(得分:1)
如果您将自己的模块与具有自己的控制器的新页面一起使用,则应在钩子moduleRoutes中的模块主类中定义友好的URL规则。因此,首先在install方法中的此挂钩中注册您的模块
public function install()
{
return parent::install() && $this->registerHook('moduleRoutes');
}
然后确定如何构建您的URL
public function hookModuleRoutes()
{
return array(
'module-your_module-your_controller' => array(
'controller' => 'your_controller',
'rule' => 'some_short_url_you_want_to_have', // for example category/{id_category}/{rewrite}
'keywords' => array(
'id_category' => array('regexp' => '[0-9]+', 'param' => 'id_category'),
'rewrite' => array('regexp' => '[_a-zA-Z0-9\pL\pS-]*')
), // here should be described everything what is used for rule
'params' => array(
'fc' => 'module',
'module' => 'your_module',
)
)
);
}
在进行了这些操作之后,您应该可以使用自己的网址了。