Одинаковые символьные коды для ЧПУ

Рейтинг: 3.8060  
На голосовании
Предложил AndreyChursin 03.05.2017 14:24:36

Одинаковые символьные коды для ЧПУ

Если 2 одинаковых товара/услуги в разных разделах тогда ЧПУ с символьным кодом не сработает корректно!!!
Нужно дописать функционал "строгой проверки ссылки на элемент" и проверять раздел элемента для определения ELEMENT_ID.

p.s. По этой теме много недовольства при импорте товаров из других CMS, где символьный код использовался в url

Рейтинг: 0.21  
Стрельцов Юрий 07.07.2017 00:47:11
Проблема присутствует, решения нет?
Рейтинг: 0.4211  
Стрельцов Юрий 07.07.2017 00:47:23
Проблема присутствует, решения нет?
Рейтинг: 0.2084  
AndreyChursin 07.07.2017 10:02:26
Строгая проверка была введена для решения проблемы с дублями, а не для организации ЧПУ с элементами, у которых одинаковый символьный код.
С уважением,
Дмитрий Межнин.

Как я уже написал выше, строгая проверка была реализована для другого.

В настоящий момент не стоит реализация задачи ЧПУ для элементов с одинаковыми символьным кодом.
У нас есть сайт, где вы можете с другими пользователями, партнерами и непосредственно разработчиками продукта обсудить необходимость конкретной доработки: http://idea.1c-bitrix.ru/.

С уважением,
Дмитрий Межнин.
Рейтинг: 0.4211  
Стрельцов Юрий 07.07.2017 14:05:28
Ожидаем решения от разработчиков, функционал нужный, в больших ИМ одинаковых названий в разных разделах много.
Рейтинг: 0  
Махонин Павел 20.07.2017 15:35:26
А чем вас не устраивает возможность указывать каноническую ссылку (rel=canonical)?

Сейчас в битриксе есть возможность её включить - тогда все дубли будут "склеиваться" на одну страницу.

Для старых версий битрикса можно воспользоваться этой статьей и сделать всё "ручками", сам её не проверял, но вроде как там все в порядке (https://toster.ru/q/167859)
Рейтинг: 0  
AndreyChursin 03.08.2017 21:06:25

Махонин Павел 20.07.2017 15:35:26 А чем вас не устраивает возможность указывать каноническую ссылку (rel=canonical)?

Сейчас в битриксе есть возможность её включить - тогда все дубли будут "склеиваться" на одну страницу.

Для старых версий битрикса можно воспользоваться этой статьей и сделать всё "ручками", сам её не проверял, но вроде как там все в порядке (https://toster.ru/q/167859)                                                                                                          

   
                                                                               
Это каким это образом SEO оптимизация стала влиять на логику работы компонентов???
Рейтинг: 1.2602  
AndreyChursin 03.08.2017 23:28:55
Код в element.php исправляет дублирование и прочее(ищет ELEMENT_ID по коду и коду раздела)
if($arResult["VARIABLES"]["ELEMENT_CODE"]&&$arResult["VARIABLES"]["SECTION_CODE"]){
   $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
   $res = CIBlockElement::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"],"SECTION_CODE"=>$arResult["VARIABLES"]["SECTION_CODE"],"CODE"=>$arResult["VARIABLES"]["ELEMENT_CODE"]),false,false, Array("ID"));
   while($ob = $res->GetNextElement()){
      $arFields = $ob->GetFields();
      $arResult["VARIABLES"]["ELEMENT_ID"] = $arFields["ID"];
   }
}
Рейтинг: 0  
Якимов Антон 14.01.2020 02:53:55
Для компоненты каталога сделал такое решение:

1. скопировать компонент catalog в папку /local/components/bitrix/

2. В файле /local/components/bitrix/catalog/component.php после 74 строчки переопределить массив $arVariables
if($componentPage == "element"){
      $sectionsCodes = explode("/", $arVariables["SECTION_CODE_PATH"]."/".$arVariables["ELEMENT_CODE"]);
      $query = CIBlockSection::GetList(
         array("depth_level"=>"asc"),
         array("IBLOCK_ID" => $arParams["IBLOCK_ID"],"CODE" => $sectionsCodes),
      );
      $depht = count($sectionsCodes);
      $currentDepht = 1;
      $parentID = "";
      $arSectionIDs = array(0 => "/");
      while($arSect = $query->GetNext()){
         if(
            $arSect["IBLOCK_SECTION_ID"] == $parentID && 
            $arSect["DEPTH_LEVEL"] == $currentDepht && 
            $arSect["CODE"] == $sectionsCodes[$currentDepht-1]
         ){
            $parentID = $arSect["ID"];
            $currentDepht++;
            $arSectionIDs[] = $arSect["ID"];
         }
      }
      $need_redefine_template = true; 
      if($arSectionIDs[$depht] > 0 && $need_redefine_template){ // если помимо элемента есть раздел соответствующий текущему адресу и нужно переназначить шаблон с element на section
         $componentPage = "section";
         $arVariables = array(
            "SECTION_CODE_PATH" => implode("/",$sectionsCodes),
            "SECTION_ID" => $arSectionIDs[$depht],
            "SECTION_CODE" => $arVariables["ELEMENT_CODE"]
         );
      }
      elseif($arSectionIDs[$depht-1] > 0){ //
         $query = CIBlockElement::GetList(
            array(),
            array("IBLOCK_ID" => $arParams["IBLOCK_ID"],"CODE" => $arVariables["ELEMENT_CODE"],"IBLOCK_SECTION_ID"=>$arSectionIDs[$depht-1])
         );
         if($arElement = $query->GetNext()){
            $arVariables["ELEMENT_ID"] = $arElement["ID"];
         }
      }
   }
Решение работает в 20 версии