Просмотр календарного дня в PHP - PullRequest
2 голосов
/ 13 марта 2010

Я работаю над добавлением опции просмотра дня в существующее календарное решение. Как и многие люди, внедряющие свои собственные календари, я пытаюсь смоделировать Google Календари. У них есть отличное календарное решение, а их дневной обзор обеспечивает большую гибкость. По большей части реализация идет хорошо; однако у меня возникают проблемы, когда речь идет о конфликтующих событиях.

По сути, я хочу, чтобы события занимали одно и то же пространство рядом. События, начинающиеся одновременно, должны иметь самое длинное событие. В примере набора данных, с которым я работаю, у меня есть четыре события:

A: 10:30 - 11: 30

B: 13:30 - 14: 30

C: 10:30 - 11:00

Д: 10:45 - 14: 00

Я могу справиться с A, C и D очень хорошо, проблема возникает с D. A должен быть оставлен от C, который должен быть оставлен от D; каждый берет одну треть ширины (это фиксированная ширина, поэтому я могу сделать простую математику, чтобы понять это). Проблема в том, что B должен находиться под A и C, слева от D. В идеале, B будет занимать столько же места, что и A и C (две трети ширины), но я бы даже согласился, что он занимает только одна треть ширины.

Мой массив событий выглядит примерно так:

$events = array(
  '1030' => array(
    'uniqueID1' => array(
      'start_time' => '1030',
      'end_time' => '1130',
    ),
    'uniqueID2' => array(
      'start_time' => '1030',
      'end_time' => '1100',
    ),
  ),
  '1045' => array(
    'uniqueID3' => array(
      'start_time' => '1045',
      'end_time' => '1400',
    ),
  ),
  '1330' => array(
    'uniqueID3' => array(
      'start_time' => '1330',
      'end_time' => '1430',
    ),
  ),
);

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

Я думаю, мне может понадобиться алгоритм, который использует базовую геометрию и матрицы, но я не уверен, с чего начать.

Любая помощь очень ценится.

1 Ответ

2 голосов
/ 13 марта 2010

Это не помогает при разработке вашего собственного календаря, но, поскольку вы пытаетесь создать интерфейс, похожий на календарь Google, я настоятельно рекомендую плагин jQuery fullcalendar .

Требуется канал для данных календаря, в настоящее время я подключаю его к общедоступному календарю Outlook Exchange, а затем отображаю в виде месяца / недели / дня. Дневной обзор может служить хорошим примером реализации вашего исходного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...