Syndiquer par mot-clef (spip 1.7)

All contributions published for previous SPIP versions

Attention ! Cette contribution modifie des fichiers du noyau de SPIP !

Même si elle a été testée par plusieurs utilisateurs nous ne pouvons garantir qu’il n’y aura pas d’effets secondaires dommageables sur votre SPIP. Conservez toujours les fichiers d’origine pour pouvoir revenir au noyau originel.

De plus, elle n’est compatible qu’avec une version précise de SPIP et sera perdue à la prochaine mise à jour : vous devrez donc recommencer.

la distrib standard offre la possibilité de syndiquer des sites rubrique par rubrique. Au prix d’une courte modif, on peut avoir une syndication en fonction d’un mot-clef...

situation :

Je gère un site “maman_poule” dans lequel je souhaite faire apparaître les productions de sites “poussins”.

Problème : les contenus des différentes rubriques de ces sites ne sont pas tous exempts de... scories (les productions des poussins en difficultés sont parfois surprenantes... dans leur diversité) et le nombre de rubriques y est volontairement restreint.
Dans ces conditions, décider de syndiquer c’est donc choisir entre tout-ou-rien et/ou bloquer-débloquer les liens un par un tous les soirs...

solution proposée : syndiquer les mot-clef

  1. sur chaque site poussins, je duplique backend.php3 et backend-dist.html

  2. je renomme les copies en backend-mot.php3 et backend-mot.html
  3. j’édite backend-mot.php3 pour qu’il appèle backend-mot.html :

    $fond = "backend-mot";



  4. ensuite, j’édite backend-mot.html :
    // je remplace
            <BOUCLE_10recents(ARTICLES){lang ?}{branche ?}... >
    // par
            <BOUCLE_10recents(ARTICLES){lang ?}{id_mot ?}... >


    • Dans la version d’origine, le critère branche retourne l’ensemble des articles de la rubrique ET de ses sous-rubriques. Comme il n’est pas possible d’appeler directement une branche en faisant par exemple branche=42 on passe la valeur de branche via l’environnement lors de l’appel de la fonction.
    • Dans la version modifiée, s’agissant de mots-clefs et plus de rubriques, on pourrait écrire l’ID du mot clef qui nous intéresse “en dur” mais ça ne serait guère souple. Il est bien plus facile d’utiliser là encore le “?”, c’est à dire de faire une boucle générique puis, lors de l’appel de celle-ci, d’indiquer la valeur à mettre dans notre variable d’environnement.

  5. enfin, je sauvegarde le tout et l’uploade en ftp sur le site poussins
  6. Là, je note le numéro d’id (xxx) du mot que je veux syndiquer (www.le_site_poussin.net/mot.php3?id_mot=xxx)
  7. puis, dans le site “maman_poule”, je syndique le site poussin avec un lien sur le backend-mot.php3
    // je remplace xxx par l'id du mot-clef que je souhaite remonter
    www.leSitePoussin/backend-mot.php3?id_mot=xxx

Dès lors, le site “maman_poule” verra s’afficher les articles du site poussin affublés du mot-clef choisi et non plus tous les articles de telle ou telle rubrique. Il suffira donc au webmestre du site “poussin” de créer un mot-clef “ça_remonte” ou “notre_best_of” pour choisir lui-même ce qu’il fera publier vers le site “maman_poule”.

pour aller un chouillat plus loin

-  rendre la sélection de ces nouveaux backend accessibles aux rédacteurs sans avoir à noter de n° d’id sur un bout de papier...

Maintenant que mes deux nouveaux fichiers (backend-mot.html et backend-mot.php3 sont sur chaque site “poussin” (et même sur le site “maman_poule”), il convient d’informer les rédacteurs de cette nouvelle possibilité. On va leur permettre de faire du copier/coller :

  1. J’édite donc maintenant le fichier ecrire/synchro.php3

  2. je repère la ligne “$activer_breves = lire_meta(’activer_breves’);”

  3. et juste au-dessus (ou en-dessous, c’est une affaire de goûts), je colle :

    /// suivi RSS par mot clef chez nous le groupe des mots-clefs syndiqué = groupe 8
    /// à faire : remplacer le blabla par une chaine dans le fichier lang
    echo "<p>"._L("Vous pouvez aussi limiter la syndication aux th&egrave;mes qui vous int&eacute;ressent :")."</p>";
    
    $query = "SELECT * FROM spip_mots WHERE id_groupe=\"8\" ORDER BY titre";
    $result = spip_query($query);
    
    if (spip_num_rows($result) > 0) {
       echo "<ul>";
    
       while($row=spip_fetch_array($result)){
          $id_mot=$row['id_mot'];
          $titre_mot = typo($row['titre']);
                            
          echo "<li><a href='$adresse_site/backend-mot.php3?id_mot=$id_mot'><img src='img_pack/xml.gif' border='0' align='middle'> &nbsp; $titre_mot</a>\n";
          }
       echo "</ul>";
    }

  4. enfin, je sauvegarde le tout et l’uploade en ftp sur les sites “poussins” et sur le site “maman_poule”. Désormais, le rédacteur de passsage pourra accèder à la liste de nos “mots-clefs syndiqués” :

updated on 25 February 2007

Discussion

Une discussion

  • 13

    Bonjour,

    Je suis sous spip 1.9.1 et j’essaie de créer une syndication par mot clé. J’ai donc créé un fichier backend-mot.html comme expliqué mais celui-ci n’apparaît pas lors de la tentative de syndication sur le site “mère-poule”. Seul le fichier backend simple apparaît. Si je modifie l’adresse par après, rien ne change...

    • L’article se réfère à une version 1.7.2 et doit encore passer avec une 1.8 quelque chose. Par contre avec une 1.9 et suivante, je n’ai pas eu le temps de me repncher sur la question.
      Dès que possible...

    • Merci pour la réponse ;-)

      Ben voilà, quand cette contrib sera réactualisée pour le 1.9.1 ainsi que le plug-in “Spip_lettres”, tout ira dans le meilleur des mondes du Spip en ce qui me concerne.

    • c’est fait... reste plus qu’à mettre à jour le toutim sur spip-contrib mais ça marche en local avec une 1.9.2alpha svn (ça devrait le faire sans problème avec une 1.9.1).

      J’essaye de te passer le tout en mail perso puis je m’attaque à la mise à jour de l’ancien article.

      romain

    • Pour une 1.9.1, il faut se référer à la nouvelle version de l’article : ici...

    • Bravo. Aussitôt dit...
      Vivement qu’il soit publié car pour l’instant ton lien file vers l’espace privé où je n’ai pas le droit d’aller...

      En tout cas merci, j’ai hâte d’essayer.

    • “ton lien file vers l’espace privé où je n’ai pas le droit d’aller.”

      mais si,
      mais si !

      C’est simple, rapide, sans danger ;-)
      Et puis l’autre côté du miroir permet de s’affranchir des délais de publication qui sont parfois (euh... ont pu être ;-) “un peu long” (parfois).

      Sur la page d’accueil, un login (que tu inventes, plus de 5 lettres) et une adresse mail vailde pour récupérer ton password (que tu pourras modifier une fois à l’intérieur). C’est torché en cinq minutes.

      rom

    • Ben je dois avoir un problème quelque part car j’ai beau vouloir me connecter, j’ai systématiquement un message d’erreur

      “Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies. Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site).”

      Pourtant, je les acceptent ces cookies...

    • Bon, je suis arrivé dans le saint des saints, j’ai tout modifié comme indiqué. Le gros problème, c’est que quand je veux syndiquer le site poussin à partir du site poule, seul le fichier backend de base apparaît. Backend-breves et backend-mots n’apparaissent jamais. Conclusion, j’ai chaque fois tous les articles de toutes les rubriques qui sont syndiqués...

      Où est le problème ?

    • Comme je viens de comprendre (un peu) la création des plugins, j’ai adjoint à la contrib une version fonctionnelle à placer dans le répertoire _plugins_ à la racine du site.

      Ok, ça règle pas ton problème,
      mais bon... ça fonctionne en évitant pas mal de manip.

      rom

    • Ben voilà, le problème est résolu : mon fichier backend-mots était dans le dossier squelettes et non dist...
      Par contre, j’en ai découvert un autre : j’ai environ un quinzaine d’article avec le mot clé en question et seuls trois de ces articles apparaissent sur le site récepteur. Pourquoi les autres restent-ils cachés ?

    • ça peut venir de backend-mots.html lui-même.

      Dedans, à la fin, on trouve normallement :

      <BOUCLE_10recents(ARTICLES) {lang ?}{id_mot ?}
      	{par date}{inverse}{0,10}{unique}>
      <BOUCLE_a(BOUCLE_un_article)></BOUCLE_a>
      </BOUCLE_10recents>
      
      <BOUCLE_tres_recents(ARTICLES){lang ?}{id_mot ?}
      	{par date}{inverse}{age<3}{unique}>
      <BOUCLE_b(BOUCLE_un_article)></BOUCLE_b>
      </BOUCLE_tres_recents>

      Tu peux jouer sur les critères age< xx ou 0,10. Tu peux essayer tous (ou ’tout’,... voilà que j’ai un doute...) jusqu’à trouver le juste équilibre entre tout, trop et trop peu.

      bon règlages !

    • en cadeau bonux, la possibilité de syndiquer les articles selon la langue dans laquelle ils ont été rédigés.

    • Bon, on approche du but : j’ai plus d’articles qui s’affichent, mais ça ne dépasse par le nombre de 10. Malgré que les critères soient tous avec “20” ou “tous”.

    Reply to this message

Ajouter un commentaire

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom