1С-Битрикс: Управление сайтомНа главную страницу
Клиентам
Маркетплейс
Партнерам
Разработчикам
Интеграция с 1С
Идея?


Личный кабинет
Авторизоваться
Регистрация
(войти) Корзина
Логин:

Пароль:



Забыли свой пароль?
Регистрация
Войти как пользователь:
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
ВКонтакте
Мой Мир
Twitter
Facebook
Google
Livejournal
Яндекс
Rambler
Mail.Ru
Liveinternet
Blogger
OpenID
Используйте вашу учетную запись VKontakte.ru для входа на сайт.
Используйте вашу учетную запись Мой Мир@Mail.ru для входа на сайт.
Используйте вашу учетную запись на Twitter.com для входа на сайт.
Используйте вашу учетную запись на Facebook.com для входа на сайт.
Используйте вашу учетную запись Google для входа на сайт.
.livejournal.com
@yandex.ru
@rambler.ru
@mail.ru
http://www.liveinternet.ru/users/ /
.blogspot.com
OpenID:
  • Документация
    • Управление сайтом
    • Корпоративный портал
    • .NET Forge CMS
    • Отраслевые решения
    • Marketplace
    • Аренда приложений (SaaS)
  • Обучение и сертификация
    • Онлайн-курсы и сертификация
    • Учебные центры
    • Мое обучение
    • Учебные видеоролики
  • Центр поддержки
    • Поддержка
    • FAQ
    • Мои обращения
  • Сообщество
    • Блоги Битрикс
    • Блоги веб-разработчиков
    • Общие форумы
    • Веб-разработчики
      • Моя страница
      • Мои сообщения
      • Группы
      • Найти коллег
  • Cтатьи
    • Архив
Главная / Общение / Сообщество разработчиков / Рябков Александр / Злой блог
Федеральный семинар «1С-Битрикс»: Веб для бизнеса

CODE для элементов и разделов

Профиль
Друзья
Группы
Злой блог
Микроблог

Рябков Александр

Дата последнего входа: 27.04.2012 04:19:53
Город: Новосибирск

CODE для элементов и разделов

0
zloj
12.11.200821:2512.11.2008 21:25:07
В бета версии инфоблоков наконец то реализована поддержа указывать вместо ID символьный код элементов и разделов (наконец то), собственно сделал для себя автоматический транслит названия элемента и раздела добавлющий символьный код, на универсальность не претендую но думаю такое решение устроит большинство:

Код
AddEventHandler("iblock", "OnBeforeIBlockElementAdd",      array("MyEventHandlerClass", "IBlockElementAddCodeFromName"));
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate",   array("MyEventHandlerClass", "IBlockElementAddCodeFromName"));
AddEventHandler("iblock", "OnBeforeIBlockSectionAdd",      array("MyEventHandlerClass", "IBlockSectionAddCodeFromName"));
AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate",   array("MyEventHandlerClass", "IBlockSectionAddCodeFromName"));

class MyEventHandlerClass
{
    function IBlockElementAddCodeFromName(&$arFields)
    {
       static $NEWS_IBLOCK_ID;
       if(empty($NEWS_IBLOCK_ID))
       {
          $NEWS_IBLOCK_ID = array(0);
         $resIBlock = CIBlock::GetList(array(), array('TYPE' => 'news'), false);
         while($arIBlock = $resIBlock->Fetch())
         {
            $NEWS_IBLOCK_ID[] = $arIBlock["ID"];
         }
       }
       $arFields["CODE"] = Translit::UrlTranslit($arFields["NAME"]);
       $arFields["CODE"] .= ".".$arFields["ID"];
       if(in_array($arFields["IBLOCK_ID"], $NEWS_IBLOCK_ID) and $arFields["ACTIVE_FROM"])
       {
          if($stmp = MakeTimeStamp($arFields["ACTIVE_FROM"]))
          {
             $arFields["CODE"] = date("d-m-Y", $stmp).".".$arFields["CODE"];
          }
       }
    }
    function IBlockSectionAddCodeFromName(&$arFields)
    {
       $arFields["CODE"] = Translit::UrlTranslit($arFields["NAME"]);
//       $arFields["CODE"] .= "_".$arFields["ID"];
    }
}

class Translit
{
    function Transliterate($string)
    {
      $cyr=array(
         "Щ",  "Ш", "Ч", "Ц","Ю", "Я", "Ж", "А","Б","В","Г","Д","Е","Ё","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ь","Ы","Ъ","Э","Є","Ї",
         "щ",  "ш", "ч", "ц","ю", "я", "ж", "а","б","в","г","д","е","ё","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х", "ь","ы","ъ","э","є","ї"
      );
      $lat=array(
         "Shh","Sh","Ch","C","Ju","Ja","Zh","A","B","V","G","D","Je","Jo","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","Kh","'","Y","`","E","Je","Ji",
         "shh","sh","ch","c","ju","ja","zh","a","b","v","g","d","je","jo","z","i","j","k","l","m","n","o","p","r","s","t","u","f","kh","'","y","`","e","je","ji"
      );
      for($i=0; $i<count($cyr); $i++)
      {
         $c_cyr = $cyr[$i];
         $c_lat = $lat[$i];
         $string = str_replace($c_cyr, $c_lat, $string);
      }
      $string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $string);
      $string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}'", $string);
      $string = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $string);
      $string = preg_replace("/^kh/", "h", $string);
      $string = preg_replace("/^Kh/", "H", $string);
      return $string;
   }

   function UrlTranslit($string)
   {
      $string = preg_replace("/[_\s\.,?!\[\](){}]+/", "_", $string);
      $string = preg_replace("/-{2,}/", "--", $string);
      $string = preg_replace("/_-+_/", "--", $string);
      $string = preg_replace("/[_\-]+$/", "", $string);
      $string = Translit::Transliterate($string);
      $string = ToLower($string);
      $string = preg_replace("/j{2,}/", "j", $string);
      $string = preg_replace("/[^0-9a-z_\-]+/", "", $string);
      return $string;
   }
}


Данный код разместить в init.php
zloj
12.11.200821:2512.11.2008 21:25:07
Просмотров:1478 Комментариев:5 0
Теги: CODE, транслит, ЧПУ
*
 
Незарегистрированным пользователям запрещена вставка ссылок. Зарегистрируйтесь или авторизуйтесь.
*
Добавить комментарий
0
Сергей Рыжиков
13.11.2008 00:29:27
Любопытно, спасибо.
Ответить Ссылка 0
0
zloj
13.11.2008 21:50:45
Многое здесь не продумано, не тавте на работающий проект.
Уже всё переделал, как окончательно пртестирую - выложу.
Ответить Ссылка 0
0
zloj
17.03.2009 20:54:39
Собственно давно уже сделал, да позабыл совсем что выложить обещал ...

Кому интересно - Организация ЧПУ на Битрикс
Ответить Родитель Ссылка 0
0
Хайризаманов Салават
01.10.2010 09:50:46
Последняя ссылка не работает. Выложите пожалуйста еще раз. Как раз то, что нужно.
Функция транслитерации работает не корректно
Ответить Родитель Ссылка 0
0
Кирилл Попов
13.10.2010 23:42:52
>>Последняя ссылка не работает.
Лень прогулятся по форуму?
Ответить Ссылка 0

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

Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».
 
Технологии Эрмитаж
BitrixMobile
Автокеширование
SiteUpdate
Производительность Виртуальная машина
Веб-окружение
Результаты тестов
Выбрать хостинг
Веб-кластер
Безопасность Проактивная защита
Веб-антивирус
Аутентификация

Контакты Поиск Карта сайта
Телефон: +7 (495) 229-14-41
Оставайтесь с нами: Facebook Twitter Habrahabr VKontakte Developers Google 1+
Как распознать QR код?Контакты QR


© 2001-2012 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом.
Английская версия Немецкая версия