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ès à 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)]
Discussions par date d’activité
16 discussions
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
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
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 ?
Il faut remplacer spip_fetc_row par spip_fetch_array
Répondre à ce message
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
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
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 :
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.
Suivre les commentaires : |