Registrare una viewlet solo una z3c.form

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Registrare una viewlet solo una z3c.form

SauZheR at gOOgle
Salve a tutti,
volevo visualizzare una viewlet prima di z3c.form per dare informazioni di contesto durante la compilazione del form.

Inizialmente mi sembrava un compito piuttosto semplice.
 - ho la mia z3c.form che implementa mio.prodotto.IMiaForm
 - ho la mia viewlet perfettamente funzionante

Pensavo bastasse qualcosa del tipo
 <browser:viewlet
     ...
      class=".miaform.classeForm"
      for="mio.prodotto.IMiaForm"
      />

E immaginavo che quel  for="mio.prodotto.IMiaForm" si occupasse di tutto.
Invece non c'e' stato verso.

Ho risolto registrando la viewlet direttamente sul contesto (e non sulla form)
Facendo l'override della __call__ della mia z3c.form in cui marco la request
Testando poi se la request e' marcata nella def render() della viewlet.
Ma ovviamente tutto cio' mi sembra un workaround per qualcosa che dovrebbe funzionare liscio.

La domanda e': l'idea iniziale che avevo e' sbagliata?

Grazie a chi vorra' illuminarmi,
alessandro.

--
  bye
SauZheR
************************************
l'iterazione è umana...
la ricorsione, Divina!
************************************
reply to: sauzher AT gmail DOT com

_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
Reply | Threaded
Open this post in threaded view
|

Re: Registrare una viewlet solo una z3c.form

alepisa
2015-05-25 14:53 GMT+02:00 SauZheR <[hidden email]>:

> Salve a tutti,
> volevo visualizzare una viewlet prima di z3c.form per dare informazioni di
> contesto durante la compilazione del form.
>
> Inizialmente mi sembrava un compito piuttosto semplice.
>  - ho la mia z3c.form che implementa mio.prodotto.IMiaForm
>  - ho la mia viewlet perfettamente funzionante
>
> Pensavo bastasse qualcosa del tipo
>  <browser:viewlet
>      ...
>       class=".miaform.classeForm"
>       for="mio.prodotto.IMiaForm"
>       />
>

Forse non vuoi una viewlet... ma un template.

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      i18n:domain="plone"
      metal:use-macro="context/main_template/macros/master">

    <metal:block fill-slot="main">
        <div id="content-core">
            <metal:block use-macro="context/@@ploneform-macros/titlelessform">
                <metal:block fill-slot="description">
                    <p class="discreet">
                        Benvenuto. Compila il questionario e procedi.
                    </p>
                </metal:block>
            </metal:block>
        </div>
    </metal:block>

</html>

Se poi vuoi registrarci un viewlet manager fai pure.
--
@ale_pisa - http://alepisa.blogspot.com
_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
Reply | Threaded
Open this post in threaded view
|

Re: Registrare una viewlet solo una z3c.form

Giorgio Borelli
In reply to this post by SauZheR at gOOgle
ciao,

Il giorno 25 maggio 2015 14:53, SauZheR <[hidden email]> ha scritto:
Salve a tutti,
volevo visualizzare una viewlet prima di z3c.form per dare informazioni di contesto durante la compilazione del form.

Inizialmente mi sembrava un compito piuttosto semplice.
 - ho la mia z3c.form che implementa mio.prodotto.IMiaForm
 - ho la mia viewlet perfettamente funzionante

...


E immaginavo che quel  for="mio.prodotto.IMiaForm" si occupasse di tutto.
Invece non c'e' stato verso.
...
La domanda e': l'idea iniziale che avevo e' sbagliata?

l'dea iniziale non è sbagliata ma penso che il problema sia che l'interfaccia da mettere dentro al parametro "for" della viewlet dovrebbe essere quella implementata dal FormWrapper della form... un esempio che dovrebbe funzionare è il seguente:

@zope.interface.implementer(IMyformView)
class MyFormWrapper(plone.app.z3cform.layout.FormWrapper):
    pass

class MyForm(z3c.form.form.Form):
    fields = z3c.form.field.Fields(MySchema)(IMyForm)

MyForm = plone.app.z3cform.layout.wrap_form(MyForm, __wrapper_class=MyFormWrapper)

e dato tutto ciò la tua viewlet dovrebbe diventare:

 <browser:viewlet
     ...
     for="......IMyformView" />


fammi sapere se funziona

--
Giorgio Borelli
Project Manager

>_
abstract.it - +39 06 92946938
...............................................................................
Registro Imprese di Napoli 788429 / Cap. Soc. 10.000 Euro I.V.
Avvertenze Legali - D. Lgs. 196/03 Tutela dei dati personali. Le informazioni
contenute in questo messaggio e in ogni eventuale allegato sono riservate e
ne è vietata ogni forma di diffusione. Se avete ricevuto questa comunicazione
per errore, Vi preghiamo di informare immediatamente il mittente del messaggio
e di eliminare l'e-mail.

_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
Reply | Threaded
Open this post in threaded view
|

Re: Registrare una viewlet solo una z3c.form

SauZheR at gOOgle
Grazie ad entrambi per le risposte.
x Alessandro, ho proprio bisogno di un viewlet, non di ridefinire il template, e di viewlet manager mi dovrebbero bastare quelli esistenti. La logica in cui mi muovo di solito e' di sfruttare il piu' possibile gli automatismi dei vari framework... se mi devo fare sempre i template a mano torno a CMFFormController (che mi ha dato tante soddisfazioni) :P

X Giorgio
Avevo fatto a meno del metodo wrap_form, poiche' il form veniva comunque renderizzato plonestyle... e non ne ho sentito il bisogno. Tuttavia anche implementando una classe wrapper e passandola esplicitamente al wrap e quindi registrare la viewlet per questa classe... non e' servito.
La viewlet non viene calcolata tra le papabili per il contesto. Grazie del tentativo.

Per il momento torno al workaround che avevo trovato... se qualcuno si dovesse imbattere in un esempio di viewlet specifica per una form sono tutto orecchie ;)

a presto,
alessandro.



Il giorno 25 maggio 2015 22:15, Giorgio Borelli <[hidden email]> ha scritto:
ciao,

Il giorno 25 maggio 2015 14:53, SauZheR <[hidden email]> ha scritto:
Salve a tutti,
volevo visualizzare una viewlet prima di z3c.form per dare informazioni di contesto durante la compilazione del form.

Inizialmente mi sembrava un compito piuttosto semplice.
 - ho la mia z3c.form che implementa mio.prodotto.IMiaForm
 - ho la mia viewlet perfettamente funzionante

...


E immaginavo che quel  for="mio.prodotto.IMiaForm" si occupasse di tutto.
Invece non c'e' stato verso.
...
La domanda e': l'idea iniziale che avevo e' sbagliata?

l'dea iniziale non è sbagliata ma penso che il problema sia che l'interfaccia da mettere dentro al parametro "for" della viewlet dovrebbe essere quella implementata dal FormWrapper della form... un esempio che dovrebbe funzionare è il seguente:

@zope.interface.implementer(IMyformView)
class MyFormWrapper(plone.app.z3cform.layout.FormWrapper):
    pass

class MyForm(z3c.form.form.Form):
    fields = z3c.form.field.Fields(MySchema)(IMyForm)

MyForm = plone.app.z3cform.layout.wrap_form(MyForm, __wrapper_class=MyFormWrapper)

e dato tutto ciò la tua viewlet dovrebbe diventare:

 <browser:viewlet
     ...
     for="......IMyformView" />


fammi sapere se funziona

--
Giorgio Borelli
Project Manager

>_
abstract.it - <a href="tel:%2B39%2006%2092946938" value="+390692946938" target="_blank">+39 06 92946938
...............................................................................
Registro Imprese di Napoli 788429 / Cap. Soc. 10.000 Euro I.V.
Avvertenze Legali - D. Lgs. 196/03 Tutela dei dati personali. Le informazioni
contenute in questo messaggio e in ogni eventuale allegato sono riservate e
ne è vietata ogni forma di diffusione. Se avete ricevuto questa comunicazione
per errore, Vi preghiamo di informare immediatamente il mittente del messaggio
e di eliminare l'e-mail.

_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html



--
  bye
SauZheR
************************************
l'iterazione è umana...
la ricorsione, Divina!
************************************
reply to: sauzher AT gmail DOT com

_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
Reply | Threaded
Open this post in threaded view
|

Re: Registrare una viewlet solo una z3c.form

Riccardo Lemmi-3
On Tuesday 26 May 2015, SauZheR wrote:

> Grazie ad entrambi per le risposte.
> x Alessandro, ho proprio bisogno di un viewlet, non di ridefinire il
> template, e di viewlet manager mi dovrebbero bastare quelli
> esistenti. La logica in cui mi muovo di solito e' di sfruttare il
> piu' possibile gli automatismi dei vari framework... se mi devo fare
> sempre i template a mano torno a CMFFormController (che mi ha dato
> tante soddisfazioni) :P
>
> X Giorgio
> Avevo fatto a meno del metodo wrap_form, poiche' il form veniva
> comunque renderizzato plonestyle... e non ne ho sentito il bisogno.
> Tuttavia anche implementando una classe wrapper e passandola
> esplicitamente al wrap e quindi registrare la viewlet per questa
> classe... non e' servito. La viewlet non viene calcolata tra le
> papabili per il contesto. Grazie del tentativo.
>
> Per il momento torno al workaround che avevo trovato... se qualcuno
> si dovesse imbattere in un esempio di viewlet specifica per una form
> sono tutto orecchie ;)
>
> a presto,
> alessandro.
>
>
Quello che conta è il context e nel caso della form non è la form stessa
ma il primo "content component" presente nel path, per quello non si
attiva la viewlet. Potresti provare a forzare nell'init della form, o in
altro punto prima della renderizzazione, il context:

  self.context=self

e vedere cosa succede.

--
Riccardo Lemmi
Über Developer
http://www.reflab.com

_______________________________________________
Plone-IT mailing list
[hidden email]
https://lists.plone.org/mailman/listinfo/plone-plone-it
http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html

signature.asc (205 bytes) Download Attachment