Joomla CMS като рамка, блог за уеб разработка

Framework — рамка на софтуерна система (или подсистема). Може да включва помощни програми, библиотеки с кодове, скриптов език и друг софтуер, който улеснява разработването и интегрирането на различни компоненти на голям софтуерен проект. Обикновено свързването става чрез използването на единичен API.Приложение е глобалният обект, отговорен за обработката на заявката. Двата класа на този обект, които ни интересуват, са JSite и JAdministrator. Joomla! използва тези класове, за да прави заявки съответно към предния и задния край. Класовете на приложенията разширяват базовия абстрактен клас на JApplication; По-голямата част от функционалността на JSite и JAdministrator е една и съща. Документът е глобален обект, използван за буфериране на заявката. Когато показваме данни в нашите разширения, те се добавят към документа. Това дава възможност за промяна на изхода преди изпращане. Приложният обект винаги се съхранява в променливата $mainframe. Това е глобална променлива, която може да бъде достъпна, след като я декларирате като глобална, т.е.

За достъп до глобалния обект Document използвайте статичния метод JFactory::getInstance ()

Обърнете внимание, че създаваме препратка към обект с “=&” вместо да копирате целия обект.

URI структура. Заявката е частта от URI, от която получаваме данни, състояща се от двойки ключ-стойност, разделени с амперсанд. Първо, ще разгледаме стойността на опцията. Тази стойност дефинира компонента, до който имаме достъп, името започва с com_. Например:

Менютата са основният инструмент за навигация в Joomla! за потребители. Всеки от елементите на менюто съдържа връзка към компонент (вътрешна) или URL (външна връзка). Можем да променим настройките заиндивидуален компонент и задаване на шаблони. Всеки елемент от менюто има свой собствен >

Някои компоненти могат да извеждат данни в различни формати, като използват стойността на формата. Това ще работи, ако даденият компонент поддържа искания формат. Например ще получим данни от примерния компонент във формата на емисия:

Друга често използвана стойност, task, указва задачата, която компонентът трябва да изпълни. Когато създавате свои собствени компоненти, използването на тази стойност има предимство. Причината за това е, че компонентът е частично изпълнение на рамката. Например, нека се позовем на примерния компонент със задача за изглед:

Когато конструираме собствени URI, трябва да сме сигурни, че използваните стойности не са в конфликт с тези на рамката. Списък на основните стойности на заявката, използвани от ядрото на Joomla:

  • формат
  • hidemainmenu (само администратор)
  • itemid
  • оформление
  • лимит
  • limitstart
  • no_html
  • опция
  • започнете
  • задача
  • tmpl
  • tp
  • вар
  • изглед

Когато извеждаме URI, трябва да използваме метода JRoute::_(). Използването му означава, че не е нужно да следим идентификатора на менюто. Ето как използваме този метод:

Библиотеки. Joomla! съдържа достатъчен брой полезни библиотеки, включително собствена - joomla. Функцията jimport() се използва за импортиране на библиотека. В примера ние импортираме библиотеката joomla.filesystem.file за работа с файловата система:

При импортиране е възможно да се включи не цялата библиотека, а само част от нея. Предишният пример импортира /libraries/joomla/filesystem/file.php Можем да импортираме всички файлове в директорията на файловата система:

Много класове в Joomla! - подкласовеJObject. Има доста полезни методи в базовия клас, включително стандартни инструменти за достъп и методи за обработка на грешки. JObject също емулира PHP5 конструктори, което прави възможно използването на __constructor() независимо от версията на PHP. Когато наследяват, класовете обикновено използват конструктора на родителския клас parent::__construct (). Почти всички класове и обекти на Joomla са извлечени от класа JObject. Методите get() и set() се използват за работа със свойства, използването на get() върху несъществуващо свойство ще върне стойността по подразбиране; когато използвате set() за свойство, което не съществува, то ще бъде създадено. И двата метода работят и с частни имоти. Грешките в даден обект се проследяват с помощта на getErrors(), getError() и setError(). Грешките се записват в свойството масив _errors. Грешките могат да бъдат потоци или обекти от класовете Exception и JExeption.

Обработка на заявката. При разработването на PHP обикновено се работи с глобалните масиви $_GET, $_POST, $_FILES, $_COOKIE, $_REQUEST. Вместо това Joomla използва статичния JRequest клас, за да намали кода и да подобри сигурността. Глобалните масиви са достъпни за работа и все още се използват в някои разширения. Най-често използваните методи са JRequest::setVar() и JRequest::gerVar(). За какво служат става ясно от имената им. В следващия пример получаваме стойността на id, ако не е зададена, тогава връщаме стойността по подразбиране 0 (set).

Методът JRequest::setVar() се използва за задаване на стойности и се използва по-рядко от преди. Най-често се използва за задаване на стойности по подразбиране. Например, можем да зададем задача по подразбиране за компонент, ако не е избран.

Има полезен фокусза да се уверите, че променливата е зададена, което включва използването на двата метода заедно. В примера, ако името не е зададено, ние му присвояваме стойността по подразбиране на „неизвестно“:

Има някои по-полезни методи от този клас, getInt (), getFloat (), getBool (), getWord (), getCmd (), getString (), използвайки които можем да сме сигурни, че ще върнем стойността от желания тип.

Фабричният шаблон. Преди да разгледаме фабриката на Joomla, нека да разгледаме шаблоните като цяло. Един от най-често използваните модели е итераторът, който описва изпълнението на една задача много пъти в цикъл. Joomla използва много модели, много от които са по-сложни от итератора. Фабричният шаблон е модел за създаване, използван за създаване и връщане на обекти. Използва се в случаите, когато според параметрите се създават обекти от различни класове, често подкласове на един и същи абстрактен клас. Joomla има статичен JFactory клас, който наследява фабричния модел. Този клас ни позволява лесно да създаваме и осъществяваме достъп до глобални обекти. Например:

Единичният модел се използва за създаванесамо на един обект от посочения клас. Конструкторът на такъв клас се прави защитен или частен и статичният метод се използва за създаване на класа. Много класове на Joomla използват модела псевдо-singleton за работа с обекти, по-специално има статичен метод getInstance() за това; в някои случаи JFactory се използва за работа с този метод. Класовете, които наследяват този метод, не винаги са единични класове. Има смисъл да използвате горното в йерархичен ред: JFactory метод, getInstance(), нормален конструктор (нов). В случаите, когато и JFactory, и класът иматметоди за създаване на обект, трябва да се предпочита JFactory. Ако класът предлага по-подходящ метод getInstance() от JFactory, разбира се, можете да го използвате.

Сесии. Joomla винаги започва сесия, независимо дали потребителят е влязъл или не. Глобален обект се използва вместо глобалния масив $_SESSION. Данните за сесията се съхраняват в пространство от имена (пространства от имена); пространството от имена по подразбиране е по подразбиране. В примера получаваме стойността default.example:

Ако искаме да получим данни от пространство на имена, различно от default, трябва да предоставим стойност по подразбиране. В примера получаваме стойността на myextension.example и задаваме стойността по подразбиране на нула:

Задаването на стойности е много подобно на получаването им. В примера ще зададем стойността на myextension.example на 1:

Сесиите се съхраняват като плоски файлове; така че има обект JRegistry вътре в сесията. Класът JRegistry използва по-сложен начин за съхраняване на данни в пространства от имена. За да използвате този елемент на сесията, има метод на приложение getUserState().

Прескачане на езиковата бариера с Joomla. Езикът по подразбиране е зададен в опциите, но може да бъде променен за конкретен потребител. Статичният клас JText се използва като стандартен механизъм за превод, включва три метода: _ (), sprintf (), printf (). Най-вероятно ще използвате метода _() най-често, той превежда низ. В примера ще преведем низа 'Monday', ако низът не може да бъде преведен, тогава се връща предадената стойност.

Методът JText::sprintf() е подобен на функцията PHP sprintf(). Предаваме му низ и произволен брой параметри, които да вмъкнем в преведения низ. Например, ако преводът за низа SAVED_ITEMS е Запазени %d елемента, методът ще върне Запазени 3елементи.

Методът JText::printf() ще върне дължината на низа за превод и всъщност самия преведен низ.