Тестовый дизайн новой версии сайта IGD.BY         RU   |   EN
Что нового в KION WEB 3.0? KION CMS v.1.9, KION CRM v.1.0 beta и KION CMS+L (с использованием Lua)
Автор: Кристофер

В октябре 2015 года выходит новая переработанная разновидность KION, которая по спектру реализуемых задач уже переросла стандартный уровень CMS, и теперь можно говорить о четырех полноценных ветвях, входящих в семейство KION WEB 3.0:

  • KION CMS 1.9 - система управления контентом, предназначенная для разработки сайтов.
  • KION CRM 1.0 beta - отдельная система управления взаимоотношениями с клиентами, может взаимодействовать с множеством различных сайтов.
  • KION CMS+L - инструментарий для синхронизации/шифрования и миграции данных.
  • myKion 2.0 — небольшой CSS/JavaScript-фреймворк/визуальный конструктор для быстрого создания и верстки сайтов.

 

Что нового в KION CMS 1.9

 

В декабре 2014 года вышла KION CMS версии 2.5, однако по спектру задач она разрослась настолько, что было принято решение объединить все наработки, вылившиеся в целое семейство продуктов, под общим названием KION WEB. Соотвественно, KION WEB выходит под версией 3.0 (как продолжение), а новая версия KION CMS обозначается как 1.9. Потому как именно с версии 1.8 эта система управления контентом начала "ветвиться".

Самой ключевой новинкой в KION CMS 1.9 является внедрение ORM (англ. object-relational mapping, рус. объектно-реляционное отображение), то есть дополнительного слоя абстрагирования базы данных. ORM базируется на основе разработок Idiorm/Paris, но при этом значительно доработана по сравнению с источниками в сторону подобия с Doctrine ORM. При этом стоит отметить, что KION ORM может работать в двух различных режимах, соотвествующих разным стилям программирования: процедурному и объектно-ориентированному.

 

Что такое KION CRM 1.0 beta

 

Проект KION CRM вырос в силу необходимости и потребностей из базовой версии KION CMS, а именно, из нескольких администраторских панелей сайтов, в которых пользователи хотели не только вносить статьи, товары и так далее, но и оперативно управлять заказами, работать в рамках команды. В CRM системы полноценно реализованы: пользовательский интерфейс, чат, планировщик и распределитель задач, статусы заказов, статистика по работникам и текущим либо проведенным сделкам. Данное направление будет успешно развиваться, при этом отдельно стоит отметить изначально заложенный принцип многосайтовости. Другими словами, KION CRM - это центр обработки информации, которая может поступать с различных форм на сайтах.

 

KION CMS+L

 

Об этом модуле следует рассказать более подробно. В рамках проектов Robodile и IGD разработана новая разновидность системы управления контентом KION CMS+L, в которой миграция данных, структур данных и сценарии по их обработке реализуются за счет использования языка Lua. Для этих целей были написаны трансляторы из Lua в PHP/JavaScript и обратно. Помимо этого предусмотрено множество дополнительных возможностей. 

KION CMS+L — это разновидность Kion CMS с поддержкой Lua. Kion CMS является высокопроизводительной системой управления контентом, написанной на стандартной связке: PHP/MySQL/CSS/JavaScript(jQuery). Вариант с использованием Lua предполагает дополнительные возможности по сериализации данных, их последующей обработке на сервере и/или клиенте, написанию сценариев действий.

Важно понимать, что язык Lua в рамках KION CMS+L не используется в своем классическом представлении, которое вы можете сейчас встретить в разработках компьютерных игр и десктопных/серверных приложений. В KION CMS+L используется только синтаксис Lua и типы данных плюс специфика работы с ними. Об использовании интерпретатора и компилятора уровня LuaJIT речь не идет.

Для интеграции Lua в Kion CMS достаточно подключить два файла: kion_lua.php и kion_lua.js. Эти файлы позволяют работать с Lua-кодом соответственно в PHP и JavaScript.

Зачем было нужно внедрять Lua?

  1. Хранение и миграция структур данных (без SQL).
  2. Написание сценариев обработки данных. Миграция методов обработки данных.
  3. Шифрование/дешифрование данных.
  4. Синхронизация данных.
  5. Расширенные возможности клиентской части за счет интеграции Lua и JavaScript. 
  6. Интеграция с KION СRM.

Нужно отметить главную особенность данного решения: из PHP или JavaScript в Lua можно транслировать только данные и их структуру. Из Lua происходит более широкое по возможностям преобразование, а именно, трансляция кода, в рамках которой помимо самих данных можно передавать в PHP или JavaScript пользовательские функции, циклы, условные операторы, базовые С-функции (например, для работы со строками). При трансляции они превращаются в стандартные конструкции языков PHP и JavaScript. Другими словами, если вы написали функцию обработки массива на Lua, она с сохранением всех внутренних алгоритмов и параметров преобразуется в идентичные на PHP и JavaScript. 

Если говорить о работе со структурами данных, то встраивание Lua можно сравнить с использованием YAML, который хорошо знаком программистам Symfony, а также с JSON. Но при этом в самом файле сценария (Lua-файле) вы можете не только хранить данные, но и прописывать условия их обработки. 

Язык Lua очень удобен и прост в программировании, является С-подобным, имеет ряд уникальных особенностей. Одна из них — это тип данных table, который подразумевает, по существу, ассоциативные массивы с данными гетерогенного типа. В качестве ключей и значений элементов могут выступать любые типы данных (в т.ч. другие таблицы, функции, которые в данном языке также являются отдельным типом и т.п.), кроме nil (неопределенный тип).
Также на уровне Lua вы можете производить взаимодействие с другими Lua-файлами (импорт), таким образом можно собирать более сложные структуры.

Для демонстрации того, как это работает, покажем несколько внутренних механизмов KION CMS+L.

 

Базовые функции трансляции и выборки KION CMS+L

 

Для трансляции/перемещения кода без шифрования предусмотрено семь базовых функций:

  • lua_add(data, tablename); - для PHP и JS.
  • lua_add_to_file(data, tablename, filename); - для PHP и JS.
  • lua_parse(variablename); - для PHP и JS.
  • lua_parse_file(filename); - для PHP и JS.
  • lua_get_element(elementname, variablename); - для PHP и JS.
  • lua_get_element_from_file(elementname, filename); - для PHP и JS.
  • lua_delete_file(filename); - только для PHP.

Преобразование данных из PHP и JavaScript в Lua-строку производится с помощью функции lua_add(data, tablename), в которой может использоваться два входящих аргумента — переносимый массив с данными и имя таблицы(массива), в которую эти данные помещаются. Приведем пример для PHP:

$lua_array = array("foo" => "bar");
$lua=lua_add($lua_array, ‘larr’);

Сформированная Lua-строка после преобразования будет иметь вид:

larr={foo=”bar”}

Функцию lua_add() можно использовать бесконечное число раз, добавляя или модифицируя данные:

$lua_array = array("bar" => "foo");
$lua=lua_add($lua_array, ‘larr’); 

Сформированная/преобразованная lua-строка будет выглядеть:

larr={foo=”bar”, bar=”foo”}

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

$lua_array = array("foo" => "");
$lua=lua_add($lua_array, ‘larr’);

В результате lua-строка преобразуется в:

larr={bar=”foo”}

Функция lua_add_to_file(data, tablename, filename) работает аналогично lua_add(), только запись данных производится в указанный lua-файл (кодировка UTF-8). Имеет три входящих аргумента (требуемые к переносу данные, имя таблицы(массива), в которую эти данные помещаются, и имя файла). Вызов выглядит так:

lua_add_to_file($lua_array, ‘larr’, 'lua_data.lua');

В качестве имени файла можно указать адрес url, начинающийся с «http://» или «https://». 

Для случаев изменения значений существующих элементов таблиц, а также удаления этих элементов функция работает идентично lua_add()

Для обратной операции в PHP и JavaScript используются две функции: lua_parse(variablename) и lua_parse_file(filename). Обратное преобразование подразумевает непосредственно трансляцию структуры данных и функций (в случае файла) из Lua в PHP или в JavaScript, в зависимости от того, откуда оно вызывается. 

Для функции lua_parse_file(filename) в качестве имени файла можно указать адрес url, начинающийся с «http://» или «https://».

Для получения определенных элементов из таблиц используются две функции lua_get_element(variablename, elementname) и lua_get_element_from_file(elementname, filename).

Первая из них читает данные из строки, в аргументах указываются: конкретно элемент, который нужно заполучить и имя переменной, содержащей lua-строку. Пример для PHP:

$lua_array = array("foo" => "bar");
$lua=lua_add($lua_array, ‘larr’);
$lua_v1= lua_get_element(larr, $lua); //заберет весь массив из таблицы larr в строке $lua
$lua_v2= lua_get_element(larr[“foo”], $lua); //заберет значение элемента larr[“foo”] в строке $lua

Как видите, данная функция очень удобна, то есть она может забирать не только конкретные значения, но и массивы. Если в larr[“foo”] будут содержаться элементы следующего уровня, например, larr[“foo”] [1], larr[“foo”] [2] и т.п., то, соответственно, в переменную $lua_v2 загрузится опять же массив.  

Функция lua_get_element_from_file(elementname, filename) работает аналогично, с той лишь разницей, что в качестве второго аргумента нужно указать не имя переменной, содержащей строку, а название файла или его url, начинающийся с «http://» или «https://». 

 

Шифрование данных KION CMS+L

 

В рамках KION CMS+L может использоваться обратимое шифрование данных ключом, соответственно, для этого разработаны специальные функции, аналогичные описанным выше, но имеющими префикс «s» в наименовании, и в них добавлен еще один аргумент — ключ шифрования:

  • slua_add(key, data, tablename); - для PHP и JS.
  • slua_add_to_file(key, data, tablename, filename); - только для PHP.
  • slua_parse(key, variablename); - для PHP и JS.
  • slua_parse_file(key, filename); - для PHP и JS.
  • slua_get_element(key, elementname, variablename); - для PHP и JS.
  • slua_get_element_from_file(key, elementname, filename); - для PHP и JS.

Алгоритмов шифрования предусмотрено всего пять, включая Blowfish. Переключение между ними производится в настройках kion_lua.php и kion_lua.js. 

 

Синхронизация данных KION CMS+L

 

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

  • lua_sync_files (filename1, filename2);
  • slua_sync_files (key, filename1, filename2);
  • lua_sync_batch (filename1, filename2, depth);
  • slua_sync_batch (key, filename1, filename2, depth);

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

Что касается имен файлов, то подойдут как обычные относительные ссылки, так и url, начинающиеся с «http://» или «https://».

Функции работают следующим образом: из двух файлов выбирается наиболее свежий по дате, и более старый заменяется на новый. Если одного из файлов нет, то другой копируется в указанное место под введенным именем.

lua_sync_files() и slua_sync_files() работают только с двумя файлами. Эти функции выгодно использовать для случаев, например, когда пользователь загрузил новую фотографию, и в один из файлов данных добавилась ее ссылка и т.п. Пример:

lua_sync_files (‘/data1.lua’, ‘http://sitename.ru/luascripts/data1.lua’);//изменили файл данных на втором сервере
lua_sync_files (‘/picture1.jpg’, ‘http://sitename.ru/images/picture1.jpg’);//загрузили картинку на второй сервер

Если имена файлов одинаковы, и таких много, вы можете использовать две функции пакетной обработки — lua_sync_batch() и slua_sync_batch(). Для этого достаточно поставить «*» в имени вместо тех символов, которые меняются. Также добавлен еще один аргумент — глубина сканирования, который указывается в цифрах. Если указан 0, то вложенные папки относительно указанных файлов не сканируются, сверка идет только в узлах, где эти файлы расположены, 1 — сканируются и дочерние папки. Если с одной из сторон какой-либо файл отсутствует, с другой копируется имеющийся. 

Пример:

lua_sync_batch (‘/*.lua’, ‘http://sitename.ru/luascripts/*.lua’, 0);

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

 

Таймлайн KION CMS+L

 

На данный момент KION CMS+L тестируется на коммерческих проектах, в будущем планируется выложить файлы интеграции в свободный доступ.

 

myKion 2.0

 

Версия 2.0 осени 2015 года выросла в развитый рабочий инструмент, но при этом стоит отметить, что в ближайшие как минимум два года продолжение его разработки не планируется. CSS/JavaScript-фреймворк myKion изначально задумывался как альтурнатива известному bootstrap. Свои задачи он выполнил и выполняет, и самое разумное его продолжение — создание визуального HTML/CSS/JavaScript конструктора, что требует значительных временных затрат. На данный момент времени нет. 

 

Подытожим

 

Появление KION WEB 3.0 мотивировано реальными задачами, которые сегодня являются актуальными и востребованными в области разработки сайтов уровня "выше среднего". Сложно говорить о конкуренции с чем-либо, поскольку основная задача, которая преследуется при разработке каждой из ветвей - не сильно "обрасти кодом". У семейства довольно низкий порог вхождения - благодаря хорошо откомментированному коду и документации, в проекты, разработанные на KION может легко внедриться любой программист, разбирающийся в стандартном стеке HTML/CSS/PHP/JavaScript(jQuery)/MySQL. Плюс к этому основная часть построена на процедурном PHP без использовании всевозможных надстроек (типа шаблонизаторов и т.п.), и даже при реализации сложных задач сохраняется очень высокая производительность кода и, соответственно, в результате мы получаем быстрые сайты, алгоритмы и приложения. Даже внедрение ORM в новую версию KION CMS абсолютно не сказалась на её скорости, поскольку были проделаны большая работа и длительное тестирование перед тем как было принято решение: "внедрить!".   

Что касается внедрения Lua... это не неожиданность. Дело в том, что Lua, как язык, очень родственен PHP и JavaScript. Во многих играх он используется как внешний язык сценариев, которые можно менять независимо от компилируемлой части. В рамках Kion CMS+L хотелось реализовать нечто подобное, хотя после это выросло в полноценную систему передачи/синхронизации данных, в том числе и в зашифрованном виде.