====== 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);