Sélectionner des pages d’un site dans une liste de favoris

Comment créer une liste d’articles favoris et y accéder directement

Nota SPIP-Contrib : une contrib à actualiser pour SPIP 1.9 et suite, mais dont le concept reste intéressant.

Voir désormais le plugin Mes Favoris 2.0

Dans des sites proposant des contenus complexes, dont seules quelques pages peuvent intéresser le lecteur, il est important de pouvoir créer une liste de pages sélectionnées, propres au site et sans surcharger le dossier de signets du navigateur. Ce point fait partie des fonctionnalités de Agora qui peuvent être implementées dans SPIP, grâce aux nouvelles possibilités de la version 1.8, de façon beaucoup plus souple.

La démarche suivie

1) Où conserver les favoris

Le nouveau compilo permet d’ajouter une nouvelle table facilement. Evidemment, ajouter une table avec juste deux colonnes : id_auteur et mes_favoris n’est pas la solution la plus simple. Cependant la création de la nouvelle table permet l’utilisation d’une nouvelle boucle et du champs mes_favoris comme balise. Voir dans le spikini pour plus d’informations.

2) Quelle information conserver

Dans la mesure où il s’agit de sélection d’articles, les id_article devraient suffire

3) Par où commencer ?

Les favoris étant personnels, il faut s’identifier pour pouvoir accéder à cette fonctionnalité. Le statut visiteur correspond à toutes les situations (pas d’accès à l’interface privée, identifiant et mot de passe attribués par un administrateur). Ce statut fonctionne avec la balise #LOGIN_PUBLIC et nécessite l’activation des forums sur abonnement sur le site documentation. Pour bien comprendre le fonctionnement de l’authentification telle que je l’utilise, il faut lire l’article qui lui est consacré. La contribution n’est prévue que dans ce contexte (utilisation de la balise #LOGIN_PUBLIC), sachant que tout auteur authentifié (visiteur, rédacteur ou administrateur) peut y avoir accès.

Les éléments nécessaires

Quelques connaissances sur le fonctionnement du nouveau compilo.

1) Authentification

J’utilise ce bout de code placé dans un fichier séparé que j’inclus dans les squelettes protégés.

<BOUCLE_qui(AUTEURS){tout}{nom}>
	<div class="petitexte" style="padding:5px;"><strong>#NOM</strong> vous êtes authentifié [<a href="#URL_LOGOUT" class="lpetitexte">se déconnecter</a>]
	<BOUCLE_moi(AUTEURS){tout}{id_auteur}{statut==0minirezo}> 
	<a href="./ecrire" class="lpetitexte">[administration]</a>
	</BOUCLE_moi>
	</B_moi>
	<//B_moi>
	</div>
</BOUCLE_qui>

2) Un formulaire pour choisir ces favoris

Formulaire de sélection à inclure dans article.html

Deux boutons doivent permettre d’ajouter ou de retirer un article de la liste des favoris :

<table width="40%" cellpadding="10">
  <tr>
    <td><form name="ajoute" action="AddToMyfavorites.php3" method="post" />
<input name="id_article" type="hidden" value="[(#ENV{id_article})]" />
<input name="nom" type="hidden" value="[(#ENV{nom})]" />
<div align="center">
<input name="Add" type="submit" value="Ajouter aux favoris" />
</div>
</form></td>
    <td><form name="retire" action="DelFromMyfavorites.php3" method="post" />
<input name='id_article' type='hidden' value='[(#ENV{id_article})]' />
<input name='nom' type='hidden' value='[(#ENV{nom})]' />
<div align="center">
<input name="Add" type="submit" value="Retirer des favoris" />
</div>
</form></td>
  </tr>
</table>

3) La page d’appel

Sachant que l’on conserve des id_articles, il est logique d’ajouter le double formulaire à un squelette article, sous forme d’inclure.

4) Le retour et la visualisation

A la validation on provoque le rechargement de la page, ce qui permet d’afficher avec un filtre ad hoc un symbole à côté du titre.

Article inclus dans les favoris

En résumé, la distribution comprend :
-  Un fichier avec les deux formulaires pour ajouter ou retirer des favoris
-  Les fichiers AddToMyfavorites.php3 et DelFromMyfavorites.php3 qui sont des scripts php à placer à la racine du site
-  Un fichier script_favoris.php3 qui correspond au filtre à appliquer à la balise #MES_FAVORIS, qu’il faut recopier dans mes_fonctions.php3.
Ce dernier comporte deux branches. Grâce à un flag passé en paramètre, dans un cas il ira chercher le symbole du signet (squelette mark_signet.html/.php3), dans l’autre il crééra la liste des articles favoris dans un squelette liste_favoris.html/php3. Les deux couples font partie de la distribution.
-  Un fichier script_nouvelle_table.php3, également à recopier dans mes_fonctions.php3.

L’ensemble du système a été développé dans un soucis de modularité pour qu’il puisse être adapté aux squelettes de chacun. Il comprends de nombreux fichiers, mais devrait s’adapter à toutes les situations. Il ne faut pas oublier :
-  Dans le couple favorites.php3/.html l’id_auteur est récupéré dans le contexte. Par contre l’id_article doit être passé en paramètre : <INCLURE(favorites.php3){id_article}>
-  Ajouter <INCLURE(mark_signet.php3)> juste devant le #TITRE du squelette article.html
-  Ajouter <INCLURE(liste_favoris.php3)> dans le squelette où la liste des articles sélectionnés sera affichée.
-  De mettre, le cas échéant les .html correspondants dans votre dossier squelettes.
-  Créer la nouvelle table dans votre base de données : para_perso avec comme champs id_auteur (bigint(21)) et mes_favoris (varchar(255)).

Cette contribution utilise énormément le principe des variables de contexte. Le code nécessaire est inclus dans les fichiers .php3. Ceci signifie que leur fonctionnement est prévu en tant qu’INCLURE et non comme code à recopier dans vos squelettes.

Discussion

Une discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom