Приднестровская поддержка XOOPS
Для загрузки данных, описывающих события, потребуется создать новый метод, который будет обращаться к базе данных и извлекать из нее необходимую информацию. Поскольку доступ к данным будет осуществляться двумя способами (о втором из них речь пойдет немного позже), мы постараемся сделать этот метод достаточно универсальным, чтобы его можно было использовать в обоих случаях.
Назовем этот метод _loadEventData() и объявим его закрытым. Метод принимает один необязательный параметр — уникальный идентификатор события (ID) — и загружает события, выполняя действия в соответствии со следующей процедурой.
1. Создать базовый запрос SELECT для загрузки доступных полей из таблицы events.
2. Проверить, не был ли передан идентификатор события, и если был, то включить в запрос предложение where, чтобы ответ содержал информацию только об одном событии.
3. В противном случае выполнить оба описанных ниже действия:
• найти моменты времени, соответствующие полуночи первого дня месяца и 11:59:59 после полудня (РМ) последнего дня месяца;
• добавить предложение WHERE — BETWEEN для загрузки информации, относящейся лишь к тем датам, которые попадают в интервал, определяемый текущим месяцем.
4. Выполнить запрос.
5. Возвратить ассоциативный массив результатов.
Реализованный с учетом этих положений метод выделен в приведенном ниже коде полужирным шрифтом.
<?php
class Calendar extends DB_Connect
{
private $_useDate;
private $_m;
private $_y;
private $_daysInMonth;
private $_startDay;
public function __construct($dbo=NULL, $useDate=NULL) {...}
/**
* Загружает информацию о событии (событиях) в массив
*
* @param int $id: необязательный идентификатор (ID),
* используемый для фильтрации результатов
* @return array: массиш событий, извлеченных из базы данных
*/
private function _loadEventData($id=NULL)
{
$sql = "SELECT
`event_id`, `event_title`, `event_desc`,
`event_start`, `event_end`
FROM `events`";
/*
* Если предоставлен идентификатор (ID) события, добавить
* предложение WHERE, чтобы было возвращено только это событие
*/
if ( !empty($id) )
{
$sql .= "WHERE `event_id`=:id LIMIT 1";
}
/*
* В противном случае загрузить все события, относящиеся
* к используемому месяцу
*/
else
{
/*
* Найти первый и последний дни месяца
*/
$start_ts = mktime(0, 0, 0, $this->_m, 1, $this->_y);
$end_ts = mktime(23, 59, 59, $this->_m+1, 0, $this->_y);
$start_date = date('Y-m-d H:i:s', $start_ts);
$end_date = date('Y-m-d H:i:s', $end_ts);
/*
* Отфильтровать события, выбрав из них только те,
* которые относятся к месяцу, выбранному текущим
*/
$sql .= "WHERE `event_start`
BETWEEN '$start_date'
AND '$end_date'
ORDER BY `event_start`";
}
try
{
$stmt = $this->db->prepare($sql);
/*
* Привязать параметр, если был передан идентификатор
*/
if ( !empty($id) )
{
$stmt->bindParam(":id", $id, PDO::PARAM_INT);
}
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
return $results;
}
catch ( Exception $e )
{
die ( $e->getMessage() );
}
}
}
?>
Данный метод возвращает массив, который в случае использования тестовых записей, созданных нами ранее в базе данных, состоит из следующих элементов.
Отправитель | Нити |
---|
29 пользователь(ей) активно (12 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 29 далее... |