Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Camus302

[Resolvido] Calendário de aniversários

Recommended Posts

Boa tarde.

 

Fiz um calendário em uma tabela html simples, sem código nem nada, e tenho um bd sql server onde são cadastrados os aniversários dos clientes da empresa.

O que eu quero fazer é "pintar" a célula do dia que tem um aniversário.

Por exemplo: um registro no bd faz aniversário dia 15/06, aí lá no calendário, na tabela de junho, ele fica com um bgcolor na célula onde tem o número 15. Mais ou menos isso.

 

Como faço isso? Pensei em fazer um do while/loop, mas como fazer essa comparação com o dia no calendário, já que retorna todos os aniversários do mês?

 

 

Preciso de uma ajuda.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem um exemplo de calendario que postei no lab. de srcipt, dá uma olhada caso não encontre me manda um email, que para fins didáticos tenho um ótimo exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código é simples, é só uma tabela html:

 

<table id="tabela_dias" border="0" cellpadding="0" cellspacing="0" align="center">
 <tr>
   <td>1</td>
   <td>2</td>
   <td>3</td>
   <td>4</td>
   <td>5</td>
   <td>6</td>
   <td>7</td>
 </tr>
 <tr>
   <td>8</td>
   <td>9</td>
   <td>10</td>
   <td>11</td>
   <td>12</td>
   <td>13</td>
   <td>14</td>
 </tr>
 <tr>
   <td>15</td>
   <td>16</td>
   <td>17</td>
   <td>18</td>
   <td>19</td>
   <td>20</td>
   <td>21</td>
 </tr>
 <tr>
   <td>22</td>
   <td>23</td>
   <td>24</td>
   <td>25</td>
   <td>26</td>
   <td>27</td>
   <td>28</td>
 </tr>
 <tr>
   <td>29</td>
   <td>30</td>
   <td>31</td>
   <td> </td>
   <td> </td>
   <td> </td>
   <td> </td>
 </tr>
</table>

 

Como é uma tabela no bd pra todos, o select ficaria + ou - assim:

 

SqlJaneiro = "SELECT * FROM ClientesExternos WHERE MONTH(DATA) = 1"
Set OrsJaneiro = conexao.execute(SqlJaneiro)

 

Assim acho que teria que fazer um select pra cada mês, aí que não sei se é o certo e nem como fazer essa comparação com os dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha esta classe para calendario

<% 
Class calendario

public mes, ano, arrmes(12), datas, eventos, urldestino
'------------------------------------------------------'

Private Sub  Class_Initialize()
 session.lcid = 1046  'Português (Brasileiro)
 arrmes(1) = "Janeiro" 
 arrmes(2) = "Fevereiro" 
 arrmes(3) = "Março" 
 arrmes(4) = "Abril"
 arrmes(5) = "Maio"
 arrmes(6) = "Junho"
 arrmes(7) = "Julho"
 arrmes(8) = "Agosto"
 arrmes(9) = "Setembro" 
 arrmes(10) = "Outubro"
 arrmes(11) = "Novembro" 
 arrmes(12) = "Dezembro" 
 mes = Month(Now) 
 ano = Year(Now)
 urldestino = "data.asp"
 set datas = Server.CreateObject("Scripting.Dictionary")
 set eventos = Server.CreateObject("Scripting.Dictionary")
End Sub 

Private Sub Class_Terminate() 
 set datas = nothing
 set eventos = nothing
 session.lcid = 1033 'usa(no resto da aplicação é usada esta sessão)
End Sub
'------------------------------------------------------'

Private Function diasmes() 
 Select Case mes 
  Case 1,3,5,7,8,10,12 
   diasmes = 31 
  Case 4,5,6,9,11 
   diasmes = 30 
  Case 2 
   If ano Mod 4 Then 
    diasmes = 28 
   Else 
    diasmes = 29 
   End If 
  Case Else 
   Exit Function 
 End Select 
End Function 

'dd-mm-aaaa
Private Function dataformatada(adata)
 if isdate(adata) then
  dataformatada = Right("0"&Day(adata),2) &"-"& Right("0"&Month(adata),2) &"-"& Year(adata)
 else
  dataformatada = false
 end if
End Function
'------------------------------------------------------'

Public Sub novoevento(data,evento,id)
 datas.add "data"&id,dataformatada(data)
 eventos.add "evento"&id,evento
End Sub 

Public Sub mostrar 
 Select Case request("modo") 
  Case "anterior" 
   ano = request("ano") 
   If request("mes") < 1 Then 
                mes = 12 
                ano = request("ano") - 1 
            Else 
                mes = request("mes") 
            End If 
        Case "seguinte" 
   ano = request("ano") 
            If request("mes") > 12 Then 
                mes = 1 
                ano = request("ano") + 1 
            Else 
                mes = request("mes") 
            End If 
 End Select 

    dia = Weekday(dataformatada(1&"-"&arrmes(mes)&"-"&ano))
    dias = diasmes()
 %>
    <table class="calendario" cellpadding="0">
  <thead>
       <tr>
          <th><a href="<%=Request.ServerVariables("SCRIPT_NAME")%>?modo=anterior&mes=<%=mes-1%>&ano=<%=ano%>">««</a></th> 
          <th colspan="5"><%=arrmes(mes)&" "&ano%></th> 
       <th><a href="<%=Request.ServerVariables("SCRIPT_NAME")%>?modo=seguinte&mes=<%=mes+1%>&ano=<%=ano%>">»»</a></th> 
      </tr>
  </thead>
        <tr class="diasdasemana"> 
         <td>D</td> 
        <td>S</td> 
         <td>T</td> 
         <td>Q</td> 
         <td>Q</td> 
         <td>S</td> 
         <td>S</td> 
      </tr> 
      <tr> 
        <%
   i = 1 
        For j = 1 to dia - 1
            response.write "<td></td>"
   If i > 6 Then 
                response.write "</tr><tr>"
                i = 0 
            End If 
            i = i + 1 
        Next

        For j = 1 to dias
   nevento = ""
   for ev = 1 to datas.count
    if dataformatada(j&"/"&mes&"/"&ano) = datas.item("data"&ev) then
     nevento = nevento&"<li>"&eventos.item("evento"&ev)&"</li>"
    end if
   next
   if dataformatada(j&"-"&mes&"-"&ano) = dataformatada(date) then estilo = " class=""diaatual""" else estilo = ""
   if nevento <> "" then
    jdia = "<a class=""linkevento"" rel=""tooltip"" oseventos=""<ul>"&nevento&"</ul>"" href="""&urldestino&"?data="&j&"-"&mes&"-"&ano&""">"&j&"</a>"
   else
    jdia = j
   end if
            response.write "<td"&estilo&">"&jdia&"</td>"
   If i > 6 And j <= dias - 1 Then 
                response.write "</tr><tr>"
                i = 0 
            End If 
            i = i + 1 
        Next

        If i > 1 Then 
            For m = i to 7
                response.write "<td></td>"
   Next 
        End IF
  %> 
      </tr> 
    </table> 
 <%
End Sub
End Class
%>

 

agora a página que vai ter o calendario, estou a usar um plugin do jquery para os tooltips dos eventos

<!--#include virtual="lib/clsCalendario.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url="http://www.w3.org/1999/xhtml"]http://www.w3.org/1999/xhtml[/url]" lang="pt" xml:lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="Language" content="pt" />
<meta http-equiv="imagetoolbar" content="no" />
<title>Calendário</title>
<link rel="stylesheet" type="text/css" href="/css/calendario.css" />
<link rel="stylesheet" type="text/css" href="/css/tipsy.css" />
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="/js/jquery.tipsy.js"></script>
<script type="text/javascript" language="javascript">
$(function(){
 $('a[rel=tooltip]').tipsy({html: true, title: 'oseventos' });
});
</script>
</head>
<body>
<%
Set cal = New calendario
cal.mes = month(now())
cal.ano = year(now())
cal.novoevento "5-03-2011","Evento 1",1
cal.novoevento "8-03-2011","Evento 2",2
cal.novoevento "8-03-2011","Evento 3",3
cal.novoevento "9-03-2011","Evento 4",4
cal.novoevento "27-02-2011","Evento 5",5
cal.novoevento "1-04-2011","Evento 6",6
'cal.urldestino = "accao.asp"
cal.mostrar
Set cal = Nothing 
%>
</body>
</html>

 

os css

 

calendario.css

.calendario{
width:100%;
border-top:1px solid #C1DAD7;
border-right:1px solid #C1DAD7;
margin:0;
padding: 0;
border-collapse:collapse;
}
.calendario thead th{
background:#C9E7E9;
text-align:center;
font:bold 1.2em/2em "Century Gothic","Trebuchet MS",Arial,Helvetica,sans-serif;
color:#66a3d3;
border-bottom: 1px solid #C1DAD7;
border-left:1px solid #C1DAD7;
padding: 5px 0;
}
.calendario thead th a{color:#66a3d3;}
.calendario tr.diasdasemana td{
font-weight: bold;
background:#f4f9fe;
color:#66a3d3;
height: auto;
width: 14%;
padding: 5px 0;
}   
.calendario td{
color:#678197;
border-bottom:1px solid #C1DAD7;
border-left:1px solid #C1DAD7;
text-align:center;
height: 40px;
}  
.calendario td.diaatual{background: #FFF1A0;}
.calendario td a.linkevento{
display: block;
height: 40px;
line-height: 40px;
color:#fff;
background: #DB4B68;
font-weight: bold;
text-decoration: none;
}

e o tipsy.css que faz parte do plugin mas fiz umas alterações

 

.tipsy { padding: 5px; font-size: 14px; opacity: 0.8; filter: alpha(opacity=80); background-repeat: no-repeat;  background-image: url(../images/tipsy.gif); }
.tipsy ul{padding: 0 0 0 15px;margin: 0;}
.tipsy ul li{font-family: Arial, Helvetica, sans-serif;padding: 4px;}
.tipsy-inner { padding: 5px 8px 4px 8px; background-color: black; color: white; max-width: 200px; text-align: center; }
.tipsy-inner { -moz-border-radius:3px; -webkit-border-radius:3px; }
.tipsy-north { background-position: top center; }
.tipsy-south { background-position: bottom center; }
.tipsy-east { background-position: right center; }
.tipsy-west { background-position: left center; }

 

para fazer download do plugin do jquery clique aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai xanburzum.

 

Estava testando a tua classe para calendário (muito interessante por sinal), e me deparei com um problema: não consigo usar o "do while/loop" para pegar as minhas datas.

 

Estou fazendo assim:

 

Set cal = New calendario 
cal.mes = 11
cal.ano = 2011

SqlMes = "SELECT * FROM ClientesExternos"
Set OrsMes = conexao.execute(SqlMes)

cont = 0
Do While Not OrsMes.eof

DataNasc = Right("0"&Day(OrsMes("DATA")),2)&"-"&Right("0"&Month(OrsMes("DATA")),2)&"-"&Year(OrsMes("DATA"))
Nome = OrsMes("Nome")
contador = cont + 1

cal.novoevento DataNasc,Nome,contador

OrsMes.movenext
Loop

cal.mostrar 
Set cal = Nothing

 

Só que ta dando esse erro:

 

Erro de tempo de execução do Microsoft VBScript erro '800a01c9' 

Esta tecla já está associada com um elemento desta coleção 

/aniversarios/clsCalendario.asp, linha 63

 

Eu dei uma adaptada pro que preciso, mas não sei se fiz algo errado.

 

------ EDITADO ------

 

Achei o erro:

contador = cont + 1

 

O certo é:

cont = cont + 1

E depois:

cal.novoevento DataNasc,Nome,cont

 

Agora funcionou tudo certo. Obrigado a todos pela ajuda. Valeu xanburzum!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, amigo...

 

precisando dá um grito ae....

 

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.