Создание Model-View-Controller компонента часть 3 - Использование базы данных

Введение

В первых двух частях мы показали, как можно сделать простой компонент на основе схемы MVC. У нас был простое представление, которое получало данные из модели (она была создана во второй части). В этой части мы будем работать только с моделью. Вместо данных жестко прописанных в модели, мы будем получать их из таблицы базы данных с помощью класса JDatabase.

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

Сейчас у нашей модели есть только один метод: getGreeting(). Это очень простой пример – все что он делает это возвращает жестко прописанный код.
Чтобы сделать наш пример более интересным, мы будем загружать приветствие из базы данных. Позже мы покажем, как создать SQL файл и добавить код в xml файл, чтобы при установке компонента была создана и заполнена нужная таблица. Пока мы просто изменим функцию, возвращающую приветствие так чтобы она получала его из базы данных.

Сначала надо получить ссылку на базe. Начиная с Joomla, использование базы данных является обычной процедурой. Соединение с базой уже существует, поэтому нет необходимости создавать свое. Ссылка на существующую базу может быть получена следующим образом:

$db =& JFactory::getDBO();

Jfactory – это статический класс, который используется для получения ссылок на многие объект системы. Более подробную информацию об этом классе можно получить здесь. Название метода (getDBO) происходит от get DataBase Object чтобы его было легко запомнить. Чтобы получить запись из базы данных нам надо сделать два шага:
1. сохранить наш запрос в объекте базы данных;
2. загрузить результат

Наша новая функция getGreeting() будет выглядеть так:

function getGreeting()

$db =& JFactory::getDBO();

$query = "SELECT greeting FROM #__hello";
$db->setQuery( $query );
$greeting = $db->loadResult();

return $greeting;

hello это имя таблицы, которую мы создадим позже. greeting это название поля, хранящего наши приветствия. Если вы не знакомы с SQL, то будет полезно почитать какие-нибудь руководства или уроки по этой теме.
Метод $db->loadResult() сохранит запрос и вернет из базы данных первую колонку и первую строку в ней. Для получения дополнительной информации по объекту JDatabase обратитесь к этой статье.

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

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

Вот наши запросы:

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=0 DEFAULT CHARSET=utf8;

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

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

В наше таблице есть два поля. Первое поле это id, он является первичным ключом. Первичный ключ таблицы – это поле, которое используется как уникальный идентификатор записи. Он также часто используется для поиска строк в базе данных. Другое поле – greeting. В нем хранятся приветствия, которые будет возвращать наш запрос.

Тексты наших запросов будут храниться в файле install. sql

Создание файла uninstall. sql

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

DROP TABLE IF EXISTS `#__hello`;


Обновление инсталляционного файла

Нам нужно внести некоторые изменения в инсталляционный файл. Во-первых, надо добавить два новых файла в список. Файл install. sql должен перейти в папку admin. Во-вторых, мы должны указать инсталлеру выполнить запросы в наших файлах при инсталляции и деинсталляции.
Обновленный код выглядит следующим образом:

<?xml version="1. 0" encoding="utf-8"?>
<install type="component" version="1. 5. 0">
<name>Hello</name>
<!-- The following elements are optional and free of formatting conttraints -->
<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>
<!-- The version string is recorded in the components table -->
<version>3. 01</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the component . . . </description>

<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->

<files folder="site">
<filename>controller. php</filename>
<filename>hello. php</filename>
<filename>index. html</filename>
<filename>models/hello. php</filename>
<filename>models/index. html</filename>
<filename>views/index. html</filename>
<filename>views/hello/index. html</filename>
<filename>views/hello/view. html. php</filename>
<filename>views/hello/tmpl/default. php</filename>
<filename>views/hello/tmpl/index. html</filename>
</files>
<install>
<!-- sql>

<file charset="utf8" driver="mysql">install. sql</file>
</sql -->
<queries>
<query>
DROP TABLE IF EXISTS `#__hello`;
</query>
<query>
CREATE TABLE `#__hello` (
`id` int(11) NOT NULL auto_increment,
`greeting` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0;
</query>
<query>
INSERT INTO `#__hello` (`greeting`) VALUES ("Hello, World!"),
("Bonjour, Monde!"),
("Ciao, Mondo!");
</query>
</queries>
</install>
<uninstall>
<!-- sql>

<file charset="utf8" driver="mysql">uninstall. sql</file>
</sql -->
<queries>
<query>
DROP TABLE IF EXISTS `#__hello`;
</query>
</queries>
</uninstall>


<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>

<!-- Administration Main File Copy Section -->
<files folder="admin">
<filename>hello. php</filename>
<filename>index. html</filename>
<filename>install. sql</filename>
<filename>uninstall. sql</filename>
</files>

</administration>
</install>

Как вы могли заметить, у тега <file>, который находиться в секциях <install><uninstall> есть два атрибута: charset и driver. Charset это кодировка файла. Обычно используется utf-8. Но если вы хотите создать инсталляционные файлы в другой кодировке (например для старых версий MySQl) вы должны пропустить этот атрибут.
Атрибут driver указывает для какой базы данных написаны запросы. В настоящее время в качестве базы данных может быть использована только MySql, но в будущем предполагается создать драйвера и для других баз данных.

Заключение

Теперь наш компонент, может работать не только с классами MVC framework, но и с классами JDatabase. Теперь вы можете создавать компоненты, которые взаимодействуют с базой данных и можете использовать Joomla инсталлер для создания и заполнения таблиц базы данных.

Статья здесь и здесь

Автор статьи: неизвестный | Дата публикации: 15:39 14.12.2016 Restlater.Ru




Отзывы и комментарии
Ваше имя (псевдоним):
Проверка на спам:

Введите символы с картинки:



Вкусные рецепты: Пирог с рыбными консервами, пирог с капустой, Салат из печени "Хочу ещё"

Вкусные рецепты: Пирог с рыбными консервами, ...


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


Автобусные туры по Европе – увидеть все своими глазами!

Автобусные туры по Европе – увидеть все своим...


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


«Агирре, гнев божий». Где ты, загадочная страна Эльдорадо?

«Агирре, гнев божий». Где ты, загадочная стра...


Страну Эльдорадо придумали не зря. Хотя и поздновато. Эту мульку про «реки золота» и «пещеры, полные драгоценных камней» нужно было выполнить в виде табличек со стрелками...


Как достичь счастья в семье

Как достичь счастья в семье


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


Котельное оборудование

Котельное оборудование


Как правильно выбирать котельное оборудование? Есть несколько важных критериев выбора котельного оборудования, на которые стоит особо обратить внимание: - мощность котла; - вид топлива; - нужно ли Вам...


Что должен прочитать каждый живущий в капиталистическом обществе?

Что должен прочитать каждый живущий в капитал...


«Подняв знак доллара как свой символ, символ свободной торговли и свободных умов, мы начинаем свое движение, чтобы вырвать свою отчизну из рук немощных дикарей, которым так и остались неведомы е...


Читаемые

Минитрактор

Минитрактор представляет собой машину на четырех клесах с режущей наружностью в формате 2-ух или четырехлопастного ножа. Так же, его конструкцией установлены достаточно широкие шины с неглубокими прот...

Спам-разводы!

Какой только спам не приходит . И ведь вполне мыслящие люди периодически попадаются на такие дешевые разводки: вот этот текст, например:Уважаемый(я) пользователь icq, qip, miranda, icq_rambler, Mail. ...

Бумажные пакеты

Удовольствия - вот, без чего нам тяжело существовать. По-возможности – побольше и получше. Несомненно приобретения и покупки, - вот одни из самых любимых наших удовольствий. А покупки нуждаются в дост...

Мода на загар: красота, здоровье, статус, политика

О чем может рассказать загар? Наверняка о том, что его «носитель» ведет активный образ жизни, либо трудится в полях под открытым небом, либо путешествует, загорая на море, в горах или на п...

Яхты и катера

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

Как отчитаться бизнесмену за свою деятельность в н

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

Нельзя упускать из виду вопрос грязезащиты

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

Общение на форуме

Форум - как много в этом слове. Но для каждого пользователя оно обозначает что-то свое. Например, для одного - это место где можно найти работу. Другой просто хочет общения. Третьему пользователю необ...

Ольга Аросева – не только пани Моника. Что мы знае

21 декабря замечательной актрисе исполнилось 85 лет. Эта статья — дань уважения её таланту, искренности и человеческим качествам. Очень жаль, что актеры часто становятся заложниками об...

5 мест, куда можно сбежать от осени

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

О информационном портале:

Наш интернет-портал является ресурсом, который включает в себя обширный ассортимент познавательных и занимательных статей. Каждый посетитель отыщет для себя что-нибудь нужное. Адаптированный дизайн дает возможность вам максимально быстро находить подходящую информацию. Самые разнообразные тематические статьи дают возможность вам совершенствоваться в той или иной сфере. Быть более начитанным и грамотным. Современный дизайн сайта позволяет просматривать статьи на всех электронных устройствах. Теперь найти актуальную информацию стало совершенно легко.

Мы собрали для вас познавательные и увлекательные статьи. На нашем сайте вы найдете ответы на необходимые для вас вопросы. Упрощенная система поиска позволяет вам мгновенно отыскать нужную информацию. Адаптированный дизайн позволяет вам просматривать информацию на абсолютно любых электронных устройствах. Отныне, поиск подходящей информации будет занимать у вас секунды.