Работа с базой данных, 3-я серия фильма про Joostina CMS

База данных - один из ключевых моментов в Joostina. В базе данных хранится большинство текстового содержимого, например новости, статьи, комментарии, описание и дата создания фото - всё это в базе. Joostina 1.3 работает только с одним типом базы данных - MySQL. При этом MySQL не должен быть младше 5.0 версии.
Во второй серии вы уже узнали что Joostina прекрасно работает с базой данных через объекты - где каждая таблица и записи в ней представлены в виде объектов, и пользователь может по своему вкусу манипулировать их моделями. Более подробно и тонко про модели рассмотрим в следующих сериях, сегодняшняя наша тема - непосредственная работа с базой данных. Напрямую, без использования моделей.

Предлагаю сразу делать всё вместе с развитием сюжета, для этого потребуется пустой компонент из первой серии , весь код прописывать сразу в нём ( файл name.php )

Любая работа с базой данных начинается с получения объекта для работы. Сейчас это можно сделать двумя способами:
$database = database::getInstance();
и
$database = $mainframe->getDBO();
Какой из этих методов использовать - значения не имеет.

Дальше следует составить сам SQL запрос, например такой:
$sql = "SELECT * FROM `# __content`";
Этот запрос выбирает все записи из таблицы jos_content, в которой хранятся статьи и новости сайта. Тут # __ - это замена префикса для таблиц ( он указывается при установке системы ), и перед непосредственным выполнением запроса # __ заменится на jos__, и всё будет хорошо.

Дальше следует передать сформированный запрос в объект базы данных:
$database->setQuery( $sql );
Теперь объект базы данных знает что от него хотят, и готов узнать в каком виде выдать полученный результат. Для нашего первого примера попросим выдать нам все результаты в виде массива. Используем метод базы данных loadAssocList(). Метод результат возвращает, поэтому заберём его в новую переменную.
$result = $database->loadAssocList();
Теперь у нас в переменной $result  находится массив со всеми записями из таблицу контента - jos_content. Проверим это через небольшую отладочную функцию _xdebug();
_xdebug( $result );

Результат будет примерно такого вида:
Array
(
[0] => Array
(
[id] => 1
[title] => Установка завершена!
[title_alias] => Установка успешно завершена!
....
Полный листинг довольно большой и копировать его не буду.
Давайте сделаем что-то бесполезное, например выведем список всех статей. Нам нужен будет заголовок и текст анонса, а так же дата создания статьи. Вникать в тонкости формирования SQL запросов не буду, про это лучше расскажет википедия, сайт MySQL и другие источники. Результат непосредственной работы у меня получился такой:
$results= database::getInstance()->setQuery( "SELECT title, introtext, created FROM `# __content`" )->loadAssocList();

Тонкий момент, объект базы данных начиная с версии Joostina 1.3 умеет делать более компактный синтаксис:

$рузультат = $объктбазы->setQuery( " SQL запрос " )->типРезультата();


Теперь в переменной $results находится массив статей, у меня он вот такой:
Array(
[0] => Array(
[title] => Установка завершена!
[introtext] => Поздравляем! Если Вы видите это сообщение, то Joostina успешно....
[created] => 2007-10-14 11:54:06
)

[1] => Array(
[title] => Система управления содержимым
.....
Опять же скопировал лишь часть - полностью он велик и беспощаден.

Дальше больше - массив надо показать в интересном и красивом для глаз виде, прогоним его через foreach и оформим:
foreach ($results as $result) {
echo "<i>".$result['created']."</i>";
echo "     ";
echo "<b>".$result['title']."</b>";
echo "<br />";
echo "<p>".$result['introtext']."</p>";
}
В такой жуткой мешанине из php и html кода у нас формируется дата статьи ( created ) выделенная курсивом, потом название статьи жирным шрифтом ( title ), и последнее - текст анонса в параграфе ( introtext ). То что видите в примере - ужасный стиль за который многие считают язык php унылым и старым. Не делайте так, прочитайте умные книжки про MVC и выносите оформление подальше от кода. Но у нас обучающая серия, и такое применение разрешается.

Посмотрим на результат:
f1.png

Впечатляет, правда?

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