На днях под нож ко мне лег сайт, с жалобой что после изменения структуры каталога, а именно удаления разделов, не открывается детальная страница. Казалось бы, что может быть проще - но повозится пришлось изрядно. Обратившись в информативно-справочную службу Гугл, умозаключил, что проще всего вылечить пациента - это настроить обработку адресов.
Допустим, имеем компонент "каталог" на странице /catalog/ . Настраиваем ЧПУ
Далее, создаем страницу detail.php в папке /catalog/
На страницу кидаем компонент "Элемент каталога детально". И настраиваем его
Ставим галочки, чтобы менялись заголовки
Теперь идем в админку настраивать обработку адресов.
Пишем вот это:
#^/catalog/([a-zA-Z0-9_-]+)/#
/catalog/detail.php
ELEMENT_CODE=$1
После данных манипуляций, все должно работать. Но, если при открытии детальной страницы в конце адреса есть GET переменные то компонент не работает. То есть для адреса
/catalog/akusticheskiy_tomograf_kaskad_3_techeiskatel_korrelyatsionnyy/?clear_cache=Y
где в конце ?clear_cache=Y компонент не откроет элемент, ибо ELEMENT_CODE будет равен
akusticheskiy_tomograf_kaskad_3_techeiskatel_korrelyatsionnyy/?clear_cache=Y
Решается это путем обработки адресов либо в detail.php перехватываем $_REQUEST и удаляем лишнее. Можно например сделать вот так:
if(strpos($_REQUEST["ELEMENT_CODE"],'?') !== false){
$a = explode('?', $_REQUEST["ELEMENT_CODE"]);
$_REQUEST["ELEMENT_CODE"] = $a[0];
}
Ну вот и все.
Допустим, имеем компонент "каталог" на странице /catalog/ . Настраиваем ЧПУ
Далее, создаем страницу detail.php в папке /catalog/
На страницу кидаем компонент "Элемент каталога детально". И настраиваем его
Ставим галочки, чтобы менялись заголовки
Теперь идем в админку настраивать обработку адресов.
Пишем вот это:
#^/catalog/([a-zA-Z0-9_-]+)/#
/catalog/detail.php
ELEMENT_CODE=$1
После данных манипуляций, все должно работать. Но, если при открытии детальной страницы в конце адреса есть GET переменные то компонент не работает. То есть для адреса
/catalog/akusticheskiy_tomograf_kaskad_3_techeiskatel_korrelyatsionnyy/?clear_cache=Y
где в конце ?clear_cache=Y компонент не откроет элемент, ибо ELEMENT_CODE будет равен
akusticheskiy_tomograf_kaskad_3_techeiskatel_korrelyatsionnyy/?clear_cache=Y
Решается это путем обработки адресов либо в detail.php перехватываем $_REQUEST и удаляем лишнее. Можно например сделать вот так:
if(strpos($_REQUEST["ELEMENT_CODE"],'?') !== false){
$a = explode('?', $_REQUEST["ELEMENT_CODE"]);
$_REQUEST["ELEMENT_CODE"] = $a[0];
}
Ну вот и все.
Вариант работает даже в 2020, иного решения не нашел =(
ОтветитьУдалить