Pedido de registo ao clicar num link de "reservar já"

3 views
Skip to first unread message

Cláudia Amorim

unread,
Jun 20, 2010, 4:42:13 PM6/20/10
to Drupal Portugal
Olá.

Estou com um problema associado às permissões de utilizadores. O caso
é o seguinte:

1. tenho um conteúdo chamado "promoção" a que está associado outro -
"reserva" - através de um node reference

2. quero que o utilizador registado, ao visualizar uma promoção, possa
clicar no link "reservar já" criando assim a reserva

3. no entanto para o utilizador não registado quero que, ao visualizar
a promoção, veja na mesma o link "reservar já" mas que fique
impossibilitado de criar a reserva, e para isso pretendo que apareça
uma mensagem a pedir que se registe

Tudo funciona excepto o pedido de registo para o utilizador não
autenticado. Actualmente ao clicar em "reservar já" salta para o
formulário de reserva que criei com o CCK, mas vazio, porque tenho os
campos "edit_..." do módulo content permissions barrado para este tipo
de utilizador.

Gostaria de saber que soluções poderão ser aplicáveis a este caso.
Não sei se fui muito clara na exposição, mas agradeço que coloquem as
questões que acharem pertinentes.

Obrigado,
Cláudia Amorim

Antonio P. P. Almeida

unread,
Jun 21, 2010, 5:30:28 AM6/21/10
to drupal-...@googlegroups.com, claudia....@gmail.com
On 20 Jun 2010 21h42 WEST, claudia....@gmail.com wrote:

> Olá.
>
> Estou com um problema associado às permissões de utilizadores. O
> caso é o seguinte:
>
> 1. tenho um conteúdo chamado "promoção" a que está associado outro -
> "reserva" - através de um node reference
>
> 2. quero que o utilizador registado, ao visualizar uma promoção,
> possa
> clicar no link "reservar já" criando assim a reserva
>
> 3. no entanto para o utilizador não registado quero que, ao
> visualizar
> a promoção, veja na mesma o link "reservar já" mas que fique
> impossibilitado de criar a reserva, e para isso pretendo que apareça
> uma mensagem a pedir que se registe

Há pelo menos 3 maneiras de fazer isso:

1. Criar um módulo com uma hook_menu() que aponta para esse path e que
no page callback testa os privilégios do utilizador e vê se se pode
aceder ao conteúdo e apresenta a form ou vê a mensagem de registo
se não puder aceder.

2. Usando o flag e o rules. O link passa a activar uma flag que por
sua vez faz disparar uma de duas regras, uma para utilizadores
autenticados que faz o redirect para a página de reservas outro
para utilizadores não registados que faz o redirect para a mensagem
de registo.

3. Usando o panels e criando uma página com o path especificado com
regras de acesso que têm a ver com o utilizador. Um dos conteúdos é
a form de reservas e outro é a mensagem de registo. O primeiro é
activado se o utilizador estiver autenticado, o segundo se o
utilizador não estiver autenticado.

Do que consigo perceber seriam estes os vectores de ataque do problema
apresentando.

--- appa

Cláudia Amorim

unread,
Jun 22, 2010, 3:21:57 AM6/22/10
to Drupal Portugal
Viva António

É a primeira vez que consulto a comunidade e estou deveras
impressionada. Agradeço-te muito a prontidão. Vou eu mesma procurar
ajudar outros com aquilo que eu saiba, pois entendo que só assim as
coisas funcionam como as encontro neste momento.
Sobre as tuas 3 possibilidades de solução, eliminei logo a 1ª por não
saber criar hooks.
Quanto à 2ª, instalei os dois módulos e descobri logo que a Flag por
si só me traz a vantagem de deixar que os utilizadores marquem o
conteúdo que lhes interessa. Sobre a sua aplicação ao problema
exposto, encontrei logo uma dificuldade, porque quando faço um add
flag não tenho maneira de chamar o link do "reservar já". Pelo menos
para mim isso não ficou evidente. A criação da regra, 2º passo no
processo, ainda não tentei.
A 3ª, usar o panels, pareceu-me à partida a mais fácil de implementar
para mim, porque apesar de nunca ter utilizado, sei que desde aí
controlo acessos e posso criar regras. O senão é que a página não é
estática, mas dinâmica - /node/add/reserva/44?destination=promocoes.
Trata-se do form para criar a reserva que surge após clicar o link (o
widget Reference from URL de um campo node reference). A ideia que eu
tenho, quando crio um panel, é que logo à partida tenho que dar um URL
válido da página onde o vou ancorar.
Ainda não desisti e reconheço que o que estou a expor não são dúvidas,
mas a minha ignorância, mas vou dar ainda mais umas quantas cabeçadas
e tentar perceber como resolver a questão. Conto, nessa altura, se
ainda não tiver solução, expor as dúvidas com mais propriedade.

Um muito obrigada
Cláudia

Antonio P. P. Almeida

unread,
Jun 22, 2010, 3:49:22 AM6/22/10
to drupal-...@googlegroups.com, claudia....@gmail.com
On 22 Jun 2010 08h21 WEST, claudia....@gmail.com wrote:

Olá Cláudia,

O panels tem uma coisa que se chama contextos, contexto, na
terminologia do Earl Miles, é o o conjunto de dados que é preciso para
fazer a apresentação de um painel. Se olhares para a lista de páginas
que vem com o page manager, que sendo uma coisa do CTools é uma
dependência do Panels, vais ver que há vários URLs dinâmicos.

Ver: admin/build/pages

Um deles é a vista, no sentido do node_view, de um nó. A outra é a
form de criação/edição de um nó. Ambas usam um argumento que é o node
ID.

Há muitas maneiras de usar o panels. Acho o panels e o panels
everywhere coisas únicas que uma vez investido o tempo para aprender
permitem fazer coisas até aqui quase impossíveis.

Só com uma descrição mais clara posso tentar dar sugestões mais
específicas no sentido de resolver o teu problema. Para além dos
contextos directos há as relações. Isto é há 3 maneiras diversas de ir
buscar contexto (dados) para um painel:

1. Através dos contextos que já vêm no panels.

2. Através de relações que já vêm no panels.

3. Criar um novo plugin para o CTools/Panels que disponibiliza outros
contextos.

Sugiro este vídeo para ter uma perspectiva mais global do que o panels
pode fazer: http://vimeo.com/9199438

E há também a apresentação do Earl Miles no Drupalcon sobre o panels
everywhere, i.e., como podes tomar conta de todo o layout do site com
o panels e chutar de vez os enfadonhos blocos.

Também no Drupalcon há a apresentação do Sam Boyer sobre o Panels 3,
em que ele mostra o stylizer e o in-place editor, que entretanto foi
removido da release porque estava a dar problemas, mas o stylizer já
lá está.

--- appa

Cláudia Amorim

unread,
Jun 23, 2010, 6:17:00 AM6/23/10
to Drupal Portugal
Olá de novo António e comunidade

Na sequência das interessantes dicas, tenho estado a tentar configurar
o panels para 2 variantes a apresentar sempre que é gerado o path
dinâmico de criação de reserva de uma determinada promoção.

Reconheço muito potencial ao Panels, mas a verdade é que para pessoas
menos experimentadas e que ainda não têm a percepção do modo como o
conjunto de peças encaixam, torna-se difícil lidar com este super-
módulo.
Acho que não exagero se disser que está muito mal documentado em
termos de exemplos e operacionalização. Vi todos os vídeos indicados
no Drupal.org que dão umas pinceladas, mas centram-se sobretudo na
parte mais óbvia e que com mais ou menos tentativa-erro se chega lá.
Refiro-me ao Layout e Content. Contudo, a parte dura está no selection
rules e no context, pelo menos para mim.

Vou colocar algumas questões básicas, apelando à vossa generosa
paciência, e aproveito para descrever o que fiz.
À semelhança do Views, compreendi que há uma parte comum e depois os
displays individuais, aqui denominados variantes.

1. Construir o path dinâmico
Coloquei /node/add/%reserva, mas experimentei de tudo e não cheguei a
uma conclusão:
/node/add/reserva/%reserva
/node/add/reserva/%?destination=promocoes
Admito que aqui possa estar o gato!...

2. Nas regras de Access da parte comum, pus os dois tipos de
utilizador e o operador OR na aceitação dos critérios.
User: role Logged in user has role "anonymous user"
User: role Logged in user has one of "authenticated user, cliente,
editor, escritor, gestor"

3. Criei 2 variantes, uma para registado e outra para não registado.
Repeti as regras do acesso em cima e o contexto defini como sendo Node
add form e o tipo de conteúdo "Reserva de promoção"

4. Em Content, na variante sem registo criei conteúdo novo a que
chamei "aviso de registo". Na variante com registo, adicionei o
formulário de criação da reserva, usando a opção Forms > General form.

Testei os previews e tudo parece normal, mas no site, tudo como
dantes. Ora um e outro utilizador podem realizar a reserva sem
diferenciação como se não existisse o panel de condicionamento; ora a
página solicitada não existe, nestes casos devido a uma experiência de
URL dinâmico mais radical.

Compreendo que há distância pouco possam esclarecer-me, por isso
pergunto se não vai contra os estatutos e boas práticas da comunidade
um elemento dispor-se a ajudar outro actuando no próprio website
mediante cedência de password via email. Entendo que isto já passa a
mera consulta e se possa inscrever numa espécie de consultoria, daí
querer saber se estou a abusar e se está previsto algum tipo de
prestação de pequenos serviços quando alguém está literalmente
encalhado.

Desde já muito obrigada
Cláudia

On 22 Jun, 08:49, Antonio P. P. Almeida <peru...@gmail.com> wrote:

Antonio P. P. Almeida

unread,
Jun 23, 2010, 7:44:01 AM6/23/10
to drupal-...@googlegroups.com, claudia....@gmail.com
On 23 Jun 2010 11h17 WEST, claudia....@gmail.com wrote:

> mas experimentei de tudo e não cheguei a
> uma conclusão:
> /node/add/reserva/%reserva
> /node/add/reserva/%?destination=promocoes
> Admito que aqui possa estar o gato!...

O que é que a %reserva? %reserva tem que corresponder a um contexto
que exista. No caso que vem por default do page manager %node é o node
ID.

Tem também uma página de taxonomia que uma vez activada toma conta da
página de taxonomia por omissão do Drupal.

/taxonomy/term/%term - %term = term ID

e ainda uma de utilizador:

/user/%user - %user = user ID

Na página de taxonomia tem o term ID, na página de utilizador tem o
user ID. Donde o contexto para estas páginas são estes.

Quando vais para a página de reservas o que é?

No menú de cada variante tens uma opção que é "contexts". Os contextos
podem ser directos, i.e., derivados de tabelas na DB que estão
directamente relacionados com o conteúdo a ser apresentado, ou de
outra tabela que está relacionada, nesse caso usam-se as
relationships.

Por exemplo se o teu tipo de conteúdo tem termos em vários
vocabulários, no painel da node_view o contexto directo é o termo de
topo da taxonomia, se queres ter um termo de um vocabulário específico
tens que escolher uma relação, neste caso "term from node" e depois
seleccionar o que queres explicitamente. Ao fazeres isso esse contexto
passa a estar disponível e pode ser utilizado na parte do conteúdo do
painel, por exemplo como argumento de uma View.

O que corresponde ao teu %reserva aparece em algum lado nesta página?

> Compreendo que há distância pouco possam esclarecer-me, por isso
> pergunto se não vai contra os estatutos e boas práticas da
> comunidade um elemento dispor-se a ajudar outro actuando no próprio
> website mediante cedência de password via email. Entendo que isto já
> passa a mera consulta e se possa inscrever numa espécie de
> consultoria, daí querer saber se estou a abusar e se está previsto
> algum tipo de prestação de pequenos serviços quando alguém está
> literalmente encalhado.

Acho uma excelente ideia. Se virmos o feed do d.o em paid services há
lá muita coisa desse género. Pessoal encalhado nisto ou naquilo, ou
que precisa de um módulo cola ou custom para uma certa funcionalidade,
ou que não consegue por um módulo a funcionar.

Percebi, eu e todos os que estiveram na oficina, que o Panels é uma
coisa que muita gente quer aprender. O panels é um moving target. Para
perceber bem o panels é preciso perceber bem o CTools que é a base do
Panels e que será também a base do Views.

Talvez esteja na altura de pensar numa acção de formação em torno do
Drupal.

--- appa

Cláudia Amorim

unread,
Jun 24, 2010, 4:13:12 AM6/24/10
to Drupal Portugal
Bom dia António

> O que é que a %reserva? %reserva tem que corresponder a um contexto
> que exista. No caso que vem por default do page manager %node é o node
> ID.
Sinceramente, achei que tinha de adaptar o path ao meu tipo de
conteúdo. Aliás, se editar com o path /node/%node/edit que vem por
defeito no panel node edit, obtenho a resposta de que esse path já
existe, isto logo na 1ª etapa da criação do panel. Eu sei que isto é
ridículo e que não estão presentes princípios fundamentais da
arquitectura e lógica de funcionamento do Drupal, mas a verdade é que
nada disto é evidente.

> Quando vais para a página de reservas o que é?
> O que corresponde ao teu %reserva aparece em algum lado nesta página?
O node "reserva" é o nome de máquina do tipo de conteúdo a criar
sempre que se clica no link do node reference. E quando o coloco no
path do panel (node/add/%reserva), ele surge-me como Argument a que
tenho de atribuir um contexto (escolhi node ID).
Mas sobre este assunto, sugeria um ponto final. Já me convenci que não
sei usar os path dinâmicos, argumentos, contextos e tudo o mais.
Assim, já estive a dar voltas à cabeça para remediar a situação e vou
impedir a vista do link "reservar já" a utilizadores não autenticados,
construindo uma página em que explico a necessidade de registar-se e
aproveito para explicar o modo de funcionamento de todo o processo de
promoções e reservas de produtos.
É preciso reconhecer quando pôr fim à discussão, porque nem sequer
consigo explicar o meu problema.
Fico a aguardar atentamente a possibilidade de uma formação só em
Panels/ Ctools. Não senti dificuldade no CCK nem no Views e em alguns
casos fui capaz de descobrir e ir ensaiando o modo de funcionar.
Tirando o uso de Panels ao nível do Content e Layout, não consigo
tirar mais rendimento.

Acerca do Panels, gostava de saber como me é disponibilizada a opção
"Show layout designer", porque vi isso em pelo menos dois vídeos (ex.
http://www.drupalove.com/drupal-video/panels3-demo-drupalmao-setup),
mas na minha instalação de Panels, mesmo com o Panels Stylizer activo,
isso não acontece. É preciso correr o Panels Everywhere?

> Acho uma excelente ideia. Se virmos o feed do d.o em paid services há
> lá muita coisa desse género. Pessoal encalhado nisto ou naquilo, ou
> que precisa de um módulo cola ou custom para uma certa funcionalidade,
> ou que não consegue por um módulo a funcionar.
Sugeri porque às vezes as questões não são assim tão óbvias e acho
justo que quem dá o seu tempo, seja compensado de alguma forma. Agora
que a moda são os créditos, até era bastante prático usar um sistema
de créditos, oferecendo-se e pedindo-se x créditos para a execução de
uma determinada tarefa.

> Talvez esteja na altura de pensar numa acção de formação em torno do
> Drupal.
Isso, tal como disse acima, é uma excelente ideia, mas acho que seria
mais vantajoso deixar as generalidades e entrar no "core" das
dificuldades mais comuns. Escolher um módulo ou um conjunto de módulos
que cooperam entre si, caso do Panels e CTools, e a partir de casos e
necessidades reais, abordar a forma de os usar e optimizar a sua
exploração.

Obrigada pelo apoio
Cláudia

Antonio P. P. Almeida

unread,
Jun 24, 2010, 5:54:56 AM6/24/10
to drupal-...@googlegroups.com, claudia....@gmail.com
On 24 Jun 2010 09h13 WEST, claudia....@gmail.com wrote:

> Bom dia António
>
>> O que é que a %reserva? %reserva tem que corresponder a um contexto
>> que exista. No caso que vem por default do page manager %node é o
>> node ID.

> Sinceramente, achei que tinha de adaptar o path ao meu tipo de
> conteúdo. Aliás, se editar com o path /node/%node/edit que vem por
> defeito no panel node edit, obtenho a resposta de que esse path já
> existe, isto logo na 1ª etapa da criação do panel. Eu sei que isto é
> ridículo e que não estão presentes princípios fundamentais da
> arquitectura e lógica de funcionamento do Drupal, mas a verdade é
> que nada disto é evidente.

Assim à distância parece-me que não é preciso criar path nenhum, os
que lá vêem já servem. A única coisa que é preciso é criar uma regra
de selecção para o tipo de conteúdo reserva.

Provavelmente isso é no flexible layout. Coisa que nunca usei. Aquilo
é um bocado pesado porque fica tudo na DB. Uso um dos layouts que
existe ou crio o meu próprio.

Experimenta escolher flexible layout e vê se te aparece essa página.

>> Acho uma excelente ideia. Se virmos o feed do d.o em paid services
>> há lá muita coisa desse género. Pessoal encalhado nisto ou naquilo,
>> ou que precisa de um módulo cola ou custom para uma certa
>> funcionalidade, ou que não consegue por um módulo a funcionar.
> Sugeri porque às vezes as questões não são assim tão óbvias e acho
> justo que quem dá o seu tempo, seja compensado de alguma
> forma. Agora que a moda são os créditos, até era bastante prático
> usar um sistema de créditos, oferecendo-se e pedindo-se x créditos
> para a execução de uma determinada tarefa.

A comunidade de drupal portuguesa ainda gatinha. Sabemos que a sua
vitalidade só depende de nós. Ninguém vai promover o drupal se não
formos nós. Por isso acho que o retorno vem sempre ainda que seja
indirecto. Os incentivos são claros.

>> Talvez esteja na altura de pensar numa acção de formação em torno
>> do Drupal.

> Isso, tal como disse acima, é uma excelente ideia, mas acho que
> seria mais vantajoso deixar as generalidades e entrar no "core" das
> dificuldades mais comuns. Escolher um módulo ou um conjunto de
> módulos que cooperam entre si, caso do Panels e CTools, e a partir
> de casos e necessidades reais, abordar a forma de os usar e
> optimizar a sua exploração.

Vamos ver como corre a questão do Drupalcamp. Ainda não é possível
dizer nada de concreto. Estamos na fase das negociações, mas há a
possibilidade de termos um drupalcamp em Lisboa lá mais para o 4º
trimestre. Acho que podemos pensar numa sessão só Panels + CTools.

Entretanto até lá muitas coisas vão mudar, estou certo, no
panels. Ainda ontem houve uma série de commits de coisas novas, que
ainda não espreitei na versão dev do Panels e do CTools.

--- appa

Reply all
Reply to author
Forward
0 new messages