3 новых полезных класса в Joomla 2.5
В платформе Joomla 2.5 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информации о клиенте, особенно полезен для мобильных устройств) и JImage (для работы с изображениями).
JGrid
Данный класс был создан для генерации HTML таблиц. Довольная полезный класс для разработчиков, раньше им приходилось придумывать свои приемы для этого. Для полной информации о классе и его методах можно посмотреть файл - libraries/joomla/html/grid.php
Пример использования данного класса для генерации простой HTML таблицы:
<?php
jimport('joomla.html.grid');
//$options - ассоциативный массив для атрибутов тега <table>
$table = new JGrid($options = array());
//добавляем новые элементы в заголовок таблицы
//$options - ассоциативный массив для атрибутов тега <tr>
//1 - заголовок, любое другое значение - футер, если значение не установлено, то просто будут теги <tr><td>...
$table->addRow($options = array(), 1);
for ($i = 1; $i < 4; $i++) {
$name = 'Нeader'.$i;
//добавляем колонку с установленным именем
$table->addColumn($name);
//добавляем контент в колонку с указанным именем
//$option - ассоциативный массив для атрибутов тега <td>
$table->setRowCell($name, 'Content for ' .$name, $option = array());
}
//добавляем новые элементы в тело таблицы
$table->addRow($options = array());
for ($i = 1; $i < 4; $i++) {
$name = 'Сontent'.$i;
$table->addColumn($name);
$table->setRowCell($name, 'Content for ' .$name);
}
//добавляем новые элементы в footer таблицы
$table->addRow($options = array(), 2);
for ($i = 1; $i < 4; $i++) {
$name = 'Footer'.$i;
$table->addColumn($name);
$table->setRowCell($name, 'Content for ' .$name);
}
//вывод полученной таблицы
echo $table->toString();
?>
JWebClient
Данный класс предназначен для определения инофрмации о клиенте (пользователе), такой как ОС, браузер, язык и другой. Здесь стоит отметить поддержку мобильных устройств iPhones, iPads, Androids и других систем. Это позволяет разработчикам на основе этих данных выполнять те или иные действия. Данный класс описан в файле - libraries/joomla/application/web/webclient.php
Пример:
<?php
jimport('joomla.application.web.webclient');
//$userAgent - опционально для разбора строки user-agent
//$acceptEncoding - опционально для разбора строки encoding
//$acceptLanguage - опционально для разбора строки language
$client = new JWebClient($userAgent = null, $acceptEncoding = null, $acceptLanguage = null);
var_dump($client);
?>
Выдаст результат:
object(JWebClient)[613]
protected 'platform' => null
protected 'mobile' => boolean false
protected 'engine' => null
protected 'browser' => null
protected 'browserVersion' => null
protected 'languages' =>
array
empty
protected 'encodings' =>
array
empty
protected 'userAgent' => string 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1' (length=74)
protected 'acceptEncoding' => string 'gzip, deflate' (length=13)
protected 'acceptLanguage' => string 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3' (length=35)
protected 'detection' =>
array
empty
Для получения свойста класса можно использовать метод __get($name) данного класса. Например, для того что бы узнать, зашел ли пользователь с мобильного устройства можно использовать:
<?php
jimport('joomla.application.web.webclient');
$client = new JWebClient();
$client->__get('mobile');
?>
JImage
Данный класс предназначен для работы с изображениями. С помощью данного класса можно получить информацию о изображении, а также делать различные манипуляции с ним (изменять размеры, устанавливать различные фильтры и прочее). Данный класс описан в файле - libraries/joomla/image/image.php, различные фильтры для изображение находятся в директории libraries/joomla/image/filters/
В качестве простого примера можно взять стандартный баннер "open source matters" (файл изображения - /images/banners/osmbanner1.png), уменшим его размеры в 2 раза и сохраним в ту же директорию в файл "osmbanner1_thumb.png":
<?php
jimport('joomla.image.image')
//создаем новый объект JImage
$image = new JImage();
$path = JPATH_BASE.DS.'images'.DS.'banners'.DS;
//загружаем исходный файл
$image->loadFile($path.'osmbanner1.png');
//уменьшаем размеры в 2 раза
$new_width = round($image->getWidth() / 2);
$new_height = round($image->getHeight() / 2);
//задаем размеры для нового изображения.
//параметр "true" означает, что данный метод вернет новый объект JImage уже с измененным изображением
$newimg = $image->resize($new_width, $new_height, true);
//сохраняем изображение в новый файл
$newimg->toFile($path.'osmbanner1_thumb.png', IMAGETYPE_PNG);
?>
