Необходимо сформировать ЧПУ для конкретного производителя вида: /код-производителя/раздел-товаров/подраздел-товаров/, чтобы поисковые системы индексировали как саму страницу с описанием производителя, так и результат поиска товаров по конкретному производителю в общем каталоге для CMS 1C-Bitrix, учитывая стандартный функционал системы поиска (фильтрации) по каталогу. |
В файле .urlrewrite.php создадим правило обработки запроса:
array( "CONDITION" => "#^/brand/([^\\/]+)((/\\?([^@]+))|/\$|\$)#", "RULE" => "BRAND_CODE=\$1", "ID" => "", "PATH" => "/brand/index.php", ),
В итоге, при запросе /brand/manufactory/ у нас будет открываться страница /brand/index.php c доступной REQUEST-переменной $_REQUEST[BRAND_CODE] = 'manufactory'. Далее, используя эту переменную, можно вывести всю информацию, касающуюся непосредственно этого производителя, например, список разделов, где встречаются товары данного производителя.
Теперь необходимо сформировать запрос фильтрации по производителю НО с нужным нам URL:
Вместо:Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] Это:Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/js/ipol.aseo/urlrewrite.php$ RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/js/ipol.aseo/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
if(!$requestUri) { $pattern = '/brand\/([^\/]+)\/([^\?]+)/'; preg_match($pattern, $_SERVER['REQUEST_URI'], $matches); if(count($matches) > 0) { $requestUri = '/catalog/'.$matches[2]; $GLOBALS['CurrentBrend'] = urldecode($matches[1]); } }
arrFilter_{ID_PROPERTY}_abs(crc32(urldecode({BRAND_ID}) {ID_PROPERTY} – ID свойства инфоблока, можно поссмотреть в админке. {BRAND_ID} — ID производителяТаким образом перед вызовом компонента bitrix:catalog ставим код:
if(!empty($GLOBALS['CurrentBrend'])) { $IBLOCK_ID = 33; $arSelect = Array("ID"); $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>$GLOBALS['CurrentBrend']); $res = CIBlockSection::GetList(Array(), $arFilter, false, Array("nTopCount"=>1), $arSelect); if($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); $BRAND_ID = $arFields['ID']; } $BRAND_CRC = abs(crc32(urldecode($BRAND_ID))); $_GET['arrFilter_110_'.$BRAND_CRC] = "Y"; $_GET['set_filter'] = "Применить"; } $IBLOCK_ID – id инфоблока с производителями
В итоге мы получили страницы типа /brand/manufactory/ - с описанием конкретного производителя.
И страницы /brand/manufactory/category/ - ведущие на витрину товаров в раздел "category", отфильтрованную по производителю "manufactory".
Пример такой схемы работы можно увидеть на сайте ruspet.ru на странице бренда Acana. А вот и отфильтрованная страница раздела: http://ruspet.ru/brand/acana/sobaki/
То есть мы получили отфитрованную страницу по красивому УРЛ не модифицируя компонент или фильтр, а лишь заменив REQUEST_URI в массиве SERVER так, чтобы Битрикс думал, что мы находимся на обычной странице каталога с обычным выставленным фильтром.