Необходимо сформировать ЧПУ для конкретного производителя вида: /код-производителя/раздел-товаров/подраздел-товаров/, чтобы поисковые системы индексировали как саму страницу с описанием производителя, так и результат поиска товаров по конкретному производителю в общем каталоге для 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 инфоблока с производителями