Работа с базой данных, 3я серия фильма про Joostina CMS
Во второй серии вы уже узнали что 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 и выносите оформление подальше от кода. Но у нас обучающая серия, и
такое применение разрешается.
Посмотрим на результат:
Впечатляет,
правда?
На этом серия заканчивается, увидимся в 4й части, в
которой расскажу какие еще результаты можно получить используя объект
базы данных, как вставлять и удалять записи и как обезопасить большую
часть запросов.
Вариант переезда с Joostina 1.2.0 на 1.3.0 » |
---|
Категории
- Joostina 1.2.0 ( 1 )
- Joostina 1.3.0 ( 20 )
- Фишки ( 1 )
- Расширения ( 3 )
- Советы ( 13 )
- Процесс ( 3 )
- Обо всём ( 9 )
- Форум для Joostina ( 2 )
- Разработка YaForms ( 3 )
- Книга «Реактивные веб-сайты» ( 3 )
Комментарии
- GeorgeFelry → Вариант переезда с Joostina 1.2.0 на 1.3.0
- ArmandoPlugs → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Howardrot → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Jamesappah → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Andrewkib → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Ophelia → Оптимизация через базовые настройки системы
- Michaellig → Вариант переезда с Joostina 1.2.0 на 1.3.0