Distrito, Freguesia, Localidade

141 views
Skip to first unread message

Paulo

unread,
Jun 5, 2010, 3:34:09 AM6/5/10
to Drupal Portugal
Olá a todos,

já alguém fez algum formulário para que se possa adicionar uma
localidade a um node do tipo Distrito, Freguesia, Localidade? Ao
escolher o Distrito a lista de Freguesias deve actualizar-se em
conformidade, e ao escolher a Freguesia a lista Localidade também se
deve actualizar.
Pode ser com dropdowns, no entanto um mapa como o que está na
http://casa.sapo.pt seria o ideal :P

Andei a pesquisar vários módulos como: geo, geoMap, location, gmaps
etc. mas não coonsegui chegar a nenhuma conclusão.

Obrigado a todos

Paulo

Roberto Gorjão

unread,
Jun 5, 2010, 11:43:04 AM6/5/10
to drupal-...@googlegroups.com
Olá Paulo!

Parabéns pelo teu novo site.

Em relação à tua pergunta, parece ser a situação ideal para uma taxonomia organizada com três vocabulários. Para o cruzamento, poderás tentar o módulo taxonomy_filter.

HTH,

Roberto

Antonio P. P. Almeida

unread,
Jun 5, 2010, 8:44:03 PM6/5/10
to drupal-...@googlegroups.com, pgi...@gmail.com
On 5 Jun 2010 08h34 WEST, pgi...@gmail.com wrote:

> Olá a todos,
>
> já alguém fez algum formulário para que se possa adicionar uma
> localidade a um node do tipo Distrito, Freguesia, Localidade? Ao
> escolher o Distrito a lista de Freguesias deve actualizar-se em
> conformidade, e ao escolher a Freguesia a lista Localidade também se
> deve actualizar.
> Pode ser com dropdowns, no entanto um mapa como o que está na
> http://casa.sapo.pt seria o ideal :P

Isso é uma form com um elemento AHAH. As forms AHAH estão explicadas
em vários sítios.

A forma mais fácil de conseguir isso é usando o conditional fields do
CCK.

http://drupal.org/project/conditional_fields

Nota: a configuração do campo para um universo como esse é trabalhosa.

--- appa

Raul Pedro Santos

unread,
Jun 6, 2010, 9:59:36 AM6/6/10
to drupal-...@googlegroups.com
Paulo,

Assumindo que ainda não o fizeste, em primeiro lugar cria um vocabulário "Localidades" com uma lista de Distritos (1 distrito = 1 termo do vocabulário). Depois cria as Freguesias como sub-termos dos Distritos (não te faltam os Concelhos antes?), e por fim as Localidades como sub-termos das Freguesias. Isto é essencial para poderes categorizar os nodes que crias e associá-los a uma das localidades, independentemente de usares dropdowns ou um mapa.

Depois, para as dropdowns é muito fácil:

Com os dados acima no sítio instala o módulo Content Taxonomy (http://drupal.org/project/content_taxonomy) e adiciona um campo "localidade" ao tipo de conteúdo em que estás a mexer. Terás que associar a este campo a taxonomia que criaste anteriomente.

Depois faz a magia acontecer automaticamente com o módulo Hierarchical Select (http://drupal.org/project/hierarchical_select). Vê a demo aqui: http://wimleers.com/demo/hierarchical-select/taxonomy e vais perceber que faz exactamente o que queres.



Segunda opção, com mapa, mais complicada:

Para usares um mapa a coisa é mais complicada, até porque estás a querer uma coisa específica para Portugal e que eu conheça não existe nada já feito que te permita fazer o que queres, por isso terás de criar tu algo desse género. A solução mais simples (mas também um bocado arcaica) que me vem à cabeça é usares um "map" de HTML numa imagem (http://www.w3schools.com/TAGS/tag_map.asp), no qual que defines as áreas que queres. Começarias por um mapa de Portugal onde definirias os polígonos que delimitam os distritos, depois passarias para mapas de cada distrito individual, nos quais definirias os polígonos que delimitam as Freguesias (ou Concelhos), e por aí adiante.Para definir as áreas, o melhor é usar uma ferramenta própria para o efeito. Imagino que o Photoshop, se o tiveres disponível, fará isto. O Gimp talvez também. Senão, há programas específicos para o efeito, e até alguns sites, como este que encontrei agora, a precisar de algumas melhorias mas funcional.

Depois tens que inserir isto de alguma forma no formulário de edição do tipo de conteúdo que estás a criar. Em primeiro lugar, precisas de ter o mapa visível e utilizável. Esta é provavelmente a parte mais chata do processo. Eu utilizaria o "hook" node_form_alter (http://api.drupal.org/api/function/node_form_alter/6) para inserir úm elemento estático no formulário, elemento esse que conteria o código HTML do mapa.

Depois de ter o mapa no formulário, é preciso guardar algures os valores das localidades seleccionadas, porque ao enviares o formulário de criação do node, esses valores não vão estar guardados em lado nenhum, dado que o "map" não é um elemento de formulários de HTML. Eu faria isso com três (quatro, se houver Concelhos) campos escondidos, os quais actualizava através de Javascript sempre que seleccionasse uma nova localidade no mapa. Assim os campos não apareciam e quando o formulário fosse submetido, os valores seleccionados já lá estariam prontos a serem processados pelo Drupal, pois estavam nos campos escondidos. O Javascript necessário deve ser guardado num ficheiro à parte e pode ser adicionado à página no mesmo "hook" descrito no parágrafo acima, usando a função drupal_add_js (http://api.drupal.org/api/function/drupal_add_js/).


Espero que ajude.

Raul


2010/6/5 Paulo <pgi...@gmail.com>

--
Recebeu esta mensagem porque está inscrito no grupo "Drupal Portugal" dos Grupos do Google.

Para publicar uma mensagem neste grupo, envie um e-mail para drupal-...@googlegroups.com.
Para anular a inscrição neste grupo, envie um e-mail para drupal-portug...@googlegroups.com.
Para ver mais opções, visite este grupo em http://groups.google.com/group/drupal-portugal?hl=pt-PT.


Paulo Gingão

unread,
Jun 6, 2010, 10:19:45 AM6/6/10
to drupal-...@googlegroups.com
Olá Raul,

excelente e completíssima resposta. De facto já ia a meio da tua primeira sugestão, só me falta (tempo para) juntar todas as peças. Para a segunda solução falta-me orçamento e alguma estaleca em PHP parece-me.
Já agora vale a pena ver como a solução do olx foi feita, acho que está muito parecida com a tua sugestão: http://www.olx.pt/map_selector.php
Assim que tiver isto pronto mando para verem, vai é levar umas semanas que agora vou de viagem.

Obrigado

Paulo Gingão

Mobile: +351 91 664 5536
Landline; +351 21 445 0487
skype: paulo.gingao
Rua de Sta Maria Lt 31
2785-124 SD Rana - Cascais/Portugal

www.paulogingao.com

Please avoid sending me Word or PowerPoint attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html

pgingao.vcf

Antonio P. P. Almeida

unread,
Jun 6, 2010, 11:01:20 AM6/6/10
to drupal-...@googlegroups.com, bor...@gmail.com
On 6 Jun 2010 14h59 WEST, bor...@gmail.com wrote:

Se é um image map que se pretende já há um módulo para isso que
usa um plugin jQuery.

http://drupal.org/project/jq_maphilight

Claro que isso não trata das questões dos updates dinâmicos. Isso terá
que ser feito doutra forma.

Na página do módulo tem várias sugestões de recursos. Ferramentas boas
para isso são o ImageMagick, o Graphviz (para grafos, diagramas, &c) e
o Inkscape (gravado como simples SVG).

Quanto à questão de guardar os valores, uma coisa prometedora é usar a
cache de objectos do CTools. O Panels usa isso. Razão pela qual se
pode mexer à vontade num painel sem ter que estar a gravar tudo sempre
que se faz uma mudança.

Terá que se escrever uma função de submissão para integrar tudo isto e
guardar na DB.

--- appa

Raul Pedro Santos

unread,
Jun 6, 2010, 11:03:48 AM6/6/10
to drupal-...@googlegroups.com
Paulo,

Sim, a solução do mapa do olx parece ser exactamente o que eu sugeri, com um "map" e com jQuery a tratar os eventos click, onmouseover e onmouseout (com o Firebug e o FireQuery, ao "inspeccionar" um elemento dá para ver os eventos associados ao mesmo), excepto a forma como os valores das localidades seleccionadas são guardados - no olx eles colocam esses valores em cookies, em vez de usarem campos escondidos. Eu prefiro os campos escondidos porque os cookies podem ser bloqueados.

A grande diferença é que para o Drupal terias que usar um módulo extra para injectar o HTML do mapa no formulário de edição do node.

Depois diz como correu e mostra o resultado.

Boa viagem!


Raul



2010/6/6 Paulo Gingão <pgi...@gmail.com>
Reply all
Reply to author
Forward
0 new messages