Les liens automatiques

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Cette contribution vous permettra de définir une série de mots qui se transformeront automatiquement en liens sur toutes les pages de votre site et ce via l’espace d’administration.

Cela peut s’avérer fort utile pour monter facilement un glossaire ou proposer à l’instar des actualités de Yahoo, certains liens relatifs (vers des images, rubriques ou fiches disponibles ailleurs sur le site, par exemple).

Mise en place

Installation de la table mysql

A l’aide de phpmyadmin par exemple, créez la table suivante sur votre base SPIP :

CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9hdXRvbGlua3M8L2NvZGU+"></span> (
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWQ8L2NvZGU+"></span> int(11) NOT NULL auto_increment,
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bW90PC9jb2RlPg=="></span> varchar(50) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dXJsPC9jb2RlPg=="></span> varchar(255) NOT NULL default '',
  KEY <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWQ8L2NvZGU+"></span> (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWQ8L2NvZGU+"></span>)
) TYPE=MyISAM AUTO_INCREMENT=0 ;

Interface d’administration

Créez le fichier autolinks.php3 avec le code suivant ou téléchargez le ici :

<?php

//GPL LINAGORA SSLL 2004

include ("inc.php3");
debut_page("Liens automatiques", "documents", "autolinks");
echo "<br><br><br>";
gros_titre("Les liens automatiques");

debut_gauche();

echo "<FONT SIZE=2 FACE='Georgia,Garamond,Times,serif'>";

if ($connect_statut != "0minirezo" OR !$connect_toutes_rubriques) {
	echo "<B>Vous n'avez pas acc&egrave;s &agrave; cette page.</B>";
	exit;
}

$a = $_POST['a'];
if($a){
	if($a == "manage_post"){
		$delete = $_POST['delete'];
		if($delete){
			$msg = $_POST['msg'];
				foreach ($msg as $id => $val) {
					spip_query("DELETE FROM spip_autolinks WHERE id='$id'"); 
				}
		}
	}
	if($a == "new"){
		$mot = $_POST['mot'];
		if($mot){
			$mot = addslashes($mot);
			$url = addslashes($url);
				spip_query("INSERT into spip_autolinks VALUES('',  '$mot', '$url')");
		}
	}	
}

echo '<b>Nouveau lien automatique</b><br><br>'
.'<table cellpading="3" cellspacing="1">'
.'<form method="post" action="autolinks.php3">'
.'<tr><td>Mot: <input type="text" name="mot" size="50" maxlength="50"></td></tr>'
.'<tr><td>URL: <input type="text" name="url" size="50" maxlength="255"></td></tr>'
.'<td><input type="submit" value="Poster"></td></tr><input type="hidden" name="a" value="new"></form></table>';
echo '<br><br><b>Liens actifs</b><br><br>'
.'<table width="500" cellpading="3" cellspacing="1">'
.'<form method="post" action="autolinks.php3">';
$result = spip_query("SELECT id, mot, url FROM spip_autolinks order by id DESC");
while(list($id, $mot, $url) = spip_fetch_row($result)){
	$mot = stripslashes(htmlentities($mot));
	$url = stripslashes(htmlentities($url));
	echo "<tr><td><input type=\"checkbox\" name=\"msg[$id]\"></td><td>$mot => $url</td></tr>";
}
echo '<tr><td></td><td><input type="hidden" name="a" value="manage_post"><input type="submit" name="delete" value="Effacer la selection"></td>';
echo '</form></tr></table>';
echo "</FONT>";
fin_page();

?>

Puis placez-le dans votre répertoire ecrire/

Edition du fichier mes_fonctions.php3

Ajoutez dans votre fichier mes_fonctions.php3, présent à la racine de votre site, la fonction PHP suivante :

function autolinks ($texte) {
	$result = spip_query("select mot, url FROM spip_autolinks order by id");
	while (list($word, $val) = spip_fetch_row($result)) { 
		$mot[] = " $word ";
		$recherche[] = " <a href=\"$val\" class=\"spip_auto\">$word</a> ";
	}
	$texte = str_replace ($mot, $recherche, $texte);
	return $texte;
}

Définition des liens automatiques

Connectez-vous à votre espace d’administration, puis accédez à la page d’administration en vous rendant sur le fichier http://www.votresite.tld/ecrire/autolinks.php3

Renseignez le formulaire en indiquant le mot à recherché et l’url correspondante.

Le nombre de liens est illimités. Vous pouvez mettre des liens relatifs ou absolus. A noter egalement que les mots recherchés sont sensibles à la casse et doivent être isolés d’un espace de chaque coté.

Vous pouvez mettre très facilement un raccourci dans votre barre de navigation vers cette page d’administration, en suivant notre astuce présente sur cette page.

Edition de vos squelettes

Enfin, éditez vos squelettes en spécifiant pour chaque élément affichés s’ils doivent être traités ou non.

Exemple :

- [(#DESCRIPTIF|autolinks)]
- [(#TEXTE|autolinks)]
- [(#PS|autolinks)]

Discussion

16 discussions

  • olivier

    Bravo pour la contribution !

    J’ai installé la fonction, et ça ne marche que si je renseigne directement la base de données !
    Avec SPIP 1.7.2, impossible d’ajouter ou de modifier des enregistrements : SPIP affiche bien le contenu, mais ne va pas plus loin !

    Frustrant...

    Une idée ?

    Répondre à ce message

  • 2

    Bonjour

    Merci pour cette contrib Impec !!!

    Betise ou pas ?
    pour l’explication de chaque mot, dans une rubrique « glossaire »
    j’ai 26 articles (de A à Z) .

    Est il envisageable (et comment faire ) lorsque je clique sur un mot dans le site, d’ouvrir l’article X du glossaire mais juste à l’endroit où est donné la bonne definition ? afin d’éviter d’avoir à faire defiler toute la page pour le rechercher ?

    Amicalement

    Eric

    • Salut Eric,

      Il te suffit de mettre une ancre à côté du terme de la définition dans ta page glossaire.html ou de lui donner un « id ». Ensuite, dans le panneau d’admin, au lieu de mettre l’url suivante glossaire.html, par ex, tu mets glossaire.html#nom_de_l_ancre

      Normalement, ça devrait être bon ;)

      Je n’ai pas installé cette fonction, donc je ne peux pas tester, tiens nous au courant ;)

    • Merci Azon

      je teste et transmets le resultat

      AMicalement

      eric

    Répondre à ce message

  • 1

    depuis que j’ai upgradé à la version 1.8b2 ca ne fonctionne plus !

    Fatal error : Call to undefined function : spip_fetch_row() in /home/monsite.com/html/mes_fonctions.php3 on line 65

    Une idée ?

    Répondre à ce message

  • Fabrice WANG

    Excellent ! Toutefois, les mots doivent être écrits avant d’être présents dans les articles.

    Est-ce qu’on ne peut pas les rendre actifs à posteriori ?

    Répondre à ce message

  • 2

    Je suis un novice. Mais je ne comprends pas ce qu’il convient de faire « A l’aide de phpmyadmin par exemple, créez la table suivante sur votre base SPIP ». Comment crée t-on cette table ; pour le reste j’ai pigé. merci de vos lumières.

    • en fait tu dois avoir sur ton espace web, le logiciel php my admin installé.
      si ce n’est pas le cas, regarde sur l’aide de ton hébergeur, le support, cela doit être expliqué comment faire.
      sinon tu fais une recherche sur google php my admin. tu devrais trouver comment faire...
      ce logiciel te permet de gérer tes bases de données.
      une fois que tu as accédé à ta base de donnée sur laquelle spip est installé, tu vas dans l’onglet sql, qui te permet d’exécuter des requêtes sql.
      et là tu rentres cela dans le champ :

      CREATE TABLE spip_autolinks (
      id int(11) NOT NULL auto_increment,
      mot varchar(50) NOT NULL default ’’,
      url varchar(255) NOT NULL default ’’,
      KEY id (id)
      ) TYPE=MyISAM AUTO_INCREMENT=0 ;

      tu éxécutes et cela te créer une table spip_autolinks similaire aux autres tables spip_qlqchose.

      ce n’est pas bien compliqué, il faut juste que tu arrives à installer phpmyadmin, que tu arrives à y accéder, et que tu comprennes son fonctionnement.
      il y a de nombreuses aides et tutoriels sur le net pour cela.

      courage !

    • C’est bon. Merci infiniment. Explication on ne peut plus claire.

    Répondre à ce message

  • 1

    bonjour,
    félicitations, cela marche parfaitement.
    par contre, comment faire pour que cela prenne en compte des groupes de mots, une expression telle « lien hypertexte » ?

    • en fait je répond partiellement à ma question :
      la fonction php va inspecter le code source de votre page (avec toutes les balises, etc).
      je n’arrivais pas à faire des autolinks sur des mots sur lesquels j’avais mis du gras dans spip

      mot comme cela.

      il suffit en fait de copier/coller une seconde fois la fonction autolinks dans mes fonctions.php3, de la renommer autolinks2 par exemple et de lancer la requête dans le code source de la sorte :

      function autolinks2 ($texte)
      $result = spip_query(« select mot, url FROM spip_autolinks order by id ») ;
      while (list($word, $val) = spip_fetch_row($result))
      $mot[] = ">$word<" ;
      $recherche[] = ">$word<" ;

      $texte = str_replace ($mot, $recherche, $texte) ;
      return $texte ;

      votre mot en gras étant encadré par mot, la fonction autolinks ne trouvait pas d’espace des deux côtés du mot... et si vous vous contentiez d’enlever les espaces il pouvait chercher le mot dans n’importe quel autre mot.
      exemple : si vous faisiez une recherche sur « cure » il pouvait vous faire un lien dans oc« cure »nce. :)
      avec cette méthode cela permet de cibler et adapter votre recherche.
      ça peut être décliner sous n’importe quelle forme.
      on peut donc faire des autolinks sur des mots et des expressions, même s’ils ont une mise en forme particulière.

      hope it helps :)

      terant

    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