IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Créer un slot dynamique 'liste de liens' dans Plone

29/03/2004

Par Tarek Ziadé
 

Cette recette explique comment créer un slot de type "liste de liens", c'est à dire un slot ou l'utilisateur peut ajouter librement des pages du site pour se construire un menu temporaire rapide.


1. Introduction
2. Principe
3. Création du script d'ajout : basketAdd
4. Création du script de lecture : basketList
5. Création du script de suppression : basketClear
6. Création du slot, enfin !
6. Conclusion


1. Introduction


A la manière des caddies sur les sites marchands, un slot "liste de liens" qui regroupe une liste de liens internes au site peut être pratique pour accélerer le surf. Surtout si le site est riche en documentation.

Nous allons voir dans cet article comment mettre en place ce mécanisme dans le contexte de Plone.

Cet article part du principe que vous êtes un tantinet familier avec Zope et Plone.

Dans le cas contraire, vous pouvez aller faire un tour sur le site de Zope : www.zope.org et celui de Plone : www.plone.org.

Et pour les gens allergiques à l'anglais, sur : www.zopeur.org.


2. Principe


Le principe de ce slot est très simple. En effet il utilise la même mécanique qu'un panier d'achat d'un site commercial pour mémoriser les liens. La mémorisation se fait par le biais des cookies, et plus précisément par l'objet SESSION, qui est un dictionnaire Python dans lequel il est possible d'ajouter des données associées à la session en cours, c'est à dire juste le temps du surf.

La construction de cet outil va se faire en 4 étapes :

  • Création d'un script python d'ajout de lien dans le dictionnaire SESSION
  • Création d'un script python de récupération de la liste des liens
  • Création d'un script python de suppression des liens
  • Création du Slot qui utilise les trois scripts


3. Création du script d'ajout : basketAdd


Le principe du script d'ajout est le suivant : il incrémente dans le dictionnaire une variable qui fournie le nombre de liens et ajoute deux variables pour définir le lien.

La première est le titre du lien et la deuxième l'url.

Ajoutez un nouveau Script Python dans le répertoire portal_skins/custom du site et nommez le "basketAdd".

Dans ce script, la première étape consiste à récuperer le nombre de liens déja présents dans le dictionnaire :

try : urlcount = request.SESSION['URL_COUNT'] int_urlcount  = int(urlcount); except : request.SESSION.set('URL_COUNT','0') int_urlcount = 0
Par ce biais, vous pouvez ajouter un nouveau lien en connaissant le nombre de liens mémorisés et ainsi préparer le nom des variables qui vont êtres ajoutées :

currentlinkurlname = 'URL_'+ str(int_urlcount) currentlinktitlename = 'TITLE_'+ str(int_urlcount)
Reste à présent à associer à ces variables des valeurs.

Le fonctionnement souhaité du slot est le suivant : on souhaite ajouter la page en cours.

Notre script va donc récupérer le lien et le titre de la page affichée comme valeurs :

currentlink = context.absolute_url() currentlinktitle = context.title_or_id() request.SESSION.set(currentlinkurlname,currentlink) request.SESSION.set(currentlinktitlename,currentlinktitle)
Reste à incrémenter le nombre de liens et à revenir sur la page en cours :

int_urlcount = int_urlcount + 1 request.SESSION.set('URL_COUNT',str(int_urlcount)) RESPONSE.redirect(context.absolute_url())
Notre premier script est fonctionnel. Il peut être amelioré en contrôlant pour chaque ajout si la page à ajouter n'est pas déjà dans la liste et limiter le nombre de liens que le slot peut contenir


4. Création du script de lecture : basketList


Le deuxième script, créé dans le même répertoire, va retourner la liste des liens contenus dans le dictionnaire session. Cette liste est une liste de dictionnaire, ce qui va nous permettre dans le slot, de boucler et de récupérer les informations très simplement. Il n'a rien de très original :

listurls = [] try: urlcount = request.SESSION['URL_COUNT'] except: urlcount = '' if urlcount <> '': int_urlcount = int(urlcount) current = 0 while current < int_urlcount : currentlinkname = 'URL_'+str(current) currentlink = request.SESSION[currentlinkname] currentlinknamet = 'TITLE_'+str(current) currenttitle = request.SESSION[currentlinknamet] element = {} element['link'] = currentlink element['title'] = currenttitle listurls.append(element) current = current + 1 return listurls

5. Création du script de suppression : basketClear


Le script de suppression supprime du dictionnaire SESSION les liens. En terme de simplification de code, vous pouvez opter sans y aller par quatre chemins pour la méthode dite du "brutos" en initialisant tout simplement le nombre de liens à 0 :

try : request.SESSION.set('URL_COUNT',0) RESPONSE.redirect(context.absolute_url()) except : RESPONSE.redirect(context.absolute_url()))

6. Création du slot, enfin !


Pour créer le slot simplement, faites un copier-coller des slots disponibles dans les répertoires de Plone et modifiez le nom en : basket_slot

Il faut aussi modifier la définition de macro pour obtenir :

<div metal:define-macro="basketBox">
Cette définition nous permettra par la suite d'ajouter le slot dans le site.

Le slot contient trois parties : La liste des liens, le bouton d'ajout, et le bouton de suppression.

Pour la liste des liens, le script basketList peut être invoqué ainsi :

<table > <tr tal:repeat="liste python:here.basketList()"> <td> <a tal:attributes="href liste/link"> <span tal:replace="liste/title"></span> </a> </td> </tr> </table>
Le bouton d'ajout est un formulaire qui permet d'invoquer le script basketAdd :

<form name="addtoBasket" action="basketAdd"> <input class="noborder" type="submit" width="25" value="Ajouter la page courante" i18n:attributes="value" /> </form>
Enfin, last but not least, le bouton chasse d'eau qui appelle basketClear :

<form name="clearBasket" action="basketClear"> <input class="noborder" type="submit" width="25" value="Vider la besace" i18n:attributes="value" /> </form>
Pour terminer, vous pouvez ajouter au site le slot en modifiant, par exemple, les propriétés de la racine du site. Il suffit de rajouter cette ligne dans la section right_slots ou left_slots :

here/basket_slot/macros/basketBox

6. Conclusion


Vous avez pu constater dans cet article la facilité de personnalisation d'un portail sous Plone.

Bien que cet article ait été conçu à la base pour Plone 1, le portage pour Plone 2 n'est pas compliqué : Les slots deviennent des portlets.

Vous pouvez voir ce code à l'oeuvre sur le site Zopeur.org

Si vous avez des questions relatives à cet article voici mon email : webmaster@zopeur.org



Copyright (c) 2003-2004 Tarek Ziadé. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. Copy of the GNU Free Documentation Licence