Кастомизация макроса content redirect()

Материал из Umicms
Версия от 12:59, 16 июля 2018; Po4emu4ka (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача

Предположим, имеется следующая структура каталога обусловленная шаблоном:

  • Основная категория, в которой выводятся подкатегории товаров
  • В каждой подкатегории выводятся дочерние подкатегории, либо только одна подкатегория, в которой находится один товар.

Редирект необходимо делать с тех категорий, выводимых в основной категории, в которых содержится только одна категория с одним товаром.Соответственно, редирект нужно сделать на этот конечный товар, минуя ту единственную категорию,в которой он содержится.

Через таблицу 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);
			}
			
		}