Оглавление

Загрузка информации о событиях

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

 
Назовем этот метод  _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() ); 
        } 
    } 
 
} 
 
?> 

 

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

 

Array
(
    [0] => Array
        (
            [event_id] => 1
            [event_title] => New Year's Day
            [event_desc] => Happy New Year!
            [event_start] => 2010-01-01 00:00:00
            [event_end] => 2010-01-01 23:59:59
        )
 
    [1] => Array
        (
            [event_id] => 2
            [event_title] => Last Day of January
            [event_desc] => Last day of the month! Yay!
            [event_start] => 2010-01-31 00:00:00
            [event_end] => 2010-01-31 23:59:59
        )
 
)
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити