Форматирования BB кода в 1С-Битрикс | Для разработчиков | Сайты для бизнеса

Форматирования BB кода в 1С-Битрикс


Часто возникает ситуация, когда надо отформатировать текст, вывести его без лишних тегов или преобразовать BB код в теги, в этом нам помогут функция и метод convert. В документации Битрикс этот метод используется в разных классах textParser, forumTextParser, CSocNetTextParser и в других, но трудно понять какой метод или функцию использовать, к тому же в документации нет хороших примеров и код там не совсем рабочий.
Например этот код у меня не сработал:
  1. //$parser = new textParser();
  2. //$detailText = $parser->convert($_POST['DETAIL_TEXT']);

а этот работает:
  1. $parser = new CTextParser;
  2. $detailText = $parser->convertText($_POST['DETAIL_TEXT']);

Как видим, здесь используется класс CTextParser. Также можно использовать следующий код:
  1. $parser = new forumTextParser();

Здесь используется уже forumTextParser.
Иногда может понадобиться подключить модуль форума, что бы сработали нужные нам функции и мы не получили ошибку.
CModule::IncludeModule("forum");
Во всех перечисленных классах существует метод convert, который и делает то, что нам нужно, а именно заменяет BBCode.
Также в этот метод, мы можем передать вторым параметром массив параметров для форматирования сообщения, со значениями Y или N:
  1. //$Forum = new CForumNew();
  2. //$arAllow = $Forum->ALLOW;
  3. $arAllow["SMILES"] = "Y";
  4. $arAllow["CODE"] = "Y";
  5. $arAllow["HTML"] = "Y";
  6. $arAllow["NL2BR"] = "Y";
  7. $arAllow["QUOTE"] = "Y";
  8. $detailText = $parser->convert($_POST['DETAIL_TEXT'], $arAllow);
  9. //$detailText = $_POST['DETAIL_TEXT'];

Проверка на BB код IMG
  1. $pattern = '/\[IMG ID=(\d*)]/';
  2. preg_match_all($pattern, $detailText, $matches);
  3.  
  4. if (count($matches) >= 2){
  5. foreach($matches[1] as $k=>$match){
  6. $photoPath = CFile::GetPath($match);
  7.  
  8. $detailText = str_replace($matches[0][$k], "<img src='".$photoPath."' alt='' />", $detailText);
  9. }
  10. }

После форматирования, можно занести текст в инфоблок, следующим образом
  1. $el = new CIBlockElement;
  2.  
  3. $PROP = array();
  4. $PROP["SOURCE"] = htmlspecialchars($_POST['SOURCE']);
  5. $PROP["SITE"] = htmlspecialchars($_POST['SITE']);
  6. $PROP["IS_ANONYMOUS"] = isset($_POST['anonymous']) ? 1 : 0;
  7.  
  8. $photos = array();
  9. foreach($_POST['FILES'] as $fileId){
  10. $url = CFile::GetPath($fileId);
  11. $photos[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$url);
  12. }
  13.  
  14. if (count($photos) > 0){
  15. $PROP["ADDITIONAL_PHOTO"] = $photos;
  16. }
  17.  
  18. $arLoadProductArray = Array(
  19. "MODIFIED_BY" => $USER->GetID(),
  20. "IBLOCK_SECTION_ID" => $_POST['SECTION'],
  21. "IBLOCK_ID" => $arParams["IBLOCK_ID"],
  22. "DATE_ACTIVE_FROM" => date("d.m.Y H:i:s"),
  23. "PROPERTY_VALUES"=> $PROP,
  24. "NAME" => $_POST['NAME'],
  25. "ACTIVE" => "N",
  26. "DETAIL_TEXT" => $detailText,
  27. "DETAIL_TEXT_TYPE" => "html"
  28. );
  29.  
  30. $newsId = $el->Add($arLoadProductArray)

Что бы указывать BB код картинок и текста нам понадобятся компоненты, которые выводят форму с нужными нам кнопками для форматирования 1. Компонент main.post.form
  1. <?$APPLICATION->IncludeComponent(
  2. "bitrix:main.post.form",
  3. "",
  4. ($formParams = Array(
  5. "FORM_ID" => "news_form",
  6. "SHOW_MORE" => "Y",
  7. "PARSER" => Array("Bold", "Italic", "Underline", "Strike", "ForeColor",
  8. "FontList", "FontSizeList", "RemoveFormat", "Quote", "Code", "InsertCut",
  9. "CreateLink",
  10. "Image",
  11. "Table",
  12. "Justify",
  13. "InsertOrderedList",
  14. "InsertUnorderedList",
  15. "SmileList",
  16. "Source",
  17. "UploadImage",
  18. "InputVideo",
  19. "MentionUser",
  20. ),
  21. "BUTTONS" => Array(
  22. "UploadImage",
  23. "UploadFile",
  24. "CreateLink",
  25. "InputVideo",
  26. "Quote",
  27. ),
  28. "UPLOAD_FILE" => array(
  29. "INPUT_NAME" => 'FILES',
  30. "INPUT_VALUE" => (!empty($arResult["MESSAGE"]["FILES"]) ? array_keys($arResult["MESSAGE"]["FILES"]) : false),
  31. "MAX_FILE_SIZE" => "10000000",
  32. "MULTIPLE" => "Y",
  33. "MODULE_ID" => "iblock",
  34. "ALLOW_UPLOAD" => ($arParams["FORUM"]["ALLOW_UPLOAD"] == "N" ? false :
  35. ($arResult["FORUM"]["ALLOW_UPLOAD"] == "Y" ? "I" : $arResult["FORUM"]["ALLOW_UPLOAD"])),
  36. "ALLOW_UPLOAD_EXT" => $arResult["FORUM"]["ALLOW_UPLOAD_EXT"]
  37. ),
  38. "UPLOAD_FILE_PARAMS" => array("width" =>1024, "height" => 1024),
  39.  
  40. "TEXT" => Array(
  41. "NAME" => "DETAIL_TEXT",
  42. "VALUE" => htmlspecialcharsBack($_POST["DETAIL_TEXT"]),
  43. "HEIGHT" => "120px",
  44. "WIDTH" => "100%"),
  45.  
  46.  
  47.  
  48. )),
  49. false,
  50. Array("HIDE_ICONS" => "Y")
  51. );?>
  52.  

2. Компонент fileman.light_editor
  1. <?$APPLICATION->IncludeComponent(
  2. "bitrix:fileman.light_editor",
  3. "",
  4. Array(
  5. "CONTENT" => $_POST['DETAIL_TEXT'],
  6. "INPUT_NAME" => "DETAIL_TEXT",
  7. "INPUT_ID" => "detail_text",
  8. "WIDTH" => "100%",
  9. "HEIGHT" => "224px",
  10. "RESIZABLE" => "Y",
  11. "VIDEO_ALLOW_VIDEO" => "N",
  12. "USE_FILE_DIALOGS" => "N",
  13. "FLOATING_TOOLBAR" => "Y",
  14. "ARISING_TOOLBAR" => "N",
  15. "ID" => "detail_editor_id",
  16. "JS_OBJ_NAME" => "detail_editor_js_obj_name",
  17. "INIT_BY_JS" => false
  18. ),
  19. false
  20. );?>

Вместо компонентов, также конечно можно использовать и обычное текстовое поле input или textarea, но лучше использовать готовые компоненты на своих страницах с нужными кнопками и затем форматировать их на сервере, как указанно выше.
Загрузка

5940 просмотров
22.05.2018
Теги: 1с-битрикс



комментариев:
Оставить комментарий
0
Guest
спасибо помогли разобраться  
Имя Цитировать 0
 
Текст сообщения*
Защита от автоматических сообщений
 


Сервисы




Последние публикации

24.окт.2021 Битрикс Работа с сокетами Ошибка! Не работает
В проверке сайте можно наблюдать такую ошибку
Работа ...

17.июл.2021 Как передать Roistat в заказ 1С-Битрикс
Передать ID Roistat можно в сам заказ в Битриксе после его о...

21.июн.2021 Сбой на файле, ошибка распаковки пакета
При очередном обновлении 1С-Битрикс выскочила ошибка [UUGZA0...

03.июн.2020 Не выводиться заглушка в композитном кеше
Столкнулся с тем, что при указании заглушки в динамической о...

01.апр.2020 Установка SSL сертификата LetsEncrypt на BitrixVM
Установка SSL сертификата LetsEncrypt на виртуальную машину ...

07.мар.2020 Битрикс настройка SSL, ошибка работы с сокетами
Заходим в меню битрикса выбираем 8. Manage pool web servers ...

14.ноя.2019 Не выгружаются заказы в 1С
Не выгружаться заказы в 1С из сайта на битрисе могут по разн...

07.ноя.2019 Видео youtube на фон сайта
Как-то на сайт мне нужно было вывести видео на весь экран, к...

05.ноя.2019 Свойство с большим списком (датой)
Если в инфоблоке необходимо использовать свойство типа списо...

05.ноя.2019 Основные настройки BitrixVM
Приведу основные пути и файлы конфигурации в виртуальной маш...