• Produit perso, Id et formulaire
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:10Tout 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:25Avec 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....






