====== Limb 2.4-alpha1 release ======
**Статус - выпущен.** [[http://svn.limb-project.com/filedetails.php?repname=limb&path=%2F2.x%2Ftags%2F2.4-alpha1%2FCHANGELOG&rev=0&sc=0| CHANGELOG]], [[http://sourceforge.net/project/showfiles.php?group_id=109345&package_id=118079&release_id=364323|скачать]]
===== Краткое описание =====
Данный релиз представляет из себя демо проект, сделанный на основе Limb 2.4-alpha1. Статус "альфа" означает, что данный релиз нестабилен, API окончательно нестабилизированно и в будущем будет подвержено дальнейшим изменениям, использование в продукционных целях этого релиза нежелательно. Также данный релиз Limb не совместим с серией 2.3.x, причем последующие релизы 2.4 будут увеличивать эту разницу.
Что же именно было сделано:
* Значительное упрощение установки LIMB проекта на веб сервер
* Полная переработка GUI административной зоны
* Улучшенная поддержка I18N - переход на UTF8 кодировку
* Общая переработка кода и ускорение исполнения
===== Значительное упрощение установки LIMB проекта на веб сервер =====
Теперь Limb не предъявляет требований к тому, чтобы проекты устанавливались именно в корень директории хоста. Также наконец-таки удалось избавиться от назойливой приставки /root в каждом url.
==== Использование PathInfo ====
Теперь все запросы к системы проходят через скрипт index.php(root.php больше не существует). В самом базовом случае доступ осуществляется через стандартный метод CGI - PathInfo, т.е все запросы к системе выглядят так: **index.php/path/to/some/object?foo=1&bar=2**.
Поддержка запросов через PathInfo теоретически позволяет использовать LIMB с другими web серверами нежели Apache. К сожалению, нам так и не удалось включить поддержку PathInfo в IIS(хотя таковая присутствует), поэтому утверждать на 100% мы не можем.
==== "Читабельные" ссылки ====
Для того, чтобы url имели более "читабельный", можно использовать различные методы, одним из самых популярных является Apache mod_rewrite. Демо проект содержит .htaccess с настроенными правилами mod_rewrite. О том, что используется mod_rewrite необходимо явно указать в настройках проекта(setup.php, setup.override.php) используя константу **ENABLE_MOD_REWRITE**:
...
define('ENABLE_MOD_REWRITE', true);
...
==== Технические детали ====
=== Новые константы ===
Limb автоматически объявляет следующие константы:
**HTTP_BASE_PATH** - http расположение Limb проекта, к примеру, http://dot.com/limb
**HTTP_GATEWAY_PATH** - http расположение Limb шлюза, который обрабатывает все запросы. К примеру, в базовом случае http://dot.com/limb/index.php, в случае же использования mod_rewrite HTTP_GATEWAY_PATH == HTTP_BASE_PATH
**HTTP_SHARED_PATH** - http расположение Limb shared директории
:!: Все эти константы обязательно оканчиваются "/", имейте это в виду при их использовании
Данные константы регистрируются глобально в шаблонах, их аналоги: **{#HTTP_BASE_PATH}**, **{#HTTP_GATEWAY_PATH}**, **{#HTTP_SHARED_PATH}**.
=== ===
Также был добавлен новый тег ****, который делает следующее:
* регистрирует глобальные JavaScript переменные HTTP_BASE_PATH, HTTP_GATEWAY_PATH и HTTP_SHARED_PATH
* вставляет html тег . Это сделано для того, чтобы упростить поддержку пользовательских ссылок в контенте, теперь внутренняя ссылка **/news/foo** должна выглядеть как **news/foo**, тег обеспечивает добавление пути до Limb проекта.
=== fetcher ===
fetcher добавляет новый аттрибут http_path к каждому выбранному объекту для его использования непосредственно в шаблоне
===== Полная переработка GUI административной зоны =====
:!: Текущая реализация нового GUI была протестирована только в Mozilla FireFox, полноценная поддержка других браузеров намечена в последующих релизах.
==== Обновленный дизайн ====
Использование верстки, основанной на фреймах, выявило определенные проблемы с юзабильностью, поэтому в новом дизайне мы полностью от них отказались. Новый дизайн также включает в себя переработку стилей, иконок и проч. элементов GUI.
==== Начальная унификация разметки шаблонов для административной зоны ====
Были добавлены новые теги, позволяющие унифицировать шаблоны для административной зоны.
Для форм:
...
...
...
...
...
...
Для таблиц:
...
...
...
...
==== Переработка html разметки ====
Мы постепенно переводим существующую разметку на div элементы и максимальный перенос информации по форматированию в css, чтобы сделать разметку более чистой и простой в поддержке. В будущем будет сделан упор на соответствие W3C стандартам и переход к XHTML.
==== Переработка JavaScript ====
Прослойка JavaScript была основательно переработана, таким образом, чтобы соответствовать стандарту пакетов библиотеки [[http://openjsan.org/ | JSAN]]. Теперь весь код находится в пространстве имен Limb, что позволяет использовать сторонние библиотеки без опасения пересечения имен. Стоит, однако, заметить, что переработка клиентского кода не завершена и ожидаются значительные изменения в последующих релизах.
==== Использование AJAX ====
Для улучшения пользовательского интерфейса выбора элемента из дерева была использована технология AJAX. Мы планируем использование AJAX в более широких масштабах в последующих релизах, что теоретически должно позволить упростить нагрузку на сервер.
===== Улучшенная поддержка I18N - переход на UTF8 кодировку =====
В Limb были добавлены базовые инструменты для работы с мультибайтной кодировкой UTF8. Весь не ASCII контент был преобразован в UTF8 кодировку.
Для работы с UTF8 были добавлены следующие глобальные функции(аналоги встроенных в PHP):
_substr($str, $start, $length=null)
_explode($sep, $str)
_str_replace($s, $r, $str)
_ltrim($str, $charlist='')
_rtrim($str, $charlist='')
_trim($str, $charlist='')
_strtolower($string)
_strtoupper($string)
_strpos($haystack, $needle, $offset=null)
Данные функции делегируют обработку одному из драйверов, скажем, если расширение mbstring доступно, то будет использоваться оптимизированный драйвер. Также существует базовый драйвер, которые не зависит от внешнего расширения и использует стандартные функции PHP, естественно, в ущерб производительности.
По умолчанию, однако, загружается драйвер, который манипулирует однобайтовыми строками. Т.к UTF8 совместима с ASCII, задействовать именно мультибайтные драйвера имеет смысл только по необходимости. Делается это с помощью объявления константы **ENABLE_UTF8** в setup.php(setup.override.php):
...
define('ENABLE_UTF8', true);
...
Следует четко отдавать себе отчет, когда именно целесообразно применять данные функции вместо встроенных. Разобраться с тонкостями UTF8 поможет [[http://www.phpwact.org/php/i18n/charsets | детальное описание]] Harry Fuecks'а.
===== Общая переработка кода и ускорение исполнения =====
Мы постепенно повышаем качество кода 2.x, дабы тот соответствовал уровню 3.x, однако мы ни в коем случае не пытаемся сделать PHP4 совместимый клон ветки 3.x. Обсуждение дальнейшего развития 2.x можно почитать в [[http://limb-project.com/forum/viewtopic.php?t=354 | форуме]].
В данной версии Limb были добавлены новые уровни прозрачного кеширования, которые позволяют заметно ускорить время исполнения среднего запроса к системе.
==== Кеширование дерева ====
Был добавлен класс caching_tree, который обворачивая materialized_path_tree, кеширует все запросы к дереву в файловую систему, чтобы кеш был доступен между запросами. Любое изменение дерева полностью удаляет кеш, что позволяет иметь всегда синхронизованную версию дерева.
:!: Данный функционал находится в стадии тестирования и по умолчанию отключен(в демо проекте включен), его можно включить, поместив следующую строку в setup.php(setup.override.php) проекта:
define('ENABLE_TREE_CACHE', true);
==== Кеширование запросов к БД ====
Был добавлен класс декоратор db_caching_driver, который кеширует результаты одинаковых запросов к БД в течении одного запроса.
:!: Данный функционал находится в стадии тестирования и по умолчанию отключен(в демо проекте включен), его можно включить, поместив следующую строку в setup.php(setup.override.php) проекта:
define('ENABLE_DB_CACHE', true);