Несколько языков в инфоблоке

Рейтинг: -0.1227  
На голосовании
Предложил Забаров Рим 19.07.2015 07:29:46

Несколько языков в инфоблоке

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

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

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


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


4. Для хранения данных по другим языкам (отличным от основного) нам потребуется дополнительная таблица или две - если сделать отдельно для элементов инфоблока и отдельно для разделов (в нюансах работы mysql я не силен, поэтому предложу общую схему - думаю кто разбирается додумает) в этой таблице будет хранится языковые версии данных. Для этого в таблице должны быть следующие поля:
- ID записи
- ID элемента инфоблока
- ID языка
- Код поля или свойства для которого мы храним данные (например PREVIEW_TEXT, для свойств - как при выборке: PROPERTY_КОД_ПОЛЯ)
- Значение (тут у меня сомнения, поскольку значения бывают разных типов (строка, текст, дата, число - можно использовать наверное 4 разных поля для каждого типа значения)
Для разделов - аналогичная структура, только вместо ID элемента - ID раздела

5. Нам потребуется несколько функций для вывода и записи данных (я не программист - опишу своими словами).
Нам потребуется 4 функций для работы с каждой из таблиц (для элементов и для разделов)
- Добавления
- Редактирование
- Обновление
- Удаление
Итого 8 функций, 1 класс (CIBlockLang) для работы с языковыми версиями инфоблока

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