/ Транслитерация символьного кода при добавлении элементов или разделов в Битрикс

Транслитерация символьного кода при добавлении элементов или разделов в Битрикс

27 Июл 2020
Дмитрий М.
1657

Допустим мы добавляем товар при помощи метода CIBlockElement::Add, товар добавляем в инфоблок с ID = 1, так же товар имеет набор свойств, к примеру: PRICE, ARTICLE, SALE.

PRICE - содержит цену на элемент.
ARTICLE - содержит артикул элемента
SALE - записан размер скидки на элемент при её наличии.

Помимо свойств элементу добавляем превью и детальное изображение, превью описание и детальное описание.

Код добавления такого элемента будет выглядеть следующим образом:

use Bitrix\Main\Loader;
Loader::includeModule('iblock');

$preview_picture 	= CFile::MakeArray($preview_url); // $preview_url содержит ссылку на изображение, метод CFile::MakeArray подготавливает массив описания изображения для загрузки
$detail_picture 	= CFile::MakeArray($detail_url); // $detail_url содержит ссылку на изображение, метод CFile::MakeArray подготавливает массив описания изображения для загрузки
$NAME 				= 'Элемент 1';
$preview_text 		= 'Текст краткого описания элемента';
$detail_text 		= 'Текст детального описания элемента';

//массив со свойствами элемента
$PROP = array(
	"PRICE"		=> '12799',
	"ARTICLE"	=> '33345821',
	"PRICE"		=> '790',
);

//Получение символьного кода путём транслитерации наименования элемента
$arTranslitParams = array("replace_space"=>"-","replace_other"=>"-"); // Указываем на какой символ заменять пробел, на какой символ заменять все остальные символы отличные от букв и цифр.
$CODE = Cutil::translit(strtolower($NAME),"ru",$arTranslitParams); // функцией strtolower - преобразуем все Заглавные буквы в Названии элемента в строчные буквы. Cutil::translit - транслитерирует русское наименование элемента.

$arLoadProductArray = Array(
	'CODE'				=> $CODE, // Символьный код элемента, будем получать при помощи транслитерации из названия
	"MODIFIED_BY"    	=> 1, // элемент изменен пользователем с ID 1
	"IBLOCK_SECTION_ID" => '', // Если не указан, то элемент будет лежать в корне раздела
	"IBLOCK_SECTION"    => 76, // ID родительского раздела элемента
	"IBLOCK_ID"      	=> 1, // ID инфоблока элемента
	"PROPERTY_VALUES"	=> $PROP, // Массив свойств элемента
	"NAME"           	=> $NAME, // Наименование элемента
	"ACTIVE"         	=> "Y", // Статус активности элемента
	"PREVIEW_PICTURE"   => $preview_picture,
	"DETAIL_PICTURE"    => $detail_picture,
	"PREVIEW_TEXT_TYPE" => "html", // Тип краткого описания элемента
	"PREVIEW_TEXT" 		=> $preview_text, // Текст краткого описания элемента
	"DETAIL_TEXT_TYPE"  => "html", // Тип детального описания элемента
	"DETAIL_TEXT" 		=> $detail_text, // Текст детального описания элемента
);

$el = new CIBlockElement;
if ($product_id = $el->Add($arLoadProductArray)){
	echo 'Элемент '.$NAME.' успешно добавлен
'; } else { echo 'Ошибка добавления элемента: '.$NAME.'
'; }

Использование сервиса перевода Яндекс.Переводчик для получения символьного кода на латинице из наименования элемента.

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

Функция для использования сервиса:

require_once(__DIR__."/parser.php");

function yandexTranslate($text){
    $key = 'ваш_api_ключ_яндекс_переводчика';
    $params = array( 'key' => $key , 'text' => strtolower($text), 'lang' => 'ru-en',);
    $query = http_build_query($params);
    $response = Parser::getPage([
        "url" => 'https://translate.yandex.net/api/v1.5/tr.json/translate?'.$query,
    ]);
    $data = json_decode($response['data']['content'], true);
    $text = $data;
    return str_replace(' ', '-',$text['text'][0]);
}

В данной функции используется библиотека обёртка для cURL - Parser. По этой ссылке скачайте архив с ней и разархивируйте в папку со скриптом.

Итоговый код с использованием сервиса переводчика:

require_once(__DIR__."/parser.php");
use Bitrix\Main\Loader;
Loader::includeModule('iblock');

function yandexTranslate($text){
    $key = 'ключ_api_яндекс_переводчика';
    $params = array( 'key' => $key , 'text' => strtolower($text), 'lang' => 'ru-en',);
    $query = http_build_query($params);
    $response = Parser::getPage([
        "url" => 'https://translate.yandex.net/api/v1.5/tr.json/translate?'.$query,
    ]);
    $data = json_decode($response['data']['content'], true);
    $text = $data;
    return str_replace(' ', '-',$text['text'][0]);
}

$preview_picture 	= CFile::MakeArray($preview_url); // $preview_url содержит ссылку на изображение, метод CFile::MakeArray подготавливает массив описания изображения для загрузки
$detail_picture 	= CFile::MakeArray($detail_url); // $detail_url содержит ссылку на изображение, метод CFile::MakeArray подготавливает массив описания изображения для загрузки
$NAME 				= 'Элемент 1';
$preview_text 		= 'Текст краткого описания элемента';
$detail_text 		= 'Текст детального описания элемента';

//массив со свойствами элемента
$PROP = array(
	"PRICE"		=> '12799',
	"ARTICLE"	=> '33345821',
	"PRICE"		=> '790',
);

//Получение символьного кода путём перевода наименования элемента с использованием сервиса Яндекс Переводчик
$CODE = yandexTranslate($NAME);

$arLoadProductArray = Array(
	'CODE'				=> $CODE, // Символьный код элемента, будем получать при помощи транслитерации из названия
	"MODIFIED_BY"    	=> 1, // элемент изменен пользователем с ID 1
	"IBLOCK_SECTION_ID" => '', // Если не указан, то элемент будет лежать в корне раздела
	"IBLOCK_SECTION"    => 76, // ID родительского раздела элемента
	"IBLOCK_ID"      	=> 1, // ID инфоблока элемента
	"PROPERTY_VALUES"	=> $PROP, // Массив свойств элемента
	"NAME"           	=> $NAME, // Наименование элемента
	"ACTIVE"         	=> "Y", // Статус активности элемента
	"PREVIEW_PICTURE"   => $preview_picture,
	"DETAIL_PICTURE"    => $detail_picture,
	"PREVIEW_TEXT_TYPE" => "html", // Тип краткого описания элемента
	"PREVIEW_TEXT" 		=> $preview_text, // Текст краткого описания элемента
	"DETAIL_TEXT_TYPE"  => "html", // Тип детального описания элемента
	"DETAIL_TEXT" 		=> $detail_text, // Текст детального описания элемента
);

$el = new CIBlockElement;
if ($product_id = $el->Add($arLoadProductArray)){
	echo 'Элемент '.$NAME.' успешно добавлен
'; } else { echo 'Ошибка добавление элемента: '.$NAME.'
'; }

Статья была полезна? Поблагодарите автора.

Самые читаемые
#1С Битрикс, #Bitrix CMS, #.htaccess, #настройка редиректов
4 Авг 2019
#Хлебные крошки, #1С Битрикс, #Bitrix CMS, #bitrix:breadcrumbs, #component_epilog, #кэширование
1 Окт 2018
#ресайз изображений, #1С Битрикс, #Bitrix CMS
3 Мар 2019
#bitrix, #robots.txt, #sitemap.xml, #поддомены, #мультисайтовость
16 Окт 2018
#bitrix, #bitrix:catalog.section, #скидки, #товары со скидкой, #страница скидок, #страница со скидками
4 Окт 2018
#Bitrix CMS, #breadcrumb, #bitrix:breadcrumbs, #хлебные крошки, #настройка
13 Фев 2019
#bitrix, #пользовательские свойства, #тип свойств, #привязка к элементам
27 Ноя 2019
#bitrix, #свойства элементов, #обработчик событий, #OnBeforeIBlockElementUpdate, #OnIBlockElementSetPropertyValues
21 Июл 2020
#bitrix:news, #сортировка, #фильтрация, #bitrix:catalog, #catalog.section, #news.list
16 Дек 2020