Ссылки в 1С на товар на сайте под управлением Битрикс


Для удобства работы с интернет-магазином часто просят разместить ссылку на товар на сайте в карточке "Номенклатура".
Т.к. ссылка на сайте может изменяться в связи с перемещение товаров по разделам, а также другим причинам, лучше получать ссылку через идентификатор товара.
Основное решение подсказали на этом сайте: http://dev.1c-bitrix.ru
Делаем как там написано:
  • Создаем файл get_url.php
  • Вводим туда код: 
 <?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
CModule::IncludeModule("iblock");
?>

<?
$res = CIBlockElement::GetList(
                     Array("ID"=>"DESC"), 
                     Array("XML_ID"=>$HTTP_GET_VARS['ID']),
                     false,
                     Array(),
                     Array("IBLOCK_ID","DETAIL_PAGE_URL")
                     );   
$arItem = $res->GetNext();

if(strlen($arItem['DETAIL_PAGE_URL']))
{
   LocalRedirect($arItem['DETAIL_PAGE_URL']);
}
else
   echo 'Ошибка! Товара с указанным артикулом нет на сайте.';

?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
  • Закидываем в корень сайта.
И.. по запросу http://my_site/get_url.php?id=my_code_from_1C получаем первый товар из каталога. Но не с нашим ID.
Скрипт отказывается принимать параметр.
После долгих поисках на просторах интернета находим небольшой совет на toster.ru:
"Лучше не делайте напрямую запрос из $_GET, а обрабатывайте $ELEMENT_ID = filter_input(INPUT_GET, 'id'); во избежание разных сюрпризов.".
Переписываем наш скрипт:

 <?
 	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
	CModule::IncludeModule("iblock");
	?>
  	<?
$ex_id = filter_input(INPUT_GET, 'ex_id');;
$res = CIBlockElement::GetList(
                     Array("ID"=>"DESC"),
                     Array("EXTERNAL_ID"=>$ex_id),
                     false,
                     Array(),
                     Array("IBLOCK_ID","DETAIL_PAGE_URL")
                     );
$arItem = $res->GetNext();
if(strlen($arItem['DETAIL_PAGE_URL']))
   LocalRedirect($arItem['DETAIL_PAGE_URL']."/");
}
else
   echo 'Нифига! Такая байда не найдена.';
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Работает!

Примечание. Если вы делали интеграцию из 1С в Битрикс - тогда EXTERNAL_ID это УникальныйИдентификатор элемента справочника.
В нашем примере:
	 СсылкаНаСайт = "http://my_site/get_url.php?ex_id" + Ссылка.УникальныйИдентификатор();
Таким образом мы можем быстро получить нужные ссылки.

Ведущий 1С программист
Тельнова Яна.



Если у вас возникли вопросы, вы можете обратиться к нашим специалистам