next up previous contents
Next: Utiliser une base de Up: Utiliser des Scripts Python Previous: Un exemple simple   Contents

Un script complexe

Voici un script plus compliqué : il permet de poster des news. voici le formulaire d'entrée add_newz :
<dtml-var standard_html_header>
<form action="action_add_newz" method="post">
titre : <input type="text" name="titre"><br>
texte : <textarea name="texte" rows="4" cols="50">
</textarea>
<input type="hidden" name="fdate" value="<dtml-var ZopeTime fmt="%d/%m/%Y">">
<input type="submit" value="envoyer">
</form>
<dtml-var standard_html_footer>
Trois paramètres sont envoyés : titre, texte et fdate. On remarque que fdate est générée par la méthode ZopeTime. Voici la méthode DTML action_add_newz qui récupère ces paramètres.
<dtml-var standard_html_header>
<dtml-call expr="addnewz(titre,texte,fdate)">
<h1> nouvelle ajoutée !</h1>
<p><a href="add_newz">retour</a></p>
<dtml-var standard_html_footer>
Cette méthode appelle le script addnewz avec les bons paramètres. Voici le script Python addnewz :
## on crée l'identifiant de la news
id='news_%d' % len(context.news.objectIds())
## on crée un objet DTML et on lui affecte la news
context.news.manage_addProduct['OFSP'].manage_addDTMLDocument(id,title=titre,file=texte)
## on prend ce document
doc=getattr(context.news,id)
## on lui ajoute la propriété date
doc.manage_addProperty('date', fdate, 'string')
On aura pris soin de placer titre, texte et fdate dans le champ Arguments du script. Modifions maintenant le document DTML index_html pour visualiser les news :
<dtml-var standard_html_header>
<h2><dtml-var title></h2>
<dtml-in "news.objectValues()" size="3" start="0" sort="name" reverse>
 <hr>
 <p>
 <b><dtml-var sequence-var-date></b><dtml-var sequence-var-title><br><br>
 <dtml-var sequence-item><br>
 </p>
</dtml-in>
<hr>
<a href="add_newz">Ajouter une nouvelle</a>
<dtml-var standard_html_footer>
La balise <dtml-in ...> permet de boucler sur une liste d'éléments. La méthode news.objectValues() permet de scanner le répertoire news. sequence-var-[...] permet d'accéder aux variables de l'item en cours. On se réfèrera au Zope-book 2pour de plus amples détails.

Benoît Rouits 2001-05-03