RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Создание MVC компонента Joomla 1.5 - Шаг 3, База данных

В первых двух уроках научились строить простой Model-View-Controller компонент. В итоге в компоненте есть одно Представление (View), которое получает данные от Модели, созданной в 2-ом уроке. Сейчас, будем работать с моделью, получая данные из базы данных.

Будет продемонстрировано, как использовать JDatabase класс для работы с базой данных.

Получение данных из базы

Наша модель в настоящее время имеет один метод: getGreeting(). Этот метод очень прост — все, что эта функция делает — возвращение жестко-закодированное (hardcode) приветствие.

Для работы с базой данных, загрузим приветствие в таблицу базы данных. При установке компонента необходимо создание таблицы с записью текстового поля с приветствием. Как создать SQL файл и какие строки добавить в hello.xml, рассмотрим позже.

Для начала заменим код в Модели для получения приветствия с таблицы базы данных.

В первую очередь нужно подключится к базе данных. В Joomla 1.5 все параметры для подключения уже есть и для того чтобы создать свое используем следующее:

$db = & JFactory::getDBO();

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

Чтобы получить доступ к глобальному объекту базы данных используем метод getDBO().

Важное замечание: Joomla подключается к базе данных самостоятельно и один раз во время запуска фреймворка, при использовании getDBO(), мы просто получим ссылку на объект базы данных.

Сохраняем запрос для получения объекта базы данных. Для этого вносим изменения в функции Модели getGreeting(), находящей в файле:

/components/com_hello/model/models/hello.php
function getGreeting()
{
   $db = JFactory::getDBO();
   $query = 'SELECT greeting FROM #__hello';
   $db->setQuery( $query );
   $greeting = $db->loadResult();
   return $greeting;
}

$db->loadResult() метод выполнит запрос к базе данных, который был установлен строкой выше через setQuery() и вернет полученный объект.

Создаем инсталляционный SQL файл

Joomla инсталлятор имеет встроенную поддержку выполнения запросов SQL в процессе установки компонента. Эти запросы должны быть сохранены в стандартном install.sql файле.

Для инсталляционного файла SQL используем три запроса:

  • Удаление таблицы на случай, если с таким именем уже существует.
  • Создание таблицы и текстового поля для хранение строки приветствия.
  • Загрузка строки приветствия в поле таблицы.

Ниже все три запроса для инсталляционного файла:

DROP TABLE IF EXISTS `#__hello`;
CREATE TABLE `#__hello` (
  `id` int(11) NOT NULL auto_increment,
  `greeting` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;

INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'),
('Bonjour, Monde!'),
('Ciao, Mondo!');

Joomla сама заменит "#__ " на префикс таблицы текущей базы данных MySQL, исходя из текущих настроек. В первом запросе уничтожается таблица #__hello, это необходима для того, чтобы не было накладок при повторных установках одного и тоже компонента.

По второму запросу создается два поля в таблице.

  • id — которое является ключом, который гарантирует уникальность записи.
  • greeting - строка длиной 25 символов, в которой будет хранится приветствие.

Сохраняем эти запросы в файле install.sql и переносим его в дистрибутив компонента:

com_hello/admin/install.sql.

Создаем деинсталляционный uninstall.sql файл

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

DROP TABLE IF EXISTS `#__hello`;

Сохраняем этот запрос в файле uninstall.sql и переносим его в дистрибутив компонента:

com_hello/admin/uninstall.sql.

Заносим дополнение в инсталяционный файл hello.xml

Прежде чем указывать какие файлы использовать при установке и деинсталляции для запуска SQL запросов, нужно указать куда копировать эти файлы. Оба файла должны находится в корне папки административной части компонента. Далее, указываем инсталлятору какие файлы использовать для SQL запроса при установке и деинсталляции компонента.

Новый код для инсталляционного 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>2007 02 22</creationDate>
    <author>John Doe</author>
    <authorEmail>john.doe@example.org</authorEmail>
    <authorUrl>http://www.example.org</authorUrl>
    <copyright>Copyright Info</copyright>
    <license>License Info</license>
    <version>Component Version String</version>
    <description>Description of the component ...</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>
        <filename>models/hello.php</filename>
    </files>
    
    <install>
        <sql>
            <file charset="utf8" driver="mysql">install.sql</file>
        </sql>
    </install>
    <uninstall>
        <sql>
            <file charset="utf8" driver="mysql">uninstall.sql</file>
        </sql>
    </uninstall>
    
    <administration>
        <menu>Hello World!</menu>
        <files folder="admin">
            <filename>install.sql</filename>
            <filename>uninstall.sql</filename>
        </files> 
    </administration>
</install>

При установке и деинсталляции может быть два значения у атрибута charset, первый — «utf8» и если версия MySQL сервера не поддерживает кодировку utf8 указывается атрибут «non-utf8»

Атрибут driver пока может иметь только одно значение — «mysql». В дальнейшем планируется расширить возможности Joomla 1.5 для работы с разными базами данных.

Теперь компонент «Hello» может работать не только с MVC framework классами, но и с классами запросов JDatabase. Вы уже можете создавать компоненты работающее по технологии MVC с использованием таблиц базы данных, указывая их параметры инсталлятору

Прикрепленные файлы:
com_hello_3.zip
Объем: 5.72 KB; Тип: zip; Загрузок: 1182; в сутки: ~1; Обновлен: 14:19, 24 Июля 2011;
Смотрите также:
Комментарии (5) Добавить комментарий
  • Андрей
    Андрей
    07 Апреля 2011, 21:36
     ↑  -1  ↓     ответ

    Здравствуйте! Я столкнулся с такой проблемой. Есть таблица с полями и я добавил туда ещё несколько полей. Некоторые добавил уже давненько, а некоторые недавно. В админке, в каталоге tables компонента прописал названия новых полей. Делаю запрос на доставание всех полей и у меня те, которые добавил недавно, не достаются. В чём может быть проблема? Joomla кэширует метаданные таблиц?

    • smet.denis
      smet.denis (админ)
      09 Апреля 2011, 00:27
       ↑  0  ↓     ответ

      А можно как-то подробнее про структуру таблиц, полей и сам запрос ?

      • Андрей
        Андрей
        09 Апреля 2011, 14:42
         ↑  0  ↓     ответ

        Спасибо, но я уже разобрался. Неправильно подключал внешний файл.

  • astepochkin
    astepochkin
    04 Июня 2011, 21:09
     ↑  0  ↓     ответ

    Пропущено: в xml для инстала и удаления необходио тоже подключить эти файлы:

    <administration>

    <files folder="admin">

    ...

    <filename>install.sql</filename>

    <filename>uninstall.sql</filename>

    </files>

    </administration>

  • Александра
    Александра
    15 Декабря 2011, 14:37
     ↑  -1  ↓     ответ

    Здравствуйте! у меня проблема, загрузила на сайт joomla 1.5.24 зашла на сайт начала автоматическую установку джумлы ввела базу данных а мне всё равно выдаёт ошибку : Не могу подключиться к базе данных. Номер ошибки: Unable to connect to the database:Could not connect to MySQL. если иная причина почему это происходит, введённые данные все правильные. Заранее благодарю!

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.