Перенос контента в инфоблоки Битрикс
Периодически наша студия сталкивается с необходимостью переноса контента с одной платформы на другую. Говоря о переносе контента, мы имеем в виду массовый перенос, т. е. когда на новом сайте требуется разместить значительное количество информации со старого сайта – сотни, тысячи новостей, публикаций, статей, фотографий, видеоматериалов и т.п.
Что такое "управление контентом"? Это когда оператор в админке видит ровно те элементы управления, которые предполагаются для того или иного вида информации, при этом оператор совершает минимальный набор действий для достижения какой-то цели.
Например, существуют крупные учреждения, обладающие обширной территориальной сетью, которые регулярно публикуют новости. Вот при создании или редактировании такой новости у оператора должна быть возможность выбрать подобную привязку к территориальному отделению из некоего выпадающего списка, который не только содержит список таких отделений, но и сам обновляется, если появляются новые отделения.
Битрикс, заслуженно получая регулярные негативные отзывы, как о платформе для разработки, тем не менее вполне пригоден для создания информационных порталов. Админка Битрикса далеко не безгранична по своим возможностям, и не всегда совершенна по имеющемуся функционалу, но большинство требуемых функций там может быть реализовано с той или иной степенью приемлемости.
И если с возможностями организации информации в экосистеме Битрикса и возможностями управления этой информацией всё более или менее понятно, то процесс переноса всегда представляет собой определённые трудности. На самом деле это всегда индивидуальная задача, т.е. перенос контента проекта "А" на Битрикс и перенос контента проекта "Б" на Битрикс – это обычно две самостоятельные задачи.
Как же получается, что такая, казалось бы, типовая и повторяемая задача становится очень индивидуальной? Дело всегда в разнице исходных и требуемых форматов (в широком смысле слова). Палитра технических возможностей различных CMS по хранению и представлению идентичного контента слишком велика, чтобы это можно было решить единожды и навсегда. Ниже постараемся вкратце раскрыть ряд вопросов, с которыми неизбежно приходится сталкиваться при переносе контента с одной CMS на другую.
Текст
Текст – это не просто текст. Это, как правило, HTML разметка, причём часто еще и инлайн-стилизованная. Разные CMS используют разные текстовые редакторы, поэтому разметка в дополнение к главной своей части может содержать служебные данные в html-комментариях. Существенно ли это? Говоря о комментариях – они могут иметь несколько сотен строк и в несколько раз превышать объём самого текста. Соответственно, всю эту красота вы будете наблюдать в визуальном редакторе Битрикса. Если говорить уже о самом тексте и его стилизации – некоторая стилизация может быть признана полезной, а некоторая – неприемлемой относительно общего подхода, используемого на новом сайте. Поэтому, к сожалению, нельзя просто бездумно пройтись регуляркой и всё срезать, надо подходить выборочно.
Плагины
Типична ситуация, когда часть контента управляется с помощью некоторых плагинов к CMS. Текст может содержать в себе некоторые, скажем так, управляющие выражения, которые используются для вывода в этом месте другого контента. Код CMS при выводе контента сначала проверяет его на наличие таких выражений, и, если нужно, запускает сторонние механизмы, которые уже заменяют эти выражения новым контентом. Что это означает с точки зрения переноса данных? Что вы больше не можете просто взять и скопировать текст, т.к. Битрикс ничего не знает о том, что делать с такими управляющими выражениями. Вместо этого можно либо просто избавиться от них, естественно, утеряв соответствующую часть контента, либо подготовить эту часть контента таким образом, чтобы она не только технически могла быть импортирована в Битрикс, но и точно соответствовала структуре этого вида данных. Один из самых ярких примеров такой ситуации – фотогалереи внутри статей.
Картинки
Изображения с точки зрения управления контентом, могут быть разделены на 2 большие категории – те, которые являются частью текста и выводятся в потоке текста как его часть, и изображения, которые определены отдельно от текста и вывод которых задаётся вспомогательными механизмами. Эти категории требуют разных способом обработки и разных подходов в процессе подготовки импорта данных в Битрикс.
Например, одна из типичных ситуаций – имеем просто текст статьи в виде html разметки с инлайн-картинками. Необходимо сформировать данные для элемента инфоблока таким образом, чтобы подробной картинкой стало первое изображение, а остальные остались в потоке текста. Задачи, которые при этом возникают: необходимо вырезать разметку первой картинки, сформировать путь, пригодный для получения картинки (http-uri или путь в файловой системе), сформировать корректный путь к картинке для файла импорта, поместить картинку по этому пути; для инлайн-картинок нужно сформировать линки для получения картинок, разместить картинки там, где мы предполагаем их постоянное хранение, в тексте заменить исходные пути на новые.
Семантические URL
Использование ЧПУ URL для адресации – уже давно скорее общее правило, чем некий особый функционал для сайта. К сожалению, в настоящий момент Битрикс не поддерживает создания таких кодов во время импорта автоматически (по-крайней мере, нам этого не так и не удалось добиться), но это можно обойти использованием сторонних модулей для их генерирования уже после импорта данных. Однако, это не очень удобно с точки зрения организации процесса при массовом импорте, и, кроме того, вполне возможна ситуация, когда генерирование должно быть произведено с "тонкими настройками", на которые эти сторонние модули, разумеется, не рассчитаны (это может быть и генерирование исходя из конкретной части контента, и особый порядок учёта дубликатов). Поэтому выгоднее это делать на этапе подготовки данных.
Специализированные свойства инфоблоков
Админка Битрикса поддерживает создание дополнительных и пользовательских свойств инфоблоков, которые помогают наиболее подходящим способом управлять данными, этим можно и нужно активно пользоваться. То есть, если для публикации предусмотрена фотогалерея, как один из элементов этой публикации, разумно создавать отдельное множественное свойство, и в него импортировать необходимые картинки. Либо же создавать отдельный "галерейный" инфоблок и в статье ссылаться не него (точнее – на нужный элемент). Однако, с технической точки зрения, формирование правильной структуры в файле импорта для таких свойств – процедура не всегда "интуитивно" понятная и developer-friendly.
Как импортировать?
Битрикс поддерживает несколько способов импорта данных. Через программный API и через 2 вида формата файлов – csv или xml. Все эти способы имеют свои преимущества и недостатки. Так, с одной стороны, импорт через API кажется наиболее естественным решением – т. е. записываем напрямую и всё. Однако, де-факто это не самое лучшее решение с разных точек зрения. Во-первых, при большом объеме данных попыток импорта наверняка будет больше одной, т. к. будут обнаруживаться новые и новые кейсы, которые не были видны на первый взгляд. Каждая такая попытка импорта будет занимать существенное количество времени (пробовали импортировать большой xml на несколько тысяч элементов?). Для проверки результатов импорта необходимо каждый раз будет в админке путешествовать по разным элементам и исследовать значения их разных свойств и полей. В деле проверок GUI всегда больше мешает, чем помогает.
Для массового импорта более подходящим является формирование результатов в виде готового файла (при этом xml предпочтительнее, т.к. csv импорт крайне ограничен в возможностях). Во-первый, такой результат можно получать на любой машине локально, не на сервере, где развернут сайт. Во-вторых, результат преобразования данных (коим является сформированный файл импорта) может быть подвергнут анализу на пригодность любыми подходящими способами – начиная от банальных проверок регулярками и заканчивая валидацией по xsd схеме. Кроме того, такой способ позволяет полностью подготовить полностью готовый к импорту пакет (т.е. не только собственно файл импорта, но и все остальные сопутствующие файлы), но делать это поэтапно, по мере решения изначальных и возникающих в процессе задач.
Что делать?
Для решения описанных в этой статье задач в студии создан внутренний инструментарий, который позволяет достаточно оперативно и бережно перенести данные со старого сайта на новый, избежав при этом потерь информации, времени, денег и нервных клеток. При этом весь исторический контент будет управляться точно так же, как задумано на новом сайте.
В следующей статье мы расскажем о технических подробностях...
Бывший работник
Статья ни о чем. Одна вода, складывается ощущение, что тупо начался пиар битрикса, при чем второй статьей подряд! Давайте уже что-нибудь интересное запостите, например, практика хранения данных в redis или банально как организовать структуру NestedSets или же интересно послушать как решаете проблему обслуживания огромных данных - десятки и сотни миллионов записей в БД, их кеширование и управление. А то со своим недо битриксом, неинтересно же, пусть другие фирмы его продают, вы же профи топ 1 у нас, это я говорю! =)
Blax
Привет, о, незнакомец! )Если отбросить троллинг (хотя, конечно приятно, что мы самые-самые в вашем сердце), то до redis'a мы не дошли, обходимся memcaсhed и если потребуется, то будем смотреть на Тарантул, он привлекательнее кажется. У нас есть интересный проект под реально хорошей нагрузкой (до 4 млн запросов в день), но пока справляемся вашими молитвами )) И да, конечно он на ClickON/CMS ))
По поводу Битрикса - есть большой запрос на него и обходить такой рынок не разумно. Тем более, что он подогревается потоком "спасите, что нам делать", который формируется после "там всё просто в один клик, только купите коробку и шаблон". Государство тоже однозначно указывает в сторону 1С.
На нём можно работать и есть достоинства относительно многих CMS, включая нашу разработку.
Есть и проблемы (у кого их нет )), о которых потребитель узнаёт после конфетно-букетного периода.
По статье - проблема реально существует, и порой догоняет клиента как раз, когда он уже думал, что всё готово. Кто не сталкивался, не понимает, в какое веселье может превратиться перенос большого объёма из-под Joomla, скажем.
Хороших решений мы не нашли и разработали инструментарий для разработчика, который экономит при "переезде" на Битрикс с ЛЮБОЙ другой платформы.
Сперва была мысль построить интерфейс и предложить решение в маркетплейс битрикса, но интерфейс к такому комбайну будет слишком сложным, просто нет смысла инвестироваться в такую работу.
Вторая ветка событий - github, может быть откроем проект позже, но пока в планах оформить перенос контента как дополнительную не дорогую услугу и помочь людям мигрировать на Битрикс.
p. s. если не шутка, про "бывшего сотрудника" - кофе в машине не перевёлся, печеньки на столе... заходи, если что, будем рады )
Да, готовится ещё одна статья с "техническими деталями". Заходите чаще ))))
Бывший работник
Босс, привет)) Конечно, нужно быть недостаточно умным чтобы не брать себе часть этого рынка, поэтому вы все правильно делаете. На счёт кофе - обещать не буду, но если появится возможность, то обязательно забегу.Зы: страшно не хватает инпута с бАттоном - подписаться на новые статьи. Может быть через годик сделаете, если у стура будет на это время )) Удачи в бизнесе 😎
Blax
А бАтон зачем, есть же PUSH! Мы анонсируем через него.И почту не надо указывать - можно оставаться инкогнито и отключить в любой момент без последствий )
Бывший работник
Push это хорошо, но я как дилетант и "неопытный" юзер, не знаю как вызвать окошко для того что бы подписаться на пуш) Возможно я когда-то нажал НЕТ, а возможно и не нажимал вовсе ничего, но даже если попробовать с 5 имеющихся у меня браузеров открыть данную статью, то никакие диалоговые окна не появляются(( Может имеет смысл создать кнопку, при клике на которую запускать принудительно диалоговое окно о подписке? Кнопку можно и не отображать, если человек уже подписан. Я такую фишку мутил когда-то. Ведь процентов 80 и не знают вообще что такое PUSH, к тому же из них - половина ваших клиентов))
Blax
А ведь правда! Спасибо )