Бележки на програмиста относно новите функции на MODxреволюция
В тази статия искам да разгледам някои от новите функции на MODx Revolution, които не бяха във второстепенния клон - MODx Evolution. Започнах да работя с този CMF още когато беше налична версията modx-2.0.0-beta-2, т.е. преди около година и половина. Мога да кажа, че от лятото на 2009 г., когато системата беше само в бета версия, до пускането през лятото на 2010 г., MODx измина дълъг път в развитието си, бяха добавени нови функции, старата функционалност стана по-бърза и по-добра. Вярвам, че MODx Revolution в момента е наистина мощна платформа за изграждане на голямо разнообразие от уеб приложения, от прости сайтове до големи портали. И така, да започваме.
Ще се опитам да опиша следните иновации в MODX Revolution:
- xPDO
- Пространства от имена
- Контексти
- Нова система за кеширане
- Интернационализация
Първо, извадка от описанието на xPDO от официалния уебсайт:
xPDO е лека ORB библиотека, която работи на PHP 4 и 5, като се възползва от новия стандарт за достъп до базата данни в PHP 5.1 и по-нова версия, PDO. Той прилага много прост, но ефективен модел на Active Record за достъп до данни.
xPDO е ORB библиотека, разработена от MODx общността, на която се базира цялата работа на системата, дори основният MODx клас е наследник на xPDO класа. В MODx Revolution всички операции с бази данни се извършват с помощта на xPDO, разработчиците на компоненти също се насърчават да използват тази библиотека, но старият механизъм на базата данни от MODx Evolution все още е оставен за обратна съвместимост. xPDO ви позволява да използвате един интерфейс за комуникация с различни типове бази данни. В момента са налични конектори за MySQL иSQLite, в бъдеще се планира да се разшири списъкът на поддържаните бази данни. Всички манипулации с данни се извършват с помощта на специализирани методи. Избирането, създаването, актуализирането и изтриването на данни не изисква използването на директни заявки, което на практика елиминира SQL инжектирането.
Следващият пример избира от базата данни всички ресурси в уеб контекста, които имат родителски ресурс, зададен на 3, и отпечатва техните заглавия.
//избиране на ресурси според даденото условие $resources = $modx->getCollection("modResource", array( "parent" => 3, "context_key" => "web" )); //обхождане на резултантния масив и показване на заглавието на ресурса foreach ($resources като $resource) echo($resource->get("pagetitle").""); >
По същия начин обектите се създават, редактират и изтриват:
//създайте нов обект $resource = $modx->newObject("modResource"); //задайте заглавието на страницата и съдържанието $resource->set("pagetitle", "Моето заглавие"); $resource->set("съдържание", "Моето съдържание"); //и запишете в базата данни. //Внимание! Докато този метод не бъде извикан, данните няма да бъдат записани в базата данни! $resource->save();
//получаване на ресурс с идентификатор 1 $resource = $modx->getObject(“modResource”, 1); //задайте ново заглавие $resource->set(“pagetitle”, “Ново заглавие”); //и запазете промените $resource->save();
//получаване на ресурс с идентификатор 5 $resource = $modx->getObject("modResource", 5); //и го премахнете $resource->remove();
Пространства от имена
Пространствата от имена се използват за идентифициране на различни компоненти извън ядрото на системата. Всъщност пространството от имена е папка вcore/components, който съдържа модели на файлове за xPDO, речници и други ресурси, необходими за компонентите. Пространствата от имена се използват и при създаване на допълнителни страници и елементи от менюто в административната система. Всеки външен компонент трябва да има собствено пространство от имена, което може да бъде създадено в административната система.
Контекстът е хранилището на ресурсите в MODx. Всеки ресурс трябва да принадлежи към един от контекстите. Контекстът има отделен кеш на дървото на ресурсите, което му принадлежи. Съответно всеки път, когато даден ресурс се добавя или премахва от контекста, системата изчиства кеша. При повторен достъп до контекста се генерира дърво на ресурсите и се записва в кеша, което може да причини известно забавяне на сайта, когато ресурсите се добавят или премахват често. Следователно, ако имате често актуализиран сайт с голям брой документи, може да е разумно да преместите някои раздели в отделни контексти.
Правилата за достъп до контекста се прилагат с помощта на набор от права, които са зададени за конкретна група потребители в определен контекст. Следователно е възможно да се попречи на определени потребители да редактират или дори да преглеждат ресурси в определен контекст. По подразбиране има 2 контекста в системата след инсталирането: web (контекста на потребителската част на сайта) и mgr (контекста на административния панел).
Нова система за кеширане
MODx Revolution предоставя нова система за кеширане, с която програмистът може да съхранява всякакви данни в кеша и да управлява напълно неговия жизнен цикъл. Пример за писане и извличане на данни от кеша (взет от официалната документация на MODx):
// запис на нещо в кеша $colors = array('red','blue','green'); $modx->cacheManager->set('colors',$colors); /*ще бъде записано в core/cache/colors.cache.php */
// сега вземете записаните данни $colors = $modx->cacheManager->get('colors'); foreach ($colors като $color) < echo $color.'-'; > /* отпечатва 'червено-синьо-зелено' */
Можете също да изтриете запазените данни. Пример за изтриване:
Интернационализация
MODx Revolution ви позволява да създавате интернационализирани версии на уебсайтове, като използвате речници, съхранени във файлове или база данни. Речниците са разделени на следните нива: езици, теми и низове. Във файловата система езиците са папки, които съдържат файлове с теми, които от своя страна съдържат низове.
Нека разгледаме пример за организиране на съхранението на системните речници MODx във файловата система. Главната папка на речника съдържа подпапки, чиито имена съответстват на езиковите обозначения на IANA (например en или ru). Освен това всяка езикова подпапка съдържа файлове с имена във формат theme_name.inc.php. И всеки файл с тема съдържа редове във формат
На страницата на сайта стойността на низ от речника се вмъква със следния таг:
[[%rowid? &topic=`име_на_темата` &namespace=`modx` &language=`език`]]
Параметърът за пространство от имена се използва за указване на пространството от имена, за което трябва да се зареди лексиконът. Езиковият параметър не е задължителен, ако липсва, ще бъде избран езикът, зададен в системните настройки по подразбиране.
Опитах се да покрия само някои от новите функции на MODx Revolution. В тази система има повече, отколкото мога да си представя в момента. Продължавам да изучавам този прекрасен, по мое мнение, CMF с удоволствие и никога не съм бил разочарован от него.