Classe Calendar
A classe Calendário permite a criação dinâmica de calendários. Os calendários podem ser formatados através do uso de um template, lhe dando liberdade total de cada aspecto do design do mesmo. Além disso, você pode passar dados para as células do seu calendário.
Inicializando a Classe
Assim como a maioria das classes no Code Igniter, a classe de Calendário é inicializada em seu controller usando o método $this->load->library():
$this->load->library('calendar');
Uma vez carregado, o objeto Calendar estará disponível utilizando: $this->calendar
Exibindo um Calendário
Segue um simples exemplo de como exibir um calendário:
$this->load->library('calendar');
echo $this->calendar->generate();
O código acima irá gerar o calendário para o mês e ano corrente, baseado nas configurações do seu servidor. Para exibir um calendário de uma data específica (ano e mês), você pode passar esta informação através do método de geração do calendário:
$this->load->library('calendar');
echo $this->calendar->generate(2006, 6);
O código acima irá gerar o calendário exibindo o mês de Junho de 2006. O primeiro parâmetro especifica o ano, o segundo especifica o mês.
Passando dados para as Células do Calendário
Para adicionar informações às células do calendário, é necessário criar um array associativo onde as chaves correspondem aos dias que você quer popular e os valores do array contém as informações. O array é passado como terceiro parametro do método de geração do calendário. Veja este exemplo:
$this->load->library('calendar');
$data = array(
3 => 'http://seu-site.com/news/article/2006/03/',
7 => 'http://seu-site.com/news/article/2006/07/',
13 => 'http://seu-site.com/news/article/2006/13/',
26 => 'http://seu-site.com/news/article/2006/26/'
);
echo $this->calendar->generate(2006, 6, $data);
No exemplo acima, os dias 3, 7, 13 e 26 receberão links apontando para as URLs passadas.
Nota: Por padrão assume-se que seu array conterá links. Na seção que explica os templates do calendário logo abaixo, você verá como customizar como as informações passadas para suas células serão tratadas, assim você poderá passar diferentes tipos de informações.
Definindo Preferências de Exibição
Existem sete preferências que você pode usar para controlar diversos aspectos do calendário. Preferências são definidas passando um array de preferências como segundo parâmetro do método de carregamento. Veja o exemplo:
$prefs = array (
'start_day' => 'saturday',
'month_type' => 'long',
'day_type' => 'short'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
O código acima iniciaria o calendário no sábado, exibe o nome do mês completo no cabeçalho e os nomes reduzidos dos dias. Mais informações sobre preferências mais abaixo.
| Preferências | Valor Padrão | Opções | Descrição |
|---|---|---|---|
| template | None | None | Uma string contendo o template do seu calendário. Veja a seção de templates abaixo. |
| local_time | time() | None | Unix timestamp correspondente ao horário atual. |
| start_day | sunday | Qualquer dia da semana (sunday, monday, tuesday, etc.) | Define o dia da semana que o calendário deve iniciar. |
| month_type | long | long, short | Determina qual versão do nome do mês deve ser exibido no cabeçalho. long = January, short = Jan. |
| day_type | abr | long, short, abr | Determina qual versão dos nomes dos dias da semana usar no cabeçalho das colunas. long = Sunday, short = Sun, abr = Su. |
| show_next_prev | FALSE | TRUE/FALSE (booleano) | Determina onde exibis os links permitindo navegar nos meses. Veja mais informações sobre isso abaixo. |
| next_prev_url | None | A URL | Define o caminho base usado em seus links de próximo/anterior do calendário. |
Exibindo Links de Mês Anterior/Próximo
Para permitir que seu calendário possa navegar entre os dias e meses através de links de próximo/anterior, você deve configurar o calendário de forma parecida ao exemplo abaixo:
$this->load->library('calendar');
$prefs = array (
'show_next_prev' => TRUE,
'next_prev_url' => 'http://www.seu-site.com/index.php/calendar/show/'
);
echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4), $prefs);
Algumas considerações sobre o exemplo acima:
- Você precisa definir "show_next_prev" como TRUE.
- Você precisa colocar a URL para o controller que contém o calendário na opção "next_prev_url".
- Você precisa passar o "ano" e "mês" para o método de geração do calendário através dos segmentos de URI onde eles aparecem (Nota: A classe Calendário adiciona o ano/mês automaticamente à URL base que você passar.).
Criando Templates de Calendários
Criando templates de calendários você terá controle total sobre o design do mesmo. Cada componente do seu calendário será definido em pares de pseudo-variáveis, conforme explicado abaixo:
$prefs['template'] = '
{table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><<</a></th>{/heading_previous_cell}
{heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th><a href="{next_url}">>></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr>{/cal_row_start}
{cal_cell_start}<td>{/cal_cell_start}
{cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
{cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today}
{cal_cell_no_content}{day}{/cal_cell_no_content}
{cal_cell_no_content_today}<div class="highlight">{day}</div>{/cal_cell_no_content_today}
{cal_cell_blank} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();