Залил я в инфоблок 4 тыс элементов и захотелось мне сделать красивые урли для них. До этого были небольшие списки до 100 элементов (было проще заполнить руками). А тут вот захотелось процесс автоматизировать.
Битриксовый механизм генерирует (транслитерирует/переводит) код из наименования только в режиме AJAX (а жаль).
Подсмотрел немного аяксовый механизм и сделал тоже самое на PHP.
Примерчик сыроват, но для решение моей задачи хватило.
Может кому будет полезно, а может кто и доработает.
Битриксовый механизм генерирует (транслитерирует/переводит) код из наименования только в режиме AJAX (а жаль).
Подсмотрел немного аяксовый механизм и сделал тоже самое на PHP.
<?php
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
set_time_limit(0);
if (!CModule::IncludeModule('iblock'))
return;
$el = new CIBlockElement;
$db = CIBlockElement::GetList(
array(),
array('IBLOCK_ID' => 5, 'CODE' => false),
false,
array('nTopCount' => 100),
array('ID', 'CODE', 'NAME')
);
$n = 1;
while ($i = $db->GetNext(true, false))
{
$word = iconv(SITE_CHARSET, 'UTF-8', $i['NAME']);
$rWord = rawurlencode($word);
$answer = file_get_contents("http://www.google.com/uds/Gtranslate?q=".$rWord."&langpair=ru%7Cen&key=notsupplied&v=1.0");
$answ = json_decode($answer);
printf("%4d", $n);
if ($answ->responseStatus == '200')
{
$code = iconv('UTF-8', SITE_CHARSET, $answ->responseData->translatedText);
$code = strtolower($code);
$code = str_replace(' ', '-', $code);
$code = preg_replace('/[^-a-z0-9]/', '', $code, -1, $count);
$res = $el->Update($i['ID'], array('CODE' => $code), false,false,false);
if (!$res)
$msg = $el->LAST_ERROR;
else
$msg = 'OK';
print '. ['.$i['ID'].'] ' . $i['NAME'] . ' = ' . $code . ' - ' . $msg . "<br>\r\n";
}
else
{
print '. ' . $answ->responseStatus . "<br />\r\n";
}
$n++;
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?> |
Примерчик сыроват, но для решение моей задачи хватило.
Может кому будет полезно, а может кто и доработает.