Кастомизация компонента хлебные крошки для мультиязычности bitrix
01/14/2015

На днях дали задачу создать английскую языковую версию для bitrix. Одним из условий было использовать тот же инфоблок что и для русской версии сайта. В итоге пришлось переписать много компонентов для сайта. Сегодня опишу решение кастомизации компонента хлебных крошек (цепочки навигации).

Каталог>Садово-парковое оборудование требуется перевести в вид Catalogue> Garden Equipment. Для этого будем использовать пользовательские свойства для раздела. Создаем пользовательское свойство для раздела «UF_EN_NAME» и вносим туда англ. название каталога. Далее переписываем шаблон компонента breadcrumb (template.php) таким образом: Кастомизированый шаблон хлебных крошек bitrix

  1. $strReturn = '<div class="breadcrumb">';
  2. for($index = 0, $itemSize = count($arResult); $index < $itemSize; $index++)
  3. {
  4. if($index > 0) {
  5. $strReturn .= '<span class="separator"> <i class="fa fa-angle-right"></i> </span>';
  6. $cutLink=explode("/", $arResult[$index]["LINK"]);//разбиваем путь на SECTION_CODE
  7. $cnt=count($cutLink);//считаем количество элементов массива
  8. $numSecNow=$cnt-2;//номер текущего (чпу со "/" на конце, поэтому -2)
  9. $secNow=$cutLink["$numSecNow"];//нужный нам SECTION_CODE
  10. }
  11. else $secNow="first";//не обязательно ваще
  12. //тут чудо-код нашего друга. спс за него!
  13. $iblock_ids = 20; //мы должны знать ID инфоблока каталога
  14. $custom_name = 'UF_EN_NAME'; //символьный код свойства для кастомного тайтла
  15. if(CModule::IncludeModule("iblock")){
  16. $dbSection = CIBlockSection::GetList(
  17. array("SORT"=>"ASC"),//сортировка по возрастанию. нам все равно
  18. array(
  19. "IBLOCK_ID" => $iblock_ids,//ищем наше свойство по ID инфоблока
  20. "CODE" => $secNow//и по найденному SECTION_CODE
  21. ),
  22. false,
  23. array($custom_name)//тут собсно то, что нам нужно достать
  24. );
  25. if ($arSection = $dbSection->GetNext()){
  26. $new_name = $arSection["$custom_name"];
  27. }
  28. }
  29. $title = htmlspecialcharsex($arResult[$index]["TITLE"]);//из стандартного шаблона
  30. if ($new_name) {//если нашли, что нам нужно, присваиваем его
  31. $name=$new_name;
  32. }
  33. else {//если нет - оставляем стандартный
  34. $name=$title;
  35. }
  36. if($arResult[$index]["LINK"] <> ""&&$index<(count($arResult)-1))//уже попсовый костыль, чтоб последняя крошка была без ссылки
  37. $strReturn .= '<a href="'.$arResult[$index]["LINK"].'" title="'.$new_name.'" rel="v:url" property="v:title">'.$name.'</a>';
  38. else
  39. $strReturn .= '<li>'.$name.'</li>';
  40. }
  41. $strReturn .= "</div> ";//$str
  42. return $strReturn;

В итоге мы получаем требуемый результат. Если мы хотим добавить в конце цепочки еще и название товара на англ, делаем это через новое свойство название на англ. Этот вариант подойдет только для каталога. Переписываем немного нижнюю часть шаблона breadcrumb.

  1. $strReturn .= '<a href="'.$arResult[$index]["LINK"].'" title="'.$names.'" rel="v:url" property="v:title">'.$names.'</a>';
  2. }
  3. return $strReturn;

А в шаблоне catalog.element после вызова хлебных крошек добавляем, $arResult[«PROPERTIES»][«NAME_EN»][«VALUE»] наше название товара на англ.

  1. <span class="separator"> <i class="fa fa-angle-right"></i> </span> <?=$arResult["PROPERTIES"]["NAME_EN"]["VALUE"]?>
  • Комментарии
Загрузка комментариев...