Кастомизация макроса content redirect()
Задача
Предположим, имеется следующая структура каталога обусловленная шаблоном:
- Основная категория, в которой выводятся подкатегории товаров
- В каждой подкатегории выводятся дочерние подкатегории, либо только одна подкатегория, в которой находится один товар.
Редирект необходимо делать с тех категорий, выводимых в основной категории, в которых содержится только одна категория с одним товаром.Соответственно, редирект нужно сделать на этот конечный товар, минуя ту единственную категорию,в которой он содержится.
Через таблицу cms_redirects такой редирект работать не будет, так как страницы с которых идет перенаправление существуют и активны. Если прописать для этих страниц стандартный макрос %content redirect()%, то переадресация произойдет прямо с основной страницы каталога, на которой данные категории выводятся.
Решение
Необходимо кастомизировать %content redirect()% так, чтобы осуществлялась проверка на источник перехода, т.е. будем проверять равенство идентификатора текущей страницы идентификатору, переданному в качестве параметра $source Если вызывать именно такой макрос на страницах выводимых в каталоге категорий, то переадресации с первой страницы каталога происходить не будет.
Открываем файл /classes/modules/content/_custom.php и вставляем туда следующий метод:
public function customRedirect($source= "",$url = "") {
$current_page_id = cmsController::getInstance()->getCurrentElementId();
if(is_numeric($url)&&is_numeric($source)&&$source==$current_page_id) {
$url = $this->get_page_url($url);
def_module::redirect($url);
}
}