Представьте себе две колонии боббеков. Обычно это миролюбивые животные, которые живут дружными семьями, но не в ситуациях, когда возникает вопрос о занимаемой ими территории. Это может произойти между редакторами контента и техническими специалистами. Чтобы статья появилась на веб-сайте, вам необходим упрощенный процесс публикации. Редакторы не должны трогать код приложения, а разработчики должны предоставить удобный функционал для публикаций.

Статья предназначена для разработчиков внешних корпоративных веб-сайтов, владельцев сайтов или бизнеса, а также сотрудников, занимающихся внешними коммуникациями. Материал поможет авторам и разработчикам «найти баланс» и обойти неудобные технические проблемы управления контентом на 1С-Битрикс.

Меня зовут Сергей Осокин, я работаю в НЛМК-ИТ и являюсь ведущим внешним разработчиком сайтов группы компаний НЛМК, в которую входят такие сайты, как nlmk.com, Lipetsk.nlmk.com, india.nlmk.com и sgok. nlmk.com и т. д.

При использовании АСУ 1С-Битрикс управление контентом может быть как простой задачей для одного пользователя, так и сложной задачей для десятков контент-менеджеров. В небольших проектах, где пользователь является единственным владельцем веб-сайта, он может легко управлять всем содержимым, заполнять сообщения и редактировать текст из областей включения без Git. В таких случаях все проходит быстро и все участники проекта остаются довольны результатами своей работы.

Однако для крупных проектов, где контентом управляют десятки контент-менеджеров, ситуация может быть более сложной. Здесь весь код хранится в Git, настраиваются процессы разработки и решающее значение имеют запросы на своевременное изменение информации на сайте.

Когда дело доходит до изменения информации в футере или области включения, повторяющейся в разных разделах сайта и хранящейся в репозитории, возникает проблема. Если вы быстро измените эту информацию на сайте, ветка master перестанет быть актуальной и следующий релиз будет запланирован не раньше следующей недели. В такой ситуации возникает вопрос: что делать?

Также возникла необходимость в контент-менеджерах иметь возможность управлять структурой сайта, настройками меню, параметрами SEO (заголовок, описание, ключевое слово) и создавать собственные разделы без изменения физической структуры на сервере. Однако этот функционал в Битриксе жестко привязан к физической структуре на сервере. Мы можем изменить его, только изменив репозиторий.

Использование типовых решений кажется совершенно абсурдным; возникают следующие проблемы:

1. Мы не можем отказаться от использования Git.

ЧИТАТЬ  Пилотная версия видео на YouTube для поиска в Google: краткие выводы и ключевые выводы

2. Встроенные области и файлы index.php могут содержать не только текст, но и PHP-код, для которого у контент-менеджера нет опыта. Опыт показывает, что зачастую они не имеют достаточных знаний о том, как ими пользоваться, что приводит к сбоям в работе системы.

Был проведен анализ и сформулированы требования:

1. Менеджер контента должен иметь ограниченный доступ для изменения файлов PHP.

2. Контент-менеджер должен иметь возможность изменять любой контент на странице.

3. Контент должен быстро меняться

4. Весь код необходимо сохранить в Git.

5. Решение должно учитывать многосайтовость

6. Блоки контента должны быть многократно использованы на разных страницах.

7. Удобный интерфейс.

8. Необходимо быстро менять заголовки страниц, заголовок, описание и ключевые слова. При этом код сайта не должен быть затронут.

9. Необходимо иметь возможность создавать страницы, не прибегая к физической структуре сайта.

10. Создание динамического меню.

По результатам анализа были приняты следующие решения:

1. Разработать собственный модуль управления контентом, где весь контент должен храниться в отдельном блоке загрузки в базе данных.

2. Разработать виртуальную структуру сайта на основе информационного блока с необходимыми свойствами.

Решение первой проблемы

Модель данных для модуля управления контентом:

Для работы с моделью данных используется класс ContentTable.

Внутри класса есть частные свойства $arContentTypes, $arHLBlock и $arHLFields.

Класс содержит следующие статические методы:

— getTableName(): возвращает имя таблицы;

— getMap(): возвращает карту соответствия между полями таблицы и их типами.

Класс также содержит следующие общедоступные методы:

— GetList($arParams = array()): возвращает список элементов по указанным параметрам;

— Подготовка2DB(&$arFields = array(), $method = 'ADD'): подготавливает данные перед сохранением в базе данных;

— AddEx($arFields = array()): добавляет новый элемент;

— Update($id, $arFields = array()): обновляет данные элемента с указанным идентификатором;

— Удалить($id): удаляет элемент с указанным идентификатором;

— getHLBlock(): возвращает массив с информацией о блоке высокой нагрузки;

— getHLFields(): возвращает массив с информацией о полях блока highload;

— getContentTypes(): возвращает массив с информацией о типах контента;

— getContentTypeID2Code(): возвращает идентификаторы типов контента массива, сопоставляющие их коды;

— getContentTypeCode2ID(): возвращает массив, который сопоставляет коды типов контента с их идентификаторами.

Вывод контента регулируется разработанным компонентом. Его можно разместить в любом месте страницы (шаблон, встроенный файл или index.php). Вы можете заранее просчитать, где вам может понадобиться публиковать контент.

ЧИТАТЬ  Как мы помогаем сингапурцам бороться с хроническими заболеваниями

Ниже приведено описание основных методов CIContentComponent:

1. onIncludeComponentLang(): метод вызывается перед включением языковых файлов компонента. Здесь вы можете определить голосовые сообщения, используемые в компоненте.

2. onPrepareComponentParams($params): метод вызывается перед выполнением компонента и позволяет подготовить параметры компонента перед его использованием. Это позволяет проверять и конвертировать параметры.

3.executeComponent(): Основной метод компонента, выполняющий все необходимые действия для получения и обработки данных. В этой функции можно вызывать другие функции класса и генерировать результат работы компонента.

4. checkModules(): Метод проверяет наличие необходимых модулей для работы компонента. Если модуль отсутствует, метод может отображать сообщение об ошибке или выполнять другие действия.

5. checkParams(): метод проверяет, существуют ли необходимые параметры компонента. Если параметр отсутствует или имеет неправильное значение, метод может отобразить сообщение об ошибке или выполнить другие действия.

6.executeProlog(): функция выполняет некоторые действия перед выполнением компонента. Например, он может установить заголовок страницы или добавить файлы CSS и JS.

7. readDataFromCache(): метод пытается получить данные из кэша. Если данные находятся в кеше, метод возвращает их. Если в кеше нет данных или они устарели, метод возвращает false.

8. getResult(): метод генерирует результат компонента. В нем вы сможете выполнить необходимые расчеты и подготовить данные к выводу.

9. putDataToCache(): метод сохраняет данные в кеше. Данные могут быть сохранены с определенным ключом и с дополнительными параметрами.

10. showEditButtons(): метод отображает кнопки редактирования компонента, если у пользователя есть соответствующие разрешения.

11.executeEpilog(): метод выполняет действие после выполнения компонента. Например, он может удалять временные файлы или освобождать ресурсы.

12. abortDataCache(): метод прерывает сохранение данных в кеше и очищает кеш, если он создан.

Вы можете управлять контентом из публичной части

Также вы можете что-то изменить или добавить в административной части.

Это означает, что контент-менеджеры больше не могут изменять файлы, такие как index.php, и включать разделы. Это обеспечивает безопасность и стабильность системы. При этом контент-менеджеры имеют удобный интерфейс изменения контента в режиме редактирования публичной части сайта. Теперь контент-менеджеры могут легко и быстро вносить необходимые изменения в контент, не прибегая к модификации PHP-файлов. Это существенно упрощает процесс работы и повышает эффективность работы контент-менеджеров.

ЧИТАТЬ  Обычно это стоит 800 долларов, этот комплект звуковой панели от LG может стать вашим за 280 долларов на Digital Trends.

Решение второй проблемы

Была принята идея создания виртуальной структуры на основе информационного блока. Дополнительные свойства этого информационного блока перечислены ниже:

1. Показать в меню – Список типов.

2. Имя в меню – введите String.

3. Ссылка на внешний ресурс – введите String.

4. Редирект на страницу — привязка типа к элементам. Для реализации задачи был создан обработчик, который перебирал файловую структуру на сервере и создавал клон физической структуры в структуре информационного блока. Папка на сервере представляет собой раздел информационного блока, файл index.php представляет собой элемент информационного блока с символьным кодом index.php. Дополнительный агент обновляет структуру, если на сервере что-то изменилось. Пользователи, имеющие право на изменение информационного блока структуры сайта, могут создавать разделы, не привязанные к физической структуре. При создании страницы сайта он сначала проверяет, существует ли такой раздел физически на сервере, и если да, то отображает его. Если такого раздела на сервере нет, но он находится в информационном блоке «Структура сайта», появится виртуальная страница с отображением компонента вывода контента. Этот компонент позволяет контент-менеджеру отображать информацию на странице.

Меню было реализовано таким образом, что оно формировалось не из системных файлов (например, top.menu.php), а из информационного блока «Структура сайта». В свойстве «Отображать в меню» можно выбрать, в каком меню должна отображаться данная запись. В свойстве «Заголовок» в меню вы можете отредактировать заголовок, если он отличается от заголовка. Заголовок и метаданные для SEO берутся из вкладки SEO. Также реализованы дополнительные настройки редиректов и внешних ссылок в меню.

Чтобы упростить заполнение виртуальных страниц, реализованы сниппеты:

1. Аккордеон

2. Инфографика

3. Слайдер

4. Таблица

5. Анонс пресс-релиза

6. Карта лидера

7. Цитата

Такой подход позволил удовлетворить потребности заказчика в своевременном изменении информации при сохранении стабильности основного кода без прерывания процессов разработки. Кроме того, это позволило контент-менеджерам работать над изменениями параллельно, сводя к минимуму риск конфликтов и ускоряя процесс изменений.

Это позволило нам обойти досадные технические проблемы управления контентом на 1С-Битрикс, позволив эффективно управлять контентом и структурой сайта в большом проекте с большим количеством контент-менеджеров.

Source