Next: Utiliser une base de
Up: Utiliser des Scripts Python
Previous: Un exemple simple
  Contents
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