Olá turma,

Resolvi o problema!

Primeiro eu peguei uma página de exemplo do Google e colei no lugar do
layout (substituindo assim tudo que eu e o cake fizemos). Funcionou
perfeitamente. Então fui substituindo gradualmente o código estático pelo
código gerado pelo cake e eu até que cheguei a conclusão que o problema é o
DIV que contém o mapa (daqui em diante chamado de map_canvas).

Nas propriedades do map_canvas não havia definição de tamanho e, nos
exemplos Google havia tais "styles": height e width. Mantive os tamanhos
sugeridos no exemplo e concluí a mudança do layout de volta ao esquema cake.
Pronto. Lá estava o mapa no Firefox, IE e Opera 9.5 Windows. Liguei o Wii,
entrei o browser e babadim! Lá estava o mapa também.

Abri a CSS todo faceiro e mudei height e width para 100% (querendo tomar
todo o espaço disponível no div content para o map_canvas). E então tudo
desapareceu, tanto no FF quanto no IE... no opera não preciso nem dizer né?
Voltei tamanhos fixos (em unidade px) e pronto, lá está o mapa novamente.
Existe alguma coisa que eu não conhecia com DIV de posicionamento relativo
(map_canvas) e as propriedades height e width definidas em porcentagens.
Basta mudar e o map_canvas desaparece em todos os navegadores (não debuguei
mas acho que ele está lá ou invisivel ou com tamanho reduzido ou o GMap não
consegue usá-lo porque o tamanho ainda não está definido naquele momento).

De fato a solução foi fixar height e width usando unidade px e fazer um
javascript para checar o tamanho da janela e redimensionar o map_canvas para
ocupar o tamanho desejado. Após esse processo é necessário chamar uma API do
GMap que atualiza o mapa dentro do map_canvas.

Em tempo, no meio dessa luta toda eu precisei mexer no helper do Lababidi
para Google Maps. De fato o helper usava uma versão antiga da API e
carregava o mapa de imediato não esperando o total carregamento da página
antes de executar a inicialização dos mapas. Isso pode trazer alguns
problemas como o map_canvas ainda não estar criado (você não pode defini-lo
após a inicialização do mapa mas sim antes), tamanhos ainda não terem sidos
ajustados, etc. Nos exemplo do Google a inicialização do mapa é sempre feita
com o evento "onload" do <Body> fazendo com todos os elementos estáticos já
estejam devidamente carregados antes da inicialização. Melhorei o helper de
forma a inserir uma função de inicialização dos mapas ao invés de fazê-lo
por si. Também retirei das mãos do helper a tarefa de criar o map_canvas
deixando o usuário livre para nomeá-lo (evitando conflitos) e estilizá-lo na
própria view passando ao helper apenas seu ID (como fazemos com javascript,
passamos o id do elemento que receberá o resultado). Troquei as chamadas de
API para as nova (de GMap para GMap2) incluindo a migração de GPoint para
GlatLong na criação de "markers".

Gostaria de publicar minha contribuição em algum site. Bill poderia ser no
cakephp.com.br? Também pretendo fazer um pequeno artigo em inglês para
complementar o do Lababidi no Bakery.

Abraço,
Benito
ps: não subi a versão alterada para o servidor de produção ainda. Assim que
subir aviso.


2008/2/14 Josenivaldo Benito Junior <[EMAIL PROTECTED]>:

> Olá pessoal,
>
> Bom, deixa eu atualizar as informações que tenho, assim vocês vão poder me
> ajudar melhor e, no futuro protegerem-se desse problema.
>
> Como havia comentado, o problema ocorre em operas anteriores ou iguais ao
> 9.25 (acho que é a maioria da base instalada -- incluindo o Opera do
> Nintendo Wii e dos celulares J2me que também têm problemas). Ontem a noite
> comecei vários testes. Substituí meu  *layout* map.ctp  por um conteúdo
> padrão Google (sugerido na página das APIs). Usei o Nintendo Wii como
> benchmark (o browser do Wii é provido pelo Opera). Claro, essa mudança
> radical funcionou pois, não usava nada do cake, nem das minhas *views*.
>
> Usando esse modelo do google, acrescentei apenas um:
>
> <?php echo $content_for_layout;?>
>
> E imediatamente não funcionou mais (no Opera do Wii), no Firefox e IE tudo
> beleza como antes. Opa, então o problema estava, ou no *helper* ou na view
> plotter.ctp. Isso eliminou problemas no *layout* map.ctp. Então fui na *
> view* plotter.ctp e comecei a enxugar tudo. Eu tinha dois DIVs dentro
> dessa view, um iria conter o mapa e outro conteria campos. Matei ambos,
> deixei só o *helper* trabalhando e bingo. Funcionou no Wii, FF e IE.
>
> Deduzi então que fosse problema com DIV e fui googlear. Descobri problemas
> muito antigos com DIV mas nenhum cabia no meu caso. De qualquer forma abri o
> *helper *e verifiquei que seu autor, Mahmoud Lababidi, usou o objeto GMap
> e não o GMap2 que, segundo o Google, possui mais funcionalidades (e,
> certamente mais *bugfixes*). Fiz algumas alterações no *helper* para
> acomdar o GMap2 e suas incompatibilidades com o GMap. Tudo funcionou
> glorioso no Wii, FF e IE. Até uns problemas de *loading* que, as vezes,
> aconteciam no IE (6 e 7) sumiram. ÓTIMO!
>
> Voltei os DIV que haviam na *view* plotter.ctp. Claro, não funcionou mais
> no Wii. Pesquisei, pesquisei e não achei nada. Tentei algumas dicas de
> compatibilidade, até que decidi: dá para conviver sem esses dois DIV! Tirei
> os DIV e tudo voltou a funcionar. Voltei então para o map.ctp (*layout*)
> afim de restaurá-lo para os padrões do *site*. Coloquei cabeçalho com
> título, CSS e demais variáveis do cake. Voltei a chamar as APIs do google
> através do *helper* Javascript e pau! Parou de funcionar. Nesse momento
> senti uma vontade grande de xingar alguém hihihi. Respirei fundo e notei
> que, no layout do cake (no qual estou baseado), a seguinte estrutura de
> DIVs:
>
> <div container>
>   <div header>
>   <div content for layout>
>   <div footer>
> <logs de debug>
>
> Claro que os nomes não são estes... Por sua vez, o div que acomodar o
> $content_for_layout se desdobra em:
>
> <div canvas>
>   <div map>
> <div texto/campos>
>
> Como eu disse, retirei os DIV canvas e "texto/campos" (os nomes não são
> estes, é só para fazer alusão ao conteúdo) ficando apenas com o div map que
> é criado pelo *helper* para acomodar o mapa (dentro dele o google enfia um
> zilhão de outros div). Então, a estrutura completa fica:
>
> <div container>
>   <div header>
>   <div content for layout>
>     <div map>
>   <div footer>
> <logs de debug>
>
> Isso já após retirar os DIV que estavam dando problema. Notei então que,
> no *layout* parecido com o cake, o div map fica dentro de outros dois div.
> Testei apagando o div container e o div content for* layout*. Ou seja, o
> div map reside diretamente no body da página. Voltou a funcionar no Opera do
> Wii, só que a página perde um pouco da identidade visual, principalmente, o
> mapa agora flutua sobre o debug, coisas estranhas acontecem as vezes. Mas já
> é um *workaround* temporariamente aceitável.
>
> Então, o problema está nos DIV, um dentro do outro. Parece que o Opera tem
> dificuldades com isso. Porém, nas minhas mexidas, não detectei o que, mas
> parece que esse defeito está relacionado ao estilo do DIV pois com o div map
> dentro do div content for layout eu consegui, mais ou menos, visualizar um
> mapa no Wii depois de matar vários CSS. Porém, mesmo assim com alguns
> problemas. Alguém sabe algo sobre esse problema?
>
> Bom, na minha busca por uma solução acabei tropeçando e algo mais sujo e
> que não sei explicar. Em nenhum momento o Google Maps deu pau (a ponto de
> não abrir o mapa e abrir apenas os controles) no FF e no IE, mas, ao tentar
> deixar o layout próximo do recomendado pelo Google, coloquei a linha DOCTYPE
> que estava faltando. Pronto, não funcionou em nenhum browser mais. Usei a
> XHTML strict e transitional mas com essas linhas tenho problemas em todos os
> browser. Exemplo:
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
>
> Retirando tal linha do map.ctp (*layout*) tudo volta a funcionar. Resolvi
> então validar o documento no w3c. Colocando o DOCType recebo 100% *
> compliance* (fiz alterações para chegar nisso), sem a linha recebo 100% *
> compliance* com aviso de que o doctype não foi definido explicitamente.
> Mesmo estando 100% *compliance* o FF, IE e Opera dão pau, tirando a linha
> doctype (e continuando *compliance* mas com ressalva) funciona no FF e no
> IE mas não no Opera.
>
> Isso me fez pensar se não tem algum outro problema que não estou
> enxergando além dos DIV. Por que a linha DOCTYPE (que funciona no layout
> padrão do cake) faz o FF/IE quebrarem? Eu copiei e colei a linha de vários
> locais diferentes e sempre tenho o mesmo problema. Tentei digigar e nada.
> (não era erro de digitação pois nem via *copy and paste*). Neste caso,
> alguém tem alguma idéia?
>
> Não deu tempo ontém de subir as alterações para a Web enão, a versão em
> http://sistemas.gbvudx.org/disclosed_stations/plotter/ (mantenha a / no
> final) é aquela que:
>
> 1) não funciona no Opera mas funciona no IE/FF/Safari.
> 2) não ainda usa GMap ao invés de GMap2
>
> Porém o *layout* produzido é o mesmo que causa problemas no Opera. E o
> mesmo que, se acrescentar DOCTYPE dá problemas em todos os navegadores.
> Agradeço qualquer ajuda e subo os código necessários para análise.
>
> Em tempo, quero deixar claro que "não funcionar no Wii" significa que o
> DIV com o mapa não aparece mas os controles do mapa (flutuantes sobre ele )
> aparecem e respondem a clicks, a linha de copyright do mapa também aparece.
> Veja:
> http://browsershots.org/http://sistemas.gbvudx.qsl.br/disclosed_stations/plotter/os
>  screenshots dos brownser (os Opera
> 9.25 são extamentes como no Wii (tirando que o Wii não tem janelas)).
>
> Obrigado,
> Benito.
>
> 2008/2/13 Josenivaldo Benito Junior <[EMAIL PROTECTED]>:
>
> Oi Juan,
> >
> > Que foi na parte que eu fiz ou que é alguma incompatibilidade com
> > scripts do cake (acho difícil) não há dúvidas. Eu pedi uns browser shots (
> > http://www.brownsershots.org - fantástico) do meu site e do
> > http://maps.google.com para ver como ficava. Com isso descobri que o
> > Google Maps oficial funciona em tudo que é browser do universo (to
> > exagerando, mas em todos com os quais precismos nos preocupar funciona) e
> > descobri também que o problema do meu site é com o Opera 9.25 ou
> > inferior, na nova versão 9.50 funciona. Isso já deu alguma luz no fim do
> > túnel.
> >
> > Quanto ao código, aproveitei uma compilação no trabalho para formular a
> > pergunta, o código do site fica em casa e não aqui na empresa. (aliás, por
> > curiosidade, uma compilação e linkedição completo do nosso produto leva 1,5
> > horas numa máquina com 4 processadores dual core - veja que tive algum tempo
> > extra para pesquisar novidades e problemas hihi).
> >
> > Depois eu posto o código aqui ok?
> >
> > Abraço e obrigado por enquanto.
> > Benito
> >
> > 2008/2/13 Juan Basso <[EMAIL PROTECTED]>:
> >
> >
> > > Olha, olhando rapidamente no Google, parece que o pessoal não tem
> > > problemas com o GoogleMaps com Opera, ou seja, deve ser na parte que
> > > você fez. :)
> > >
> > > Portanto, acho que sem ver o código fica meio difícil de ajudar.
> > >
> > >
> > > Juan Basso
> > >
> > > On 13 fev, 14:06, "Josenivaldo Benito Junior" <[EMAIL PROTECTED]>
> > > wrote:
> > > > Olá turma,
> > > >
> > > > Alguém ai usa a API do Google para mapas?
> > > >
> > > > Estou usando e adorando. Uma das coisas que o sistema precisava era
> > > do mapa.
> > > > Eu já tinha feito, no braço, com design atoscalhado, no ano
> > > anterior. Com
> > > > cake ficou muito melhor.
> > > >
> > > > Agora estou com um pequeno problema de visualização e precisava ver
> > > se
> > > > alguém já passou por isso. Tem funcionado 100% no firefox, também
> > > funciona
> > > > 99% no IE (5, 6 e 7 - todos tem pequenos problemas de loading das
> > > imagens,
> > > > mas isso é tolerável). Já o Opera, seja versão Windows, Linux ou Wii
> > > > (Nintendo Wii) não abre os mapas, apenas os controles. Desconfio de
> > > CSS,
> > > > Javascript ou coisa do gênero mas não sei como debugar o problema.
> > > Eu já
> > > > mudei, tirei e recoloquei quase tudo de Javascript que eu pude e, no
> > > máximo
> > > > faço parar de funcionar no Firefox/IE mas nunca consigo fazer
> > > funcionar no
> > > > Opera.
> > > >
> > > > Usando o Opera e indo emhttp://maps.google.com(ou Opera do Wii)
> > > funciona.
> > > >
> > > > Alguém tem alguma dica?
> > > >
> > > > --
> > > > Josenivaldo Benito Junior. PU2LBD
> > > > Organizador do Concurso Brasileiro de 144 MHZ - CB144 (em conj. com
> > > > PY2BRZ e  PY2HCD)http://www.gbvudx.qsl.br
> > > > Assine a Lista de e-mails do GBVUDX:
> > > http://www.gbvudx.qsl.br/refletor_gbvudx.asp
> > > > > >
> > >
> >
> >
> > --
> > Josenivaldo Benito Junior. PU2LBD
> > Organizador do Concurso Brasileiro de 144 MHZ - CB144 (em conj. com
> > PY2BRZ e  PY2HCD)
> > http://www.gbvudx.qsl.br
> > Assine a Lista de e-mails do GBVUDX:
> > http://www.gbvudx.qsl.br/refletor_gbvudx.asp
> >
>
>
>
> --
> Josenivaldo Benito Junior. PU2LBD
> Organizador do Concurso Brasileiro de 144 MHZ - CB144 (em conj. com
> PY2BRZ e PY2HCD)
> http://www.gbvudx.qsl.br
> Assine a Lista de e-mails do GBVUDX:
> http://www.gbvudx.qsl.br/refletor_gbvudx.asp
>



-- 
Josenivaldo Benito Junior. PU2LBD
Organizador do Concurso Brasileiro de 144 MHZ - CB144 (em conj. com
PY2BRZ e  PY2HCD)
http://www.gbvudx.qsl.br
Assine a Lista de e-mails do GBVUDX:
http://www.gbvudx.qsl.br/refletor_gbvudx.asp

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito no Grupo "Cake PHP Português" 
em Grupos do Google.
 Para postar neste grupo, envie um e-mail para [email protected]
 Para cancelar a sua inscrição neste grupo, envie um e-mail para [EMAIL 
PROTECTED]
 Para ver mais opções, visite este grupo em 
http://groups.google.com/group/cake-php-pt?hl=pt-BR
-~----------~----~----~----~------~----~------~--~---

Responder a