Краткое руководство по классам

Joomla! запускается на php 4 и php5. Это влияет на то, как мы описываем классы и используем объекты в Joomla!. В Joomla! решено продолжить использовать синтаксис PHP 4 по соображениям обратной совместимости, так как многие веб-серверы по прежнему используют php4. Как сторонние разработчики, мы должны следовать их примеру и всегда делать наши расширения совместимыми с PHP 4 и PHP 5, несмотря на то, что могут появитсья некоторые ограничения.

Есть некоторые важные вещи, которые мы должны знать, прежде чем начнем создание и использование классов. Сначала запомним важные пункты:
- Имена классов должны начинаться с прописных буквы.
- Все элементы должны придерживаться стандарта camelCase (стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с большой буквы).
- Имена методов должны начинаться с буквы в нижнем регистре.
- Приватные элементы должны начинаться с подчеркивания. Только php5 имеет поддержку модификаторов доступа, мы в этих целях используем особые именования для указания приватных элементов. Методы и свойства, которые имеют префикс подчеркивания - приватные элементы.

Мы часто передаем и возвращаем объекты и массивы по ссылке. Заметьте, что в PHP 5 объекты
всегда передается по ссылке. Методы, функции и параметры, которые возвращаются и передаются по ссылке имеют префикс в виде амперсанда Когда мы используем метод или функцию, которая возвращает ссылку, мы должны использовать &= , как демонстрирует следующий пример:

function &go()
{
$instance = new stdClass();
return $instance;
}
$reference =& go();

Когда мы передаем объекты мы должны иметь в виду, что PHP разных версий обрабатывают объекты разному.

Наследование от JObject

В Joomla! нам часто приходится сталкиваться с классом JObject. Многие из классов в Joomla! являются подклассами JObject. Этот базовый класс предоставляет нам некоторые полезные общие методы, включая стандартный модификаторы доступа и механизм обработки ошибок.

Чтобы стимулировать методологию PHP5, JObject эмулирует PHP5 позволяя нам использовать метод конструктора __constructor () в подклассах независимо от того, какая версия PHP используется.
Когда мы используем наш дочерний класс, мы должны, как правило, обьявить конструктор родителя класса. Это гарантирует, что конструктор класса родителя выполнится.

 
/**
* Some Class which extends JObject
*/

class SomeClass extends JObject
{
/**
* Object name
* @var string
*/

var $name;
/**
* PHP 5 style Constructor
*
* @access protected
* @param string name
*/

function __construct($name)
{
$this->name = $name;
parent::__construct();
}
}
 

Почти все Joomla! объекты и классы вытекают из базового класса JObject. Этот класс предоставляет несколько полезных методов, которые могут использовать все классы. Метод getPublicProperties() возвращает массив общедоступных свойств объекта. Это определяется на этапе выполнения и используются не свойства класса, а свойства объекта.
Методы get() и set() используются, чтобы получить и установить свойства объекта. Если мы используем get(), с несуществующего свойства, то будет возвращено значение по-умолчанию. Если мы используем метод set() для несуществующего свойства, то свойство будет создано. Оба эти методы могут быть использованы с частными свойствами.
Мы можем отслеживать ошибки, которые происходят в объекте, используя методы getErrors(), getError() и setError(). Ошибки будут зафиксированы в свойстве _errors в виде массива.

Работа с запросами

Вообще, когда мы разрабатываем PHP скрипты, мы активно работаем с массивами: $ _GET, $ _POST, $ _FILES, $ _COOKIE и $ _REQUEST. В Joomla! Вместо прямого доступа к ним мы используем статический класс JRequest. Используется это потому, что позволяет нам повысить бесопасность кода.
В основном мы используем два метода это JRequest:: setVar () и JRequest::getVar (). Первый для установки переменной, второй для получения переменной. В этот пример, мы получим значение id, и если id не установлен, мы вернемся значения по умолчанию (0).

$id = JRequest::getVar('id', 0);

JRequest:: setVar () метод используется для установки значений в запросе хэшей. По сравнению с JRequest:: getVar(), этот метод используется довольно редко. Наиболее часто он используется для установки значений по умолчанию. Например, нам нужно установить в компоненте задачу по умолчанию, если она еще не задана:

JRequest::setVar('task', 'someDefaultTask');

Полезный трюк: чтобы гарантировать, что переменная установлена, нужно использовать оба метода совместно. В данном примере, если name не установлено, мы поставили его значение по умолчанию - "unknown".

JRequest::setVar('name', JRequest::getVar('name', 'unknown'));

Вот некоторые другие удобные методы JRequest - это getInt(), getFloat(), getBool(), getWord(), getCmd(), и getString(). Если мы будем использовать эти методы, мы заранее знаем переменную какого типа мы получим.

Класс JFACTORY

Прежде чем перейти к Joomla! классу Factory, нам необходимо немного ознакомиться с изменениями, которые происходят в шаблонах кода.
Класс Factory используется для построения и возвращения объектов. Этот пример показывает, каким образом мы можем доступ некоторых глобальных объектов с использованием JFactory.

$db =& JFactory::getDBO();
$user =& JFactory::getUser();
$document =& JFactory::getDocument();

Сессии

Сессии используются в веб-приложениях, как средства, обеспечивающего временное хранение объекта в течение всего визита клиента. В PHP для этого мы использовали глобальной хэш $ _SESSION. Joomla! всегда дает нам возможность обращение к сессии, независимо от того, вошел ли клиент в систему Joomla! как зарегенный или нет. Вместо хэша $ _SESSION, мы используем глобальную сессию в виде объекта. Данные хранятся в определенном пространстве имен. По умолчанию используется пространство имен default. В этом примере мы извлечем значение default.example:

$session =& JFactory::getSession();
$value = $session->get('example');

Если мы хотим использовать определенное пространство имен, то мы должны также указать дополнительное значение. В этом примере мы извлечем значение myextension. По-умолчанию установим значение null:

$session =& JFactory::getSession();
$value = $session->get('example', null, 'myextension');

Установка значений очень похож на получение значений. В этом примере мы установили значение myextension.example -1:

$session =& JFactory::getSession();
$session->set('example', 1, 'myextension');


Краткое руководство по классам - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

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

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

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

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...