У меня есть пользовательский модуль, определенный в установке 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 и, следовательно, перенаправляет на URL, не относящийся к seo.
Это функция инициализации контроллера. Но я не могу продолжать или исследовать, что мне делать / искать, чтобы разрешить использование 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;
}
}