{
function getGreeting()
{
$db =& JFactory::getDBO();
$query = 'SELECT greeting FROM #__hello';
$db->setQuery( $query );
$greeting = $db->loadResult();
return $greeting;
}
}
Функция jimport используется, чтобы загрузить файлы из API Joomla, которые требуются для компонента. В данном случае загрузится файл /libraries/joomla/application/component/model.php. Точки используются как разделители директорий. Все файлы загружаются относительно директории библиотек - libraries.
В рассматриваемом случае подключается файл model.php из библиотеки системы. Это специальный файл, который описывает класс JModel, он необходим, потому что модель использует этот класс.
Для подключения к базе данных сайта используется статический класс JFactoryи метод getDBO. Данный метод уже содержит все параметры подключения, поэтому ничего дополнительного указывать не нужно.
$db->loadResult() выполняет запрос из соответствующей таблицы БД и возвращает полученное значение в заданную переменную, в данном случае это переменная $greeting.
2.5. Созданиевидакомпонента (файл /views/hello/view.html.php)
Задача этого файла разрабатываемого компонента очень проста – получить данные из модели компонента, которые будут отображаться на сайте и передать их в шаблон для конечного оформления вывода. Данные передаются в шаблон с помощью метода JView::assignRef() класса JView.
Листингфайла/views/hello/view.html.php:
<?php
// Защита от прямого обращения к скрипту
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
class HelloViewHello extends JView
{
function display($tpl = null)
{
$model =& $this->getModel();
$greeting = $model->getGreeting();
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}
}
2.6. Создание шаблона данных (файл /views/hello/tmpl/default.php)
Поскольку компонент очень прост и предназначен для вывода приветствия, в этом файле выводится значение переменной из Вида компонента.
Листингфайла/views/hello/tmpl/default.php:
<?php
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>{
2.7. Создание точки входа компонента для административного интерфейса (файл /admin/hello.php)
Основная среда административной части компонента очень похожа на среду лицевой части. Основной точкой входа также является файл hello.php. Этот файл идентичен файлу hello.php, который используется на сайте, кроме того, что имя загружаемого контроллера, должно быть изменено.Файл Контроллера по умолчанию также называется controller.php, и является идентичным контроллеру по умолчанию в лицевой части компонента, с тем отличием, что контроллер также должен иметь другое название.
Листингфайла /admin/hello.php:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
require_once( JPATH_COMPONENT.DS.'controller.php' );
if($controller = JRequest::getWord('controller')) {
$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
if (file_exists($path)) {
require_once $path;
} else {
$controller = '';
}
}
$classname = 'HellosController'.$controller;
$controller = new $classname( );
$controller->execute( JRequest::getVar( 'task' ) );
$controller->redirect();
2.8. Создание модели компонента для административного интерфейса (файл /admin/models/hellos.php)
Единственным действием модели Hellosявляется возможность получения списка приветствий из базы данных. Это действие выполняется с помощью метода getData().
Класс JModel имеет встроенный защищенный метод _getList(). Этот метод может использоваться для упрощения задачи получения списка записей из базы данных. Достаточно лишь просто выполнить запрос, и он возвратит список записей.
Позже может возникнуть необходимость использовать запрос в другом методе. Для этого используется защищенный метод _buildQuery(), который возвращает запрос, передаваемый методу _getList(). Это облегчает изменение запроса, поскольку он вызывается из одного и того же места.
Метод _buildQuery() просто возвращает запрос. Это выглядит примерно следующим образом:
function _buildQuery()
{
$query = ' SELECT * '
. ' FROM #__hello '
;
return $query;
}
Метод getData() получает запрос и извлекает записи из базы данных.
Листингфайла /admin/models/hellos.php:
<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.model' );
class HellosModelHellos extends JModel
{
function _buildQuery()
{
$query = ' SELECT * '
. ' FROM #__hello '
;
return $query;
}
function getData()
{
if (empty( $this->_data ))
{
$query = $this->_buildQuery();
$this->_data = $this->_getList( $query );
}
return $this->_data;
}
}
При реализации Вида компонента используется метод get() класса JView. Общий порядок работы Вида: первая строка берет данные из модели, вторая помещает данные в шаблон, третья отображает данные.
Таким образом листинг файла /admin/views/hellos/view.html.php имеет следующий вид:
<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.view' );
class HellosViewHellos extends JView
{
function display($tpl = null)
{
JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' );
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
$items =& $this->get( 'Data');
$this->assignRef( 'items', $items );
parent::display($tpl);
}
}
Как отмечалось выше, шаблон получает данные от Вида и осуществляет их вывод.
В разрабатываемом компоненте отобразим данные через цикл в виде простой таблицы:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="index.php" method="post" name="adminForm">
<div id="editcell">
<table class="adminlist">
<thead>
<tr>
<th width="5">
<?php echo JText::_( 'ID' ); ?>
</th>
<th>
<?php echo JText::_( 'Greeting' ); ?>
</th>
</tr>
</thead>
<?php
$k = 0;
for ($i=0, $n=count( $this->items ); $i < $n; $i++)
{
$row =& $this->items[$i];
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $row->id; ?>
</td>
<td>
<?php echo $row->greeting; ?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
</div>
<input type="hidden" name="option" value="com_hello" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="controller" value="hello" />
</form>
2.11. Создание установочного файла компонента (файл hello.xml)
Joomlaпозволяет устанавливать компоненты вручную, скопировав файлы по FTP протоколу, но лучшим вариантом является использование установочного файла для пакетной загрузки файлов и установки компонента.
Установочный XML файл может содержать разнообразную информацию и инструкции по установке:
· Детали о компоненте и авторе компонента;
· Список файлов, которые должны быть установлены;
· Внешние SQL файлы, которые содержат запросы базы данных, отдельно для установки и деинсталляции компонента.
Листинг установочного файла hello.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
<name>Hello</name>
<!-- Далее идут необязательные элементы-->
<creationDate>20.02.2009</creationDate>
<author>Имяавтора</author>
<authorEmail></authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>GNU/GPL</copyright>
<license>Информацияолицензии</license>
<!-- Номер версии сохраняется как строковое значение в таблице компонентов -->
<version>Версия компонента</version>
<!-- Описание необязательно, и по умолчанию равно имени компонента -->
<description>Описание компонента ...</description>
<!--Копирование файлов в лицевую часть сайта -->
<files folder="site">
<filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/index.html</filename>
<filename>views/hello/tmpl/default.php</filename>
</files>
<administration>
<!--меню в административном интерфейсе -->
<menu>Hello World!</menu>
<!-- копирование файлов в административную часть сайта -->
<files folder="admin">
<filename>index.html</filename>
<filename>admin.hello.php</filename>
</files>
</administration>
</install>
Как видно из вышеприведенного листинга, в архиве с компонентом должно быть две директории: site и admin.
Внимательно изучив тенденции развития современного явления, более известного как Интернет, можно прийти к выводу, что информационные технологий и всемирная паутина, в частности, не стоят на месте и развиваются с каждым годом все больше и больше.
Остались в прошлом времена, когда для разработки крупного интернет-сайта необходимо было писать вручную сотни или тысячи страниц HTML. В современном мире достаточно выбрать подходящую систему управления содержимым и за несколько минут настроить интернет-портал, на разработку которого во времена начального развития Интернета потребовались бы месяцы.
В первой главе курсовой работе были изучены основные средства, используемые для разработки интернет-сайта, в частности, язык программирования PHP, СУБД MYSQL, веб-сервер компании Microsoft– IIS, а также наибольшее внимание уделено системе управления содержимым JoomlaCMS.
Во второй части курсовой работы пошагово описаны и разобраны основы разработки компонентов для этой системы, как наиболее расширяемой части сайта JoomlaCMS на примере простейшего компонента «Hello», выводящего приветствие посетителю сайта из базы данных проекта.