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

7 discussions

  • Bonjour
    Les sites préférés arrivent dans un certain ordre (je ne sais pas trop lequel)
    Peut-on réorganiser cette liste pour choisir un classement préférentiel ?
    Merci
    Cordialement
    http://roch-jaja.nursit.com/

    Répondre à ce message

  • 4

    Quelqu’un utilise cette contrib’ avec spip 1.9 ? Cela fontionne-t-il sans problème, sans modification ? Dans tous les cas, je me charge de tester et de rapporter ici même le résultat.

    • A mon avis elle ne marchera pas telle que sur une 1.9. J’avoue avoir complètement décroché depuis 6 mois. Je suis prêt à filer un coup de main si c’est utile.

      YR

    • Merci yorghos,
      en effet, tel quel, je n’essaie même pas. Je vais donc adapter tout ça, si vraiment ça coince, je viendrais demander de l’aide ici. Affaire à suivre.

    • Effectivement ce serait génial d’arriver à faire un plugin pour la version 1.9. J’ai un petit peu commencer mais je ne suis pas sur de la structure :

      il y aurait à la racine d’un dossier « favoris » les fichiers suivants :

      -  liste_favoris.html :
      établit la liste des favoris en fonction de « id_auteur »

      -  signet.html :
      indique dans un article si celui-ci est dans les favoris en fonction de « id_auteur » (si il est logué ou identifier par un coockie) et de « id_article »
      pourquoi pas permettre depuis ce fichier de pouvoir enlever des favoris ?

      -  favoris_mes_fontions.php :
      ajoute la table « spip_auteurs_favoris »
      -  favoris.xml
      indique le titre et la description du plugins

      dans un dossier « formulaires » il y aurait :
      -  formulaire_favoris.html :
      il affiche le formulaire permettant d’ajouter un article comme favoris ou de l’enlever.

      dans un dossier « balise » il y aurait :
      -  formulaire_favoris.php :
      il récupére les données de « formulaire_favoris.html » et ajoute et retire les articles, au champs « id_article » de la table spip_auteurs_favoris

      Je ne sait pas si il y a des personnes qui essaye de faire la même chose, dans ce cas serait pas mal de le faire ensemble. J’ai poster avant de continuer le travail au cas ou Yorghos ou quelqu’un d’autre est en train de faire la même chose.

    • Bonjour,
      Avez-vous réussi à adapter ce plugin ? Je suis particulièrement intéressée car, ne connaissant pas suffisamment tout ça, je ne sais trop comment faire alors que cette fonctionnalité me faciliterait bien « la vie » :) Dans tous les cas, merci à vous.

    Répondre à ce message

  • Il me semble qui manque le fichier mesfavoris.php(3)..?

    Répondre à ce message

  • 1

    Très intéressant mais cela ne fonctionne pas chez moi. Faut il créer une nouvelle table directement dans mysql ou le script php3 s’en charge t-il ? Merci de cette précision.

    • Désolé, je reprends après une longue absence. Il faut créer la table par phpMyAdmin.

    Répondre à ce message

  • 4

    Pourquoi inclure (liste_favoris) ne m’affiche rien ?

    Pour le reste très bien, mais je n’affiche ni le petit logo ni les favoris

    Il faut faire une boucle speciale ?

    On pourrait avoir un petit exemple STP ? Merci

    • Le petit logo est affiché par le fichier mark_signet.html. Le signet.png doit être placé dans le dossier png du répertoire IMG.

      Pour l’affichage de liste_favoris, as-tu bien recopié le script_favoris (inclus dans le zip) dans ton fichier mes_fonctions.php3 ?

    • J’ai suivi à la lettre ce que j’ai lu et bien entendu le rajout des php dans mes options mais rien ne se passe. J’ai aussi mis le inclure mark devant #TITRE mais je vois pas le logo non plus. en mode debug j’ai ça :

      <script><div align="left">
      &lt;?php
      $contexte_inclus = array('id_article?' => '');
      include('./liste_favoris.php3');
      ?>
      </script>

      Vide ? Pourtant la base est renseignée.

    • C’est marqué dans le texte et je l’ai répété tout à l’heure. Il faut mettre le script dans mes_fonctions.php3, à la racine du site et non dans mes_options qui se trouve dans ecrire. mes_fonctions.php3 est le fichier qui comprend toutes les fonctions personnelles.

      Il est possible de tester la balise #MES_FAVORIS, n’importe où dans le squelette. Elle devrait retourner 10#25#312# etc. Dans la table spip_para_perso il y a quoi ?

    • oui pardon c’est bien dans mes_fonctions à la racine. #MES_FAVORIS ne me retourne rien du tout

      Dans la base spip_para_ il y a Id_auteur et mes_favoris dans id_auteur il y a mon id et dans mes_favoris j’ai une chaine comme 2#3#100#12#

      j’ai rechargé les modules à mettre dans mes_fonctions, des fois que j’aurai mal fait les choses mais rien. Je suis assez surprise et je ne comprends pas.

    Répondre à ce message

  • 4

    Bonjour, j’ai du mal à faire tourner cette contrib non pas qu’elle soit mal expliqué mais parce qu’il y a beaucoup de choses que je ne saisi pas.
    Par exemple ne pas oublier de rajouter devant #TITRE...( quoi exactement ? )
    J’ai crée la table spip_para_perso et un squelette annotation, avecv la boucle de reconnaissance..Je ne vois pas les deux liens et je ne comprends pas cette boucle car si celui qui se logue est 1comite ça ne peut pas marcher ?
    Si je clique sur le bouton add mes favoris dans la page article, je ne provoque rien sur la table...Je suis en 1.8.2
    Je pense que je dois créer d’autres squelettes mais je ne sais pas lesquels..
    Pourriez vous m’aider s’il vous plait car l’idée est géniale !! et j’aimerai bien pouvoir offrir ç à mes membres
    Merci d’avance

    • Dans le zip il manque tous les .html. Normal que ça ne marche pas.

    • oui ça j’ai bien vu.
      Mais lesquels faut ils créer et quoi mettre dedans ?
      Je ne suis pas assez malin pour que cela soit intuitif encore pour moi :o))

    • Je peux vous fournir des exemplaires en privé, car je n’ai plus la main sur la contrib. Envoyez-moi un mail à l’adresse fournie.

    • Merci c’est très gentil et je crois même avoir envoyé deux mails ! Houps :o)
      C’est certain que cela va beaucoup m’aider

    Répondre à ce message

  • 7

    Bonjour,
    Je cherche cette contrib depuis un moment mais je n’arrive vraiment pas à l’installer...
    Je suis sous 1.8, la table spip_para_perso est bien installée mais je n’arrive pas à comprendre les étapes d’installation. Auriez vous un peu plus d’info !
    Merci beaucoup.

    • L’installation ne suffit peut-être pas. Il faut y avoir accès par une déclaration dans mes_fonctions.php3. Le formulaire produit-il le résultat escompté, cad ajouter l’id_article à la liste des favoris : 11#12#55# etc ?

      Il faut aussi que le formulaire soit placé dans un squelette article pour que l’id_article soit accessible et que l’auteur soit authentifié pour récupérer son id_auteur qui est le point d’entrée dans la table para_perso.

      J’ai essayé de relire la contrib qui a été écrite il y a plusieurs mois et il me semble que tout est expliqué.

    • Merci pour ta réponse, j’a progressé un peu mais pas trop...
      Actuellement, dans ma page article j’ai en gros ca :

      <boucle_article>
      <inclure authenticate.php3 //qui reconnait bien l'auteur connecté>
      <formulaire ci-dessus>
      #TITRE
      </boucle_article>

      Le résultat de la requête est
      query=UPDATE spip_para_perso SET mes_favoris='30#' WHERE id_auteur=''result=1
      En gros il ne me prend pas l’auteur dans le formulaire lié à AddToMyFavorites.php3
      L’ordre est-il bon ?

      Second problème, lorsque je force le AddToMyFavorites en mettant en dur l’id_auteur (juste pour voir si ca marche !) : le UPDATE ne fonctionne que si l’id_auteur est déjà présent dans la base, il ne le crée pas...

      Là je sèche...
      Merci de ton aide !

    • Normalement la fonctionnalité n’apparaît utile que si les auteurs sont répertoriés dans la base (déjà inscrits). Sur mon site le bouton vers le formulaire est désactivé si le visiteur n’est pas authentifié. Je cherche à garder la maîtrise sur les utilisateurs du site. Autrement tu risque d’avoir de nombreuses entrées inutiles dans ta table. Si l’utilisateur est authentifié, le formulaire capte son id_auteur et ajoute l’id_article à la liste des favoris.

    • Suaf faute de ma part, j’ai créer une table spip_para_perso, mais elle n’est pas liée a la table spip_auteur. Pour moi aussi, le bouton n’apparait que pour les utilisateurs enregistrés mais comment son t-il inscrit dans la base spip_para_perso ???
      Merci de ta rapidité !

    • Tu as raison, la première entrée dans la table n’est pas prévue dans le script. La contrib ayant été écrite avant la 1.8 et l’ajout de tables, à l’origine (c’est le fonctionnement que j’ai conservé) les favoris sont stockés dans un champs ad hoc de la table spip_auteurs (champs extra sous la 1.7).

      Je ne sais pas trop quelle est la meilleure solution. Je dispose d’une autre version des scripts AddToMyFavorites et DelFromMyFavorites qui travaillent sur la table des auteurs, mais je ne sais pas s’il est possible de l’ajouter à la contrib. Sinon, je peux les envoyer en privé.

    • Avec plaisir et si ce n’est pas trop abusé, ton squelette article.chtmeleu en plus, sinon, je me débrouillerais...
      Merci encore !

    • Voilà je te suggère de rajouter en bas du fichier AddToMyFavorites.php3 les lignes

      else {
      spip_query ("INSERT INTO spip_para_perso (id_auteur, mes_favoris) VALUES ($id_auteur, $mes_favoris)");
      }

      Je n’ai pas testé mais il ne devrait pas avoir de problème. En ce qui concerne le squelette article.html, il comporte plusieurs autres fonctionnalités, toutes à bases d’inclure, qui font qu’il n’est pas transposable tel que. S’il y a un aspect spécifique qui t’intéresse envois moi un message via la liste de diffusion de SPIP.

    Répondre à ce message

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