Символьный код битрикс что это
Перейти к содержимому

Символьный код битрикс что это

  • автор:

Символьный код разделов и товаров

Добрый день.
Подскажите какую я настройку упускаю: делаю синхронизацию малого бизнеса с УПП. При загрузке на сайт создаются разделы и элементы с такими внешними кодами:
/_i_i_g_/_g_i_50_40_60_10502070_281212_0015069_dy_908/
Как сделать что бы в символьный код подставлялось имя в транслите?

Скрытый текст
Постоянный посетитель
Сообщений: 162 Баллов: 17 Регистрация: 25.12.2011
14.09.2015 16:33:28

Внешний код и символьный код — это две разные вещи. Внешний код задаётся соотвествие товара на сайте и в 1С. Т.е служит общим ID.
Символьный код — тот, который участвует в URL (ЧПУ) адресе на страницу товара.
В вашей проблеме я бы рассмотрел следующие случаи:
1) На сайте должен быть выключен кэш (на случай, если изменения смотрятся в публичной части).
2) Проверил, что данные на сайте обновляются. Это нужно, что бы исключить ситуацию, когда имя товара не передаётся (режим «обмен изменениями») и символьный код не обновляется.
3) Проверил бы файл XML с товарами. Нужно, что бы кодировка была правильной и названия товаров не пустыми

Постоянный посетитель
Сообщений: 425 Баллов: 35 Регистрация: 11.06.2007
18.09.2015 10:57:05

Как сами видите у вас много _ — это замена неалфавитных символов. Что-то вы там неперевариваемое грузите по символам.

Страницы: 1

Продукты

Управление сайтом
Битрикс24
Интернет-магазин + CRM

Внедрение

Выбрать партнера
Проверить партнера
Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве +7 (495) 229-14-41 Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Контент для лиц от 16 лет и старше

© 2001-2024 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Соглашение об использовании сайта

Генерация символьных кодов элементов или разделов в 1c-bitrix.

Для современного крупного проекта, как правило, обязательно требуется использовать чпу для страниц. Он положительно влияет на индексацию сайта и выдачу в результатах. ЧПУ — человеку понятный урл. Другими словами это транслитерированная латиницей часть урла. Мы уже разбирали транслитерацию русского алфавита на пхп. В битриксе есть такая функция, она используется, например, когда создается новый элемент или раздел инфоблока, символьный код этого элемента или раздела генерируется из его названия. Но что делать, если элементы уже созданы, а символьные коды не прописаны. Давайте рассмотрим решение для этого случая:

  $arParams['IBLOCK_ID'] = 28; //id инфоблока $arParams['LIST_CNT'] = 50; //количество элементов для генерации $arParams['TYPE_WORK'] = 'element'; // указываем для кого генерировать код $arOrder = array( "sort" => "inc", ); $arFilter = array( "IBLOCK_ID" => $arParams['IBLOCK_ID'], "IBLOCK_LID" => "s1" //имя сайта //"CODE" => "", //"CODE" => false ); $arTransParams = array( //(максимальная длина кода,регистр(нижний,верхний,не менять), //заменять пробел на. остальные символы менять на. удалять лишние символы замены) "max_len" => 100, "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true ); if($arParams['TYPE_WORK'] == 'section')NavStart($arParams['LIST_CNT']); echo '
'; while($ar_res = $db_elemens->GetNext()) < $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams); $arPropArray = Array( "CODE" =>$transName ); $el = new CIBlockSection; $res = $el->Update($ar_res["ID"], $arPropArray); echo "result for ".$ar_res["NAME"]." is ".$transName.''.($res?" and OK":" and failed")."\r\n"; > echo '

'; >elseif($arParams['TYPE_WORK'] == 'element') $arParams['LIST_CNT'])); echo '

'; //для форматированного вывода результата генерации while($obElement = $db_elemens->GetNextElement()) < $ar_res = $obElement->GetFields(); $transName = CUtil::translit(trim($ar_res["NAME"]), "ru", $arTransParams);//функция генерации сим. кода из имени $arPropArray = Array( "CODE" => $transName."-".$ar_res["ID"], );//к готовому коду добавляем "префикс" - "-id" $el = new CIBlockElement; $res = $el->Update($ar_res["ID"], $arPropArray);//записываем результат, перезаписываем код у данного элемента echo $transName."-".$ar_res["ID"]."
"; //выводим результат > echo '

'; > ?>

Запускайте несколько раз пхп-скрипт в отдельном файле или в пхп-консоли в админке битрикса, пока не перестанут выходить сообщения об успешной генерации символьного кода. В итоге в поле «Символьный код» появится латинская строка в виде соответствующего чпу. Лыжи детские: lyzhi-detskie
Игрушка LEGO: igrushka-lego

Генерация символьного кода в названиях элементов ИБ

Генерация символьных кодов для разделов и элементов инфоблоков

Задача:
С генерировать символьные коды для разделов или элементов инфоблока — если они не заданы

Используя скрипт предложенный Николаем Ефремовым делаем так:

1/ открываем командную строку PHP — Рабочий стол — Настройки — Инструменты — Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт

if(!CModule::IncludeModule("iblock")) < echo "Error with iblock module!"; die; >$arParams['IBLOCK_ID'] = 17; $arParams['LIST_CNT'] = 50; $arParams['IS_ADD_RAND'] = false; $arParams['TYPE_WORK'] = 'section'; // $arOrder = array( "sort" => "inc", ); $arFilter = array( "IBLOCK_ID" => $arParams['IBLOCK_ID'], "IBLOCK_LID" => SITE_ID, //"CODE" => "", "CODE" => false ); $arTransParams = array( "max_len" => 100, "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true ); if($arParams['TYPE_WORK'] == 'section')< //for SECTIONS $db_elemens = CIBlockSection::GetList($arOrder, $arFilter, false); $db_elemens->NavStart($arParams['LIST_CNT']); echo '
'; while($ar_res = $db_elemens->GetNext()) < $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams); if($arParams['IS_ADD_RAND'])< $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"]; >$arPropArray = Array( "CODE" => $transName ); $el = new CIBlockSection; $res = $el->Update($ar_res["ID"], $arPropArray); echo "result for ".$ar_res["NAME"]." is ".$transName.''.($res?" and OK":" and failed")."\r\n"; > echo '

'; >elseif($arParams['TYPE_WORK'] == 'element') < // for ELEMENTS $db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array("nTopCount" =>$arParams['LIST_CNT'])); $i = 0; echo '

'; while($obElement = $db_elemens->GetNextElement()) < $ar_res = $obElement->GetFields(); $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams); if($arParams['IS_ADD_RAND']) < $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"]; >$arPropArray = Array( "CODE" => $transName, ); $el = new CIBlockElement; $res = $el->Update($ar_res["ID"], $arPropArray); echo "result for ".$ar_res["NAME"]." is ".$transName.''.($res?" and OK":" and failed")."\r\n"; > echo '

'; >

2/ Определяемся с инфоблоком — ниже в скрипте в параметр $arParams[‘IBLOCK_ID’] нужно записать его ID

3/ Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams[‘IS_ADD_RAND’]

4/ Указываем шаг выборки — параметр $arParams[‘LIST_CNT’] — большим не стоит делать, максимум 100 элементов за раз

5/ Настраиваем параметры транслита. За это отвечает массив $arTransParams

$arTransParams = array( "max_len" => 100, "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true );

6/ Указываем для чего будем проводить генерацию — для разделов или для элементов — параметр $arParams[‘TYPE_WORK’] — возможные значения —

7/ Жмем кнопку выполнить — прогнать скрипт нужное количество раз

Автогенерация символьных кодов разделов и элементов Битрикс

Для автогенерации символьных кодов, не зависимо от того, каким образом попадают разделы и элементы на сайт (выгрузка из xml или ручное добавление), достаточно в файл /bitrix/php_interface/init.php добавить вот такой код

"-","replace_other"=>"-"); $trans = Cutil::translit($name,"ru",$arParams); $arFields["CODE"] = $trans; > > AddEventHandler("iblock", "OnBeforeIBlockSectionAdd", Array("MyClass50", "OnBeforeIBlockSectionAddHandler")); class MyClass50< function OnBeforeIBlockSectionAddHandler(&$arFields) < $name = $arFields["NAME"]; $arParams = array("replace_space"=>"-","replace_other"=>"-"); $trans = Cutil::translit($name,"ru",$arParams); $arFields["CODE"] = $trans; > > ?> 

Само собой, если сайт новый, то автогенерация вполне спокойно настраивается при создании инфоблоков, или в настройках Импорта с 1С. В большей степени, данный метод применим для уже работающих сайтов, которые хотят перейти с ID на CODE в разделах и элементах

Способ подсмотрен в блогах Битрикс

Видео: Вариант применения данного способа

Видео- запись трансляции, без монтажа, потому с провисаниями. Бонусом- способ удалить большой каталог если не удаляется:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *