При разработке нашего сервиса (мы не скрываемся, но он пока еще весьма сырой и находится в стадии глубокого редизайна) команда столкнулась с задачей описания большого количества шаблонов.
Чтобы было немного понятнее – мы делаем инструмент для организации самых разных мероприятий (тематических встреч, вечеринок, юбилеев, торжеств, свадеб, корпоративов, семинаров, ремонтов, съемок, концертов, фестивалей, выставок и т.п.)
Конечно же, каждый тип мероприятия требует самых разных шаблонов и нужны инструменты их простого создания
Пока программисты были заняты разработкой самой платформы, мне очень сильно захотелось поскорее посоздавать шаблоны, которые уже крутились в голове. Но формат, в котором это разрабатывал программист весьма недружественный для разработки и сопровождения таких шаблонов.
Вот пример того, что должно загружаться в сервис
event_type_groups.config
'default'=>array(
'name' => 'default',
'title' => 'Мои шаблоны'
),
'celebration'=>array(
'name' => 'celebration',
'title' => 'Торжество'
),
'business'=>array(
'name' => 'business',
'title' => 'Бизнес-мероприятие'
),
'tourism'=>array(
'name' => 'tourism',
'title' => 'Пикник, поход'
),
…
Ждать админку нужно было несколько дней, описывать же их в такой форме – задачка весьма нудная и гарантирующая немалое число ошибок. Можно было поручить задачу по созданию админки кому-то еще, но тут пришла в голову довольно простая мысль.
Я хоть и менеджер, но с немалым опытом как в программировании, так и в подготовке самой разной документации. И не раз приходилось связывать что-то в документах с чем-то в программных модулях. Например, в техническом задании может быть прописана какая-нибудь структура справочной информации и каждый раз, когда в нее вносятся изменения, требуется эту структуру пересоздавать в коде.
Было принято решение использовать для формирования необходимых файлов Excel. Причем, первая идея заключалась в том, чтобы написать VB-скрипт, который будет пробегаться по нужным строкам и колонкам и переводить данные в формат ассоциированного массива для дальнейшей загрузки через PHP.
Однако, даже этого делать не пришлось. Вполне достаточно сцепить необходимые значения в нескольких колонках
Вот как выглядит формула, которая строит отдельный блок из строк конфигурационного файла
И вот, что получается в результате ее работы
При вставке в файл это выглядит так
'wedding_ceremonial_book_leading'=>array(
'name'=>'book_leading',
'order'=>'1',
'placeholder'=>'Укажите имя и контактные данные ведущего',
'title'=>'Тамада',
'obj_type'=>'text',
'text'=>'',
'default'=>'',
'field_group'=>'prepare_actors',
'event_type'=>'wedding_ceremonial',
),
Далее оставалось лишь выделить все строки в колонке, скопировать их, и вставить в текстовый файл. Бинго! Скрипт к загрузке готов. Ну, почти готов.
Прокомментирую некоторые нюансы, с которыми пришлось столкнуться
1. Отступы и переводы строк для хорошего форматирования
2. Обработка лишних кавычек, которые подставлял эксель при вставке в notepad
3. Кодировка при вставке из Excel в notepad
Для того, чтобы вставлять отступы (табуляции) и переводы строк, я создал в таблице именованные ячейки
• ПСВК с формулой =СЦЕПИТЬ(СИМВОЛ(13); СИМВОЛ(10))
• ТАБ с формулой =СИМВОЛ(9)
• ПСВКТ с формулой =СЦЕПИТЬ(ПСВК; ТАБ)
• ПСВКТТ с формулой =СЦЕПИТЬ(ПСВКТ; ТАБ)
• ПСВКТТТ с формулой =СЦЕПИТЬ(ПСВКТТ; ТАБ)
Обработку лишних кавычек пришлось делать вручную, поиском и заменой (Excel вставляет двойные кавычки, а нигде в скрипте их нет)
Ну и в notepad++ пришлось установить кодировку UTF-8 без BOM, чтобы получившиеся файлы загружались без ошибок.
Если вам нужно трансформировать регулярные данные в скрипты для использования в каких-то языках программирования, Вы теперь знаете, что Excel2PHP прекрасно можно трансформировать в Excel2JS или Excel2SQL и во то Вам только ни заблагорассудится.
Спасибо за Ваше внимание. Надеюсь, что статья была для Вас полезной
Автор: realbtr