Креатив
Верный ход
Качество
Надёжность

Сессии используются в веб-приложениях в качестве средства обеспечения временного хранилища на время посещения клиента. В PHP мы получаем доступ к этим данным, используя глобальную переменную $_SESSION.

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

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

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

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

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

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

Сессии хранят относительно плоские структуры данных; из-за этого в сессии есть объект JRegistry. Класс JRegistry использует намного более сложный способ хранения данных в пространствах имен. Для того чтобы использовать эту область сессии, мы используем метод приложения getUserState (). Более полное объяснение сессий дано в Главе 7.

Вернуться к оглавлению

Существует много API веб-интерфейсов, которые можно использовать в сочетании с Joomla!. Это список из нескольких наиболее распространенных API веб-интерфейсов, что мы, вероятно, используем:

  • eBay
  • Google (Календарь, Checkout, Карты, Поиск)
  • Microsoft (Live, MSN, XBOX)
  • Yahoo! (Почта, Карты, Поиск)

API и сервисы, которые мы используем определяют, каким образом мы обращаемся с API. Мы взглянем на API поиска Yahoo!. Прежде, чем мы начнем, мы должны обсудить ID приложение Yahoo!.

Yahoo! использует уникальный идентификатор (ID) для определения приложений, которые используют его API. Если Вы намереваетесь использовать Yahoo! API, важно, чтобы Вы зарегистрировали свое приложение прежде, чем Вы начнете разработку. Это гарантирует, что вы сможете получить желаемый ID.

Большинство API Web-интерфейсов требует от нас использовать некоторое описание ID. Это позволяет владельцам API анализировать использование своих услуг.

В целях этого примера мы будем использовать идентификатор приложения YahooDemo — это ID по умолчанию, используемый при демонстрации использования API Поиска Yahoo.

Первое, что мы должны сделать, чтобы создать наш Поиск Yahoo! является создание запроса, который мы будем использовать для получения результатов. В этом примере предполагается, что мы использовали окно поиска с названием yahooSearch:

// get the search terms
$query = rawurlencode(JRequest::getString('yahooSearch', 'Joomla!', 'DEFAULT', JREQUEST_ALLOWRAW));

Мы используем метод PHP rawurlencode(), потому что $query будет использоваться в URI. Маску JREQUEST_ALLOWRAW используется, чтобы не потерять данные из запроса. Полное объяснение масок JRequest дано в Главе 11.

Мы делаем предположение, что, если никаким критериям поиска не обеспечивают, мы хотим искать Joomla!. В действительности мы, вероятно, переадресовали бы пользователя.

Далее нам нужно создать запрос URI, из которого мы получим результаты поиска:

// Prepare the request URI
$request = 'http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query='.$query.'&results=4';

Теперь, когда у нас есть URI, мы можем продолжить взаимодействовать с API Yahoo!. Мы используем функцию PHP file_get_contents(), чтобы выполнить запрос и получить результаты:

// Perform search
if (!$xml = file_get_contents($request))
{
// handle failed search request
}

Результаты запроса, в случае успеха, возвращается в виде XML-документа. Как мы интерпретируем результаты зависит от нас. Мы объяснили, как пользоваться анализатором JSimpleXML ранее в этой главе. Мы можем использовать его для интерпретации результатов Yahoo!:

$parser =& JFactory::getXMLParser('Simple');
$parser->loadString($xml);
$results =& $parser->document->Result;

Теперь, когда у нас есть проанализированный XML-документ, мы можем обработать результаты поиска. Переменная $results становится массивом узлов результата; эти узлы используются Yahoo!, чтобы инкапсулировать каждый результат.
Мы будем продолжать простую обработку и вывод результатов непосредственно на экран, как упорядоченный список. Этот пример использует подузлы результата ClickUrl, Title, Summary, and DisplayUrl. В каждом случае мы всегда получаем доступ к нулевому элементу; мы можем сделать это, потому что мы знаем, что только один узел каждого из этих типов будет когда-либо присутствовать в узле результата:

echo '<ol>';
for ($i = 0, $c = count($results); $i < $c; $i ++)
{
$result =& $results[$i];
echo '<li>';
echo '<strong><a href="'.$result->ClickUrl[0]->data().'" target="_blank">'.$result->Title[0]->data().'</a></strong><br />';
echo $result->Summary[0]->data().'<br />';
echo $result->DisplayUrl[0]->data();
echo '</li>';
}
echo '</ol>';

Если мы добавляем некоторый CSS к нашему документу, мы можем создать очень настраиваемое средство для поиска, которое даже не должен знать пользователь, основанное на Yahoo! API:

Этот пример показал, как легко можно использовать веб-сервисы. Несмотря на то, что этот пример особенно не усовершенствован, он показывает, как быстро мы можем создать очень мощные инструменты для Joomla!.

Вернуться к оглавлению

Обычно, когда мы разрабатываем PHP скрипты, мы работаем активно с хешами запросов: $ _GET, $ _POST, $ _FILES, $ _COOKIE, и $ _REQUEST. В Joomla!, вместо того, чтобы непосредственно использовать их, мы используем статический класс JRequest. Мы используем его, потому что это позволяет нам обрабатывать ввод одновременно получая его, это уменьшает требуемый объем кода и помогает улучшить безопасность.

Запросы хэшей $ _GET, $ _POST, $ _FILES, $ _COOKIE и $ _REQUEST по-прежнему доступны, а в случаях, когда мы переносим приложение, нам не обязательно заменять эти хэши.

Два метода, которые мы используем наиболее часто - это JRequest::setVar() и JRequest::getVar(). Как ясно из названия, один принимает запросы (get), другой передаёт их (set). В этом примере мы получаем значение id; если идентификатор не установлен, возвращается значение по умолчанию, 0 (значение по умолчанию не является обязательным).

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

Метод JRequest::setVar() используется для установки значений в запрос. По сравнению с JRequest::getVar(), этот метод используется относительно редко. Чаще всего он используется для установки значения по умолчанию. Например, мы бы могли установить значение по умолчанию для task в компоненте, если оно ещё не выбрано:

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

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

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

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

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

Мы можем достичь гораздо большего с помощью этих методов, включая предварительную обработку данных.

Вернуться к оглавлению

Прежде чем перейти в проектирование Joomla!, мы должны быстро просмотреть образцы кода. Так называемые Шаблоны Разработки, обычно часто встречающие в коде, были хорошо изучены.

Одной из наиболее распространённой модели, с которой мы уже знакомы, является iterator. Эта модель описывает как мы выполняем одну задачу несколько раз с помощью цикла. Joomla! использует множество шаблонов проектирования, многие из которых являются гораздо более сложными, чем iterator.

Для полного описания шаблонов проектирования, вы должны рассмотреть книгу Design Patterns: Elements of Reusable Object-Oriented Software (Шаблоны проектирования: Приемы объектно-ориентированного программного обеспечения). Эта книга, впервые опубликована в 1994 году и написана Gang of Four (Бригада Четырёх), считается главным проводником и ссылкой на шаблоны проектирования программного обеспечения.

Шаблон проектирования - это созданный образец, используемый для построения и возврата объекта.

Вернуться к оглавлению

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

Для поощрения PHP 5 методологии, JObject эмулирует PHP 5 конструктор, позволяя нам использовать метод конструктора, __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. Ошибки могут быть строками или JException или Exception объектами. Объекты JException создаются, когда мы ставим ошибки; это объяснено подробно в Главе 11.

Полное описание класса JObject доступно в Приложении.

Вернуться к оглавлению

Войти на сайт

Запомнить меня

Новости

  • Перевод Mastering Joomla! 1.5

    14.03.2013

    Продолжается перевод книги "Mastering Joomla! 1.5". На данный момент полностью переведено 2 главы. Полностью перевод книги...

    Подробнее...

  • Модернизация сайта

    28.05.2012

    Уважаемые посетители! Мы полностью модернизировали наш сайт и надеемся что сейчас им станет...

    Подробнее...