Accueil » Zope » Forum Zope » Forum Général Zope » Produit perso, Id et formulaire

 • Produit perso, Id et formulaire

Document Actions
Réponses: 3   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • Produit perso, Id et formulaire

Posté par newbees le 17/03/2008 11:34
Bonjour,
J'ai créé un nouveau type dans mon site plone et j'ai quelques difficultées a le customizé.
1 - Définition Title et Id
Mon produit comporte des champs que les utilisateurs renseignent pour sa création.
Je cherche a automatiser la génération du titre et de l'id de l'objet en fonction de ces champs.
Le schéma de mon type est le suivant :
----
MyBaseSchema = BaseSchema.copy()
MyBaseSchema['title'].widget.visible = {'edit':'invisible', 'view': 'visible'}
MyBaseSchema['title'].required = 0
MyBaseSchema['title'].mutator = setTitle

schema = MyBaseSchema + Schema((
StringField('A',searchable=1,required=1,default='5',vocabulary=A_GROUPS,widget=SelectionWidget(format='select'),),
StringField('B',searchable=1,required=1,default='5',vocabulary=B_GROUPS,widget=SelectionWidget(format='select'),),
StringField('C',searchable=1,required=1,default='5',vocabulary=C_GROUPS,widget=MultiSelectionWidget(format='select'),),
StringField('C',searchable=1,required=1,default='5',vocabulary=D_GROUPS,widget=MultiSelectionWidget(format='select'),),
)) ----

Je cherche a générer son titre en fonction du champs A .
J'ai donc étendu ma class avec ceci :
----
security.declarePrivate(ModifyPortalContent,'setTitle')
def setTitle(self, value, **kwargs):
id=value.get('A', ' ')
self.setTitle(id)
self.getField('id').set(self, value, **kwargs)
----

Mais rien a faire j'ai une erreur !!!
Quelqu'un pourrait m'aider.

2 - Les champs du formulaire
Est-il possible de définir le contenu d'un champs en fonction du choix fait au champs précédent ?
Je m'explique:
Pour mon produit précédent j'ai définit des champs a renseigner.
Je voudrais que le contenu du champs B soit définit par le choix fait au champs A et ainsi de suite.
Est-ce possible ?

Merci a tous pour votre aide.
  •  • Re: Produit perso, Id et formulaire

    Posté par encolpe le 17/03/2008 14:49
    >> security.declarePrivate(ModifyPortalContent,'setTitle')

    'declarePrivate' empêche cette méthode d'être utilisée depuis un formulaire web
    C'est 'declareProtected' qu'il faut utiliser, et avec une docstring.

    >> Mais rien a faire j'ai une erreur !!!

    Quelle erreur ???

    Autre chose StringField et MultiSelectionWidget ne sont pas compatible si le champs n'est pas multivalué:

    StringField('C',
    searchable=1,
    required=1,
    multiValued=True,
    default='5',
    vocabulary=C_GROUPS,
    widget=MultiSelectionWidget(format='select'),
    ),

    StringField('C',
    searchable=1,
    required=1,
    multiValued=True,
    default='5',
    vocabulary=D_GROUPS,
    widget=MultiSelectionWidget(format='select'),
    ),



    Pour la modification du titre après la création j'utilise plutôt l'API standard:


    security.declareProtected(permissions.ModifyPortalContent, 'at_post_create_script')
    def at_post_create_script(self):
    """ Modify title and id with value coming from designation field
    """
    old_id = self.getId()
    #parent = self.getFolderWhenPortalFactory()
    logger.debug('Are we in portal_factory (creation): %s' % str(self.isTemporary()))
    logger.debug('Old id: %s' % old_id)

    if not self.isTemporary() and old_id.startswith('folder'):

    designation = self.getField('designation').get(self)
    self.getField('title').set(self, designation)
    transaction.savepoint(optimistic=True)

    self._renameAfterCreation(check_auto_id=False)
    logger.debug('New id: %s' % str(self.getId()))
    _________________________
    Encolpe DEGOUTE http://encolpe.degoute.free.fr/ Logiciels libres, hockey sur glace et autres activités cérébrales
  •  • Re: Produit perso, Id et formulaire

    Posté par newbees le 17/03/2008 18:10
    Tout d'abord merci pour ta réponse.

    >>>> Quelle erreur ???
    Mon erreur est que mes objets du type créés sont "broken".

    >>>>> Pour la modification du titre après la création j'utilise plutôt l'API standard:
    Pour cette partie j'avoue rester penaud car je ne sais absolument pas comment utilisé l'API standard dans la définition de mon type.
    A partir de mon code, tu pourrait me dire ce qui ne va pas ?
    Si oui puis-je te l'envoyer par mail ?
  •  • Re: Produit perso, Id et formulaire

    Posté par newbees le 17/03/2008 21:25
    Avec le code suivant (en test)
    def setActionTitle(self,value,**kwargs):
    les_actions=self.portal_catalog(portal_type='Action')
    for laction in les_actions:
    titre=laction.getId()
    if titre.startswith('action'):
    laction.setTitle('tot')
    laction.getField('title').set(self,value,**kwargs)

    Le titre de mon objet change, mais c'est le meme que celui du conteneur.
    Je cherche....