Réécriture url : un propre-qs affichant le descriptif de la rubrique et non le titre ?

Merci beaucoup pour tes conseils. Je vais mettre ce code en application. Juste une précision toutefois pour ne pas risquer de commettre une erreur importante. Si je comprends bien, ce code ne changera pas les urls existantes, mais il s’appliquera pour les nouvelles urls. Pour mettre à jour les url existantes, je dois intervenir sur la bdd. J’ai trouvé ce plugin sur spip qui semble effectuer la même action : http://www.spip-contrib.net/Plugin-Effacer-url-propres.
Est-ce qu’en utilisant ce plugin après avoir modifier le code de mon fichier, j’obtiendrais bien le même résultat qu’en intervenant sur la bdd ?
Merci encore pour ta disponibilité.
Camilou

From: « denisb » <denisb@laposte.net>
camilou wrote:

Merci pour ta réponse.
Toutefois, il m’est certainement possible d’utiliser non pas le titre de la rubrique, mais son descriptif pour l’url, comme je l’ai finalement fait pour les alt des images des logos de la rubrique.
Dans ce cas, je pourrais le renseigner plus précisément.
Voici ma problématique, le service marketing veut des titres concis, pas vraiment explicite en matière de référencement, moi, je veux une association de 2 ou 3 mots qui correspond au contenu de ma page. Pour illustrer ce que je cherche à faire… plutôt que « avantages », je voudrais « avantages de telle méthode »…
Merci encore
Camilou

pour qu’un article ait comme url_propre le descriptif de sa rubrique
(attention ! ne peut fonctionner que si l’article est unique
dans sa rubrique sinon tous les articles de la même rubrique
seront dotés de la même url_propre !)
et pour qu’une rubrique ait comme url_propre son propre descriptif

1- au cas où le descriptif de la rubrique n’est pas renseigné,
url_propre sera bâtie à partir du titre de l’objet
2- ne concerne que la création des nouvelles url_propres ;
les anciennes ne sont pas affectées

dans la fonction _generer_url_propre() de ecrire/url/propres.php,
aux alentours de la ligne 80,
modifier pour arriver à :

[…]
// Sinon, creer l’URL
include_spip(‹ inc/filtres ›);
include_spip(‹ inc/charsets ›);
/******** modification pour new_url /
if ($type == ‹ article ›) {
$srt = spip_query(« SELECT spip_rubriques.descriptif AS new_url,
spip_articles.titre AS old_url
FROM spip_rubriques, spip_articles
WHERE spip_rubriques.id_rubrique = spip_articles.id_rubrique
AND spip_articles.id_article = $id_objet »);
while($res = spip_fetch_array($srt)) {
if ($res[‹ new_url ›] != ‹  ›) {
$url = translitteration(corriger_caracteres(
supprimer_tags(extraire_multi($res[‹ new_url ›]))
));
}
else {
$url = translitteration(corriger_caracteres(
supprimer_tags(supprimer_numero(
extraire_multi($res[‹ old_url ›])
))
));
}
}
}
elseif ($type == ‹ rubrique ›) {
$srt = spip_query(« SELECT spip_rubriques.descriptif AS new_url,
spip_rubriques.titre AS old_url
FROM spip_rubriques
WHERE spip_rubriques.id_rubrique = $id_objet »);
while($res = spip_fetch_array($srt)) {
if ($res[‹ new_url ›] != ‹  ›) {
$url = translitteration(corriger_caracteres(
supprimer_tags(extraire_multi($res[‹ new_url ›]))
));
}
else {
$url = translitteration(corriger_caracteres(
supprimer_tags(supprimer_numero(
extraire_multi($res[‹ old_url ›])
))
));
}
}
}
else {
/
* fin modification pour new_url /
$url = translitteration(corriger_caracteres(
supprimer_tags(supprimer_numero(
extraire_multi($row[‹ titre ›])
))
));
/
* modification pour new_url /
}
/
* fin modification pour new_url *******/

$url = @preg_replace(‹ ,[[:punct:][:space:]]+,u ›, ’ ', $url);
// S’il reste trop de caracteres non latins, ou trop peu
[…]

à la suite quoi, il te faudra modifier/mettre-à-jour les url_propres
existantes dans tes tables articles et rubriques

camilou wrote:

J'ai trouvé ce plugin sur spip qui semble effectuer la même action : Plugin Effacer URLs propres - SPIP-Contrib.
Est-ce qu'en utilisant ce plugin après avoir modifier le code de mon fichier, j'obtiendrais bien le même résultat qu'en intervenant sur la bdd ?

ce plugin efface en bloc le champ url_propre des tables articles, rubriques... que tu sélectionnes.

il met à jour l'url_propre d'un objet à la fois
sans suivre les règles de ecrire/urls/url_propres.php
ce qui te permet, hélas, d'avoir des url du type
http://site.com/Voici-le%20<titré>%20de%20ça.html
pour avoir entré
http://site.com/Voici-le <titré> de ça.html
ou encore (et là : boum 404)
http://site.com/Voici-le%20<tit&é>%20d#%20ça.html
pour
http://site.com/Voici-le <tit&é> d# ça.html

bref, pour ré-emplir (mettre à jour) en bloc tous les champs url_propre d'une table (articles ou rubriques dans ton cas), il te faudra coder un petit bout de script perso.
par exemple (à adapter sans doute) :
<?php
include_spip('ecrire/urls/propres.php');
// pour les url_propre des rubriques
$req_rub = spip_query("SELECT id_rubrique AS id_r
                          FROM spip_rubriques
                         WHERE 1");
while($res_rub = spip_fetch_array($req_rub)) {
   $id_r = $res_rub['id_r'];
   spip_query("UPDATE spip_rubriques
                  SET url_propre = ''
                WHERE id_rubrique = $id_r");
   $new_url_rub = _generer_url_propre('rubriques', $id_r);
}
// pour les url_propre des articles
$req_art = spip_query("SELECT id_article AS id_a
                          FROM spip_articles
                         WHERE 1");
while($res_art = spip_fetch_array($req_art)) {
   $id_a = $res_art['id_a'];
   spip_query("UPDATE spip_articles
                  SET url_propre = ''
                WHERE id_article = $id_a");
   $new_url_art = _generer_url_propre('articles', $id_a);
}
?>
tu nommes ton script mes_urls.html et tu l'appelles par
http://mon_site.com/?page=mes_urls