На днях дали задачу создать английскую языковую версию для bitrix. Одним из условий было использовать тот же инфоблок что и для русской версии сайта. В итоге пришлось переписать много компонентов для сайта. Сегодня опишу решение кастомизации компонента хлебных крошек (цепочки навигации).
Каталог>Садово-парковое оборудование требуется перевести в вид Catalogue> Garden Equipment. Для этого будем использовать пользовательские свойства для раздела. Создаем пользовательское свойство для раздела «UF_EN_NAME» и вносим туда англ. название каталога. Далее переписываем шаблон компонента breadcrumb (template.php) таким образом: Кастомизированый шаблон хлебных крошек bitrix
- $strReturn = '<div class="breadcrumb">';
- for($index = 0, $itemSize = count($arResult); $index < $itemSize; $index++)
- {
- if($index > 0) {
- $strReturn .= '<span class="separator"> <i class="fa fa-angle-right"></i> </span>';
- $cutLink=explode("/", $arResult[$index]["LINK"]);//разбиваем путь на SECTION_CODE
- $cnt=count($cutLink);//считаем количество элементов массива
- $numSecNow=$cnt-2;//номер текущего (чпу со "/" на конце, поэтому -2)
- $secNow=$cutLink["$numSecNow"];//нужный нам SECTION_CODE
- }
- else $secNow="first";//не обязательно ваще
- //тут чудо-код нашего друга. спс за него!
- $iblock_ids = 20; //мы должны знать ID инфоблока каталога
- $custom_name = 'UF_EN_NAME'; //символьный код свойства для кастомного тайтла
- if(CModule::IncludeModule("iblock")){
- $dbSection = CIBlockSection::GetList(
- array("SORT"=>"ASC"),//сортировка по возрастанию. нам все равно
- array(
- "IBLOCK_ID" => $iblock_ids,//ищем наше свойство по ID инфоблока
- "CODE" => $secNow//и по найденному SECTION_CODE
- ),
- false,
- array($custom_name)//тут собсно то, что нам нужно достать
- );
- if ($arSection = $dbSection->GetNext()){
- $new_name = $arSection["$custom_name"];
- }
- }
- $title = htmlspecialcharsex($arResult[$index]["TITLE"]);//из стандартного шаблона
- if ($new_name) {//если нашли, что нам нужно, присваиваем его
- $name=$new_name;
- }
- else {//если нет - оставляем стандартный
- $name=$title;
- }
- if($arResult[$index]["LINK"] <> ""&&$index<(count($arResult)-1))//уже попсовый костыль, чтоб последняя крошка была без ссылки
- $strReturn .= '<a href="'.$arResult[$index]["LINK"].'" title="'.$new_name.'" rel="v:url" property="v:title">'.$name.'</a>';
- else
- $strReturn .= '<li>'.$name.'</li>';
- }
- $strReturn .= "</div> ";//$str
- return $strReturn;
В итоге мы получаем требуемый результат. Если мы хотим добавить в конце цепочки еще и название товара на англ, делаем это через новое свойство название на англ. Этот вариант подойдет только для каталога. Переписываем немного нижнюю часть шаблона breadcrumb.
- $strReturn .= '<a href="'.$arResult[$index]["LINK"].'" title="'.$names.'" rel="v:url" property="v:title">'.$names.'</a>';
- }
- return $strReturn;
А в шаблоне catalog.element после вызова хлебных крошек добавляем, $arResult[«PROPERTIES»][«NAME_EN»][«VALUE»] наше название товара на англ.
- <span class="separator"> <i class="fa fa-angle-right"></i> </span> <?=$arResult["PROPERTIES"]["NAME_EN"]["VALUE"]?>