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

  • 2020-07-27
  • Дмитрий М.
  • 339

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

<p> Допустим мы добавляем товар при помощи метода <b>CIBlockElement::Add</b>, товар добавляем в инфоблок с <b>ID = 1</b>, так же товар имеет набор свойств, к примеру: <b>PRICE</b>,<b> ARTICLE</b>,<b> SALE</b>. </p> <p> <b>PRICE</b> - содержит цену на элемент.<br> <b>ARTICLE</b> - содержит артикул элемента<br> <b>SALE</b> - записан размер скидки на элемент при её наличии. </p> <p> Помимо свойств элементу добавляем превью и детальное изображение, превью описание и детальное описание. </p> <p> Код добавления такого элемента будет выглядеть следующим образом: </p> <pre class="line-numbers"><code class="language-php">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" =&gt; '12799', "ARTICLE" =&gt; '33345821', "PRICE" =&gt; '790', ); //Получение символьного кода путём транслитерации наименования элемента $arTranslitParams = array("replace_space"=&gt;"-","replace_other"=&gt;"-"); // Указываем на какой символ заменять пробел, на какой символ заменять все остальные символы отличные от букв и цифр. $CODE = Cutil::translit(strtolower($NAME),"ru",$arTranslitParams); // функцией strtolower - преобразуем все Заглавные буквы в Названии элемента в строчные буквы. Cutil::translit - транслитерирует русское наименование элемента. $arLoadProductArray = Array( 'CODE' =&gt; $CODE, // Символьный код элемента, будем получать при помощи транслитерации из названия "MODIFIED_BY" =&gt; 1, // элемент изменен пользователем с ID 1 "IBLOCK_SECTION_ID" =&gt; '', // Если не указан, то элемент будет лежать в корне раздела "IBLOCK_SECTION" =&gt; 76, // ID родительского раздела элемента "IBLOCK_ID" =&gt; 1, // ID инфоблока элемента "PROPERTY_VALUES" =&gt; $PROP, // Массив свойств элемента "NAME" =&gt; $NAME, // Наименование элемента "ACTIVE" =&gt; "Y", // Статус активности элемента "PREVIEW_PICTURE" =&gt; $preview_picture, "DETAIL_PICTURE" =&gt; $detail_picture, "PREVIEW_TEXT_TYPE" =&gt; "html", // Тип краткого описания элемента "PREVIEW_TEXT" =&gt; $preview_text, // Текст краткого описания элемента "DETAIL_TEXT_TYPE" =&gt; "html", // Тип детального описания элемента "DETAIL_TEXT" =&gt; $detail_text, // Текст детального описания элемента ); $el = new CIBlockElement; if ($product_id = $el-&gt;Add($arLoadProductArray)){ echo '<span style="color:green;">Элемент '.$NAME.' успешно добавлен</span><br>'; } else { echo '<span style="color:red;font-weight:600">Ошибка добавления элемента: '.$NAME.'</span><br>'; }</code> </pre><br> <h2>Использование сервиса перевода Яндекс.Переводчик для получения символьного кода на латинице из наименования элемента.</h2> <p> Если же Вы хотите чтобы символьный код элемента являлся переводом на английский наименования элемента, тогда следует воспользоваться внешним сервисом переводом, например Яндекс.Переводчик. Для начала следует получить API ключ сервиса Яндекс.Переводчик, сделать это можно на <noindex><a href="https://yandex.ru/dev/translate/" rel="nofollow">этой странице</a></noindex>. </p> <p> Функция для использования сервиса: </p> <pre class="line-numbers"><code class="language-php">require_once(__DIR__."/parser.php"); function yandexTranslate($text){ $key = 'ваш_api_ключ_яндекс_переводчика'; $params = array( 'key' =&gt; $key , 'text' =&gt; strtolower($text), 'lang' =&gt; 'ru-en',); $query = http_build_query($params); $response = Parser::getPage([ "url" =&gt; '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]); }</code> </pre> <p> В данной функции используется библиотека обёртка для cURL - Parser. По <a href="/upload/parser.zip">этой ссылке</a> скачайте архив с ней и разархивируйте в папку со скриптом. </p> <p> Итоговый код с использованием сервиса переводчика: </p> <pre class="line-numbers"><code class="language-php">require_once(__DIR__."/parser.php"); use Bitrix\Main\Loader; Loader::includeModule('iblock'); function yandexTranslate($text){ $key = 'ключ_api_яндекс_переводчика'; $params = array( 'key' =&gt; $key , 'text' =&gt; strtolower($text), 'lang' =&gt; 'ru-en',); $query = http_build_query($params); $response = Parser::getPage([ "url" =&gt; '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" =&gt; '12799', "ARTICLE" =&gt; '33345821', "PRICE" =&gt; '790', ); //Получение символьного кода путём перевода наименования элемента с использованием сервиса Яндекс Переводчик $CODE = yandexTranslate($NAME); $arLoadProductArray = Array( 'CODE' =&gt; $CODE, // Символьный код элемента, будем получать при помощи транслитерации из названия "MODIFIED_BY" =&gt; 1, // элемент изменен пользователем с ID 1 "IBLOCK_SECTION_ID" =&gt; '', // Если не указан, то элемент будет лежать в корне раздела "IBLOCK_SECTION" =&gt; 76, // ID родительского раздела элемента "IBLOCK_ID" =&gt; 1, // ID инфоблока элемента "PROPERTY_VALUES" =&gt; $PROP, // Массив свойств элемента "NAME" =&gt; $NAME, // Наименование элемента "ACTIVE" =&gt; "Y", // Статус активности элемента "PREVIEW_PICTURE" =&gt; $preview_picture, "DETAIL_PICTURE" =&gt; $detail_picture, "PREVIEW_TEXT_TYPE" =&gt; "html", // Тип краткого описания элемента "PREVIEW_TEXT" =&gt; $preview_text, // Текст краткого описания элемента "DETAIL_TEXT_TYPE" =&gt; "html", // Тип детального описания элемента "DETAIL_TEXT" =&gt; $detail_text, // Текст детального описания элемента ); $el = new CIBlockElement; if ($product_id = $el-&gt;Add($arLoadProductArray)){ echo '<span style="color:green;">Элемент '.$NAME.' успешно добавлен</span><br>'; } else { echo '<span style="color:red;font-weight:600">Ошибка добавление элемента: '.$NAME.'</span><br>'; }</code> </pre><br> <p> </p>

29.07.2020 01:52:18

Как правило в качестве URL элемента или раздела используется символьный код.

Если добавлять элементы или разделы инфоблока при помощи API функций CIBlockElement::Add или CIBlockSection::Add нужно автоматически генерировать для них соответствующие символьные коды.

Обычно символьный код получают транслитерацией названия элемента или раздела. Как это сделать читайте ниже.

Допустим мы добавляем товар при помощи метода 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.'
'; }



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

Возврат к списку

Другие статьи