База данных - один из ключевых моментов в 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й части, в которой расскажу какие еще результаты можно получить используя объект базы данных, как вставлять и удалять записи и как обезопасить большую часть запросов.
|