При разработке нашего сервиса (мы не скрываемся, но он пока еще весьма сырой и находится в стадии глубокого редизайна) команда столкнулась с задачей описания большого количества шаблонов.
Чтобы было немного понятнее – мы делаем инструмент для организации самых разных мероприятий (тематических встреч, вечеринок, юбилеев, торжеств, свадеб, корпоративов, семинаров, ремонтов, съемок, концертов, фестивалей, выставок и т.п.)
Конечно же, каждый тип мероприятия требует самых разных шаблонов и нужны инструменты их простого создания
Пока программисты были заняты разработкой самой платформы, мне очень сильно захотелось поскорее посоздавать шаблоны, которые уже крутились в голове. Но формат, в котором это разрабатывал программист весьма недружественный для разработки и сопровождения таких шаблонов.
Вот пример того, что должно загружаться в сервис
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 и во то Вам только ни заблагорассудится.
Спасибо за Ваше внимание. Надеюсь, что статья была для Вас полезной
ссылка на оригинал статьи http://habrahabr.ru/post/195546/
Добавить комментарий