Accueil L’association Fonctionnement du site Liens croisés MMT Echange de liens croisés entre sites des MMT 3/4

Publié le : 21 janvier 2009
Publication antérieure :
19 mai 2007

Imprimer Imprimer cet article

Auteur :
Alain Sichel †

Alain Sichel
Echange de liens croisés entre sites des MMT 3/4
3. Autres scripts PHP

Après les principes sur l’affichage des liens croisés et quelques exemples de scripts PHP affichant la liste des sites je vais complèter par des scripts adaptés à des besoins particuliers. Un autre article présentera l’utilisation sur un site Spip.

 

 Présentation

Le précédent article présente plusieurs exemples de scripts PHP avec pagination :

 liste des liens croisés, ordre aléatoire,
 liste des liens croisés, ordre alphabétique,
 liste des liens croisés, ordre alphabétique plus rigoureux [1],
 liste des tous les sites MMT, ordre alphabétique,
 liste des tous les sites MMT, ordre alphabétique.

Ces présentations esthétiquement différentes peuvent être utilisées quelle que soit la liste à présenter. Nous allons maintenant voir des scripts qui enregistrent toute la liste à afficher dans plusieurs fichiers cache, ce qui donne de nouvelles possibilités :

 liste des tous les sites MMT, ordre aléatoire,
 liste des tous les sites MMT, par catégorie,
 liste des tous les sites MMT, par auteur (classement sur le prénom),
 liste des tous les sites MMT, par auteur (classement sur le nom),
 liste des liens croisés, par auteur (classement sur le nom),
 liste personnelle de sites MMT, ordre alphabétique,
 liste personnelle de sites MMT + liste de liens croisés, ordre alphabétique.

 Tous les sites MMT, ordre aléatoire

La fonction qui permet de mélanger l’ordre des sites est :

usort($items,create_function('$a,$b',' return rand(-1,1);'));

Le script va comporter par rapport aux précédents une boucle qui va mettre en cache tous les fichiers nécessaires à l’affichage de la liste, voilà le résultat, inspiré de la présentation du premier exemple, avec un petit toucan en plus et le classement du site.

 Tous les sites MMT, par catégorie

Il faut donc une fonction pour trier les sites par catégorie, la voici :

usort($items,create_function('$a,$b',' return strcmp(strtoupper($a["category"]),strtoupper($b["category"]));'));

Il est maintenant facile d’ajouter la catégorie. J’ai ajouté à ce script une modification pour que cette indication ne soit pas faite pour chaque site, mais en début de page et quand on change de catégorie, voilà ce que cela donne (présentation inspirée du 2e exemple avec un toucan en plus).

 Tous les sites MMT, par auteur

Pour trier les sites par auteur, la première fonction à essayer est celle-ci :

usort($items,create_function('$a,$b',' return strcmp(strtoupper($a["author"]),strtoupper($b["author"]));'));

Pour présenter par auteur, on va reprendre le principe utilisé dans le script précédent, mais il faut un traitement supplémentaire. En effet, un site, Psy désir a deux auteurs. Alors que le site n’est dans la liste qu’une fois, il va falloir écrire dans la liste ce site une 2e fois pour qu’ils apparaisse avec chaque auteur. Ce travail nécessite une expression rationnelle, je passe les détails et voilà cet exemple (présentation inspirée du 3e exemple.

Evidemment quand on trie par ordre alphabétique l’ensemble Prénom Nom le résultat est dans l’ordre des prénoms. Si on veut que le classement se passe sur le nom de l’auteur, il va falloir faire un traitement différent :

 

usort($items,create_function('$a,$b',' return strcmp(nom_seul($a["author"]),nom_seul($b["author"]));'));

function nom_seul($author) {
  $tab = explode(" - ", $author);
  $nom = strrchr(trim($tab[0]), " ");
  return $nom;
}

Voici l’exemple utilisant ces fonctions et un autre exemple avec la liste de liens croisés santé et quelques changements de présentation.

 Liste personnelle, ordre alphabétique

Aucun MMT n’a besoin d’un script sophistiqué pour afficher quelques liens sur son site, l’intérêt de ce script utilisé seul est très limité. Par contre, le script suivant permet de mélanger cette liste avec la liste de liens croisés, et çà, c’est certainement un des meilleurs outils pour que chaque site ait une liste de liens croisés différente des autres.

Voyons tout d’abord l’affichage d’une sélection personnelle parmi les sites des MMT. Je pourrais, si quelqu’un me le demande, faire un script élaboré qui permette :
 de réaliser en ligne cette sélection personnelle,
 ou de faire un choix aléatoire d’un certain nombre de sites, cette sélection pouvant être modifiée après une période de temps choisie.
Pour le moment, on va faire simple : on prend la liste XML de tous les sites MMT, on l’enregistre sur son disque dur et on l’ouvre avec un éditeur de texte pour effacer les sites et ne garder que ceux que l’on veut dans sa liste personnelle. On renomme le fichier obtenu selection.xml et on le place dans le dossier cache sur son site. Puis on utilise cet exemple pour l’afficher. La présentation est inspirée du 4e exemple (on voit bien que pour une sélection aussi courte le système de pagination est inutile, mais il peut servir pour une liste plus longue).

On va maintenant reprendre cette sélection personnelle pour l’ajouter à la liste des liens croisés. Mais avant cela, il faut une fonction pour supprimer les doublons. La liste des liens croisés peut en effet avoir été mise à jour et mentionner un ou plusieurs sites de sa liste personnelle qui seront alors indiqués 2 fois. Pour éviter cela, voici la fonction à ajouter :

for($i = 0; $i < count($items2); $i++) { // pour chaque lien de la sélection                                                 
  for($j = 0; $j < count($items1); $j++) { //On teste si celui-ci est dans le deuxième tableau
        if ($items1[$j]['link'] == $items2[$i]['link']) {
           unset($items2[$i]); //si c'est le cas on supprime le site de la liste
        }
  }                                               
}

On fusionne ensuite les 2 listes, on les trie par nom [2] :

$items = array_merge($items1,$items2); // on fusionne les 2 tableaux
usort($items,create_function('$a,$b',' return strcmp(supprime($a["title"]),supprime($b["title"]));'));

Et voilà le résultat. Dans cet exemple avec une liste personnelle de 3 sites dont 2 sont déjà dans la liste des liens croisés, seul le 3e a été ajouté.


Autres articles :
1. Principe
2. Affichage par script PHP
4. Affichage sans PHP


 

[1] Les articles Le, La, Les, Dr ou Docteur n’interviennent dans l’ordre alphabétique.

[2] J’utilise pour cela la technique décrite dans Afficher plusieurs flux RSS/Atom sur une page.


Document joint à l'article

liens_croises_2.zip

Bookmark and Share

Imprimer Imprimer cet article