Salut à tous !
-> la technique "du renard boiteux", c'est moi qui l'ai inventée, étant autodidacte, en général je me débrouille tout seul ...
Alors voilà ce que j'ai essayé de faire :
J'ai une interface back-end où on enregistre des produits.
Lors d'un enregistrement, une portion de code est ajoutée à mon sitemap afin de référencer le produit.
Je procède comme ceci :
Au tout début le sitemap (vide) avec un commentaire "ADDS"
Lors d'un enregistrement de produit, je remplace <!-- ADDS -->
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <!-- ADDS --> </urlset>
par ma nouvelle entrée de sitemap + <!-- ADDS --> (à la fin)
cf:
Alors là je crie ma joie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 // RECORD IN SITEMAP // specify timezone un-bug in my server $timezone = new DateTimeZone('Europe/Paris'); $date = new DateTime(null, $timezone); $timestamp = intval($date_prod); $date->setTimestamp($timestamp); $date_format = $date->format('Y-m-d'); // OPEN sitemap by file_get_contents($file); $path = '../sitemap.xml'; $sitemap = file_get_contents($path); // FORMAT THE TITLE IN CORRECT URL $format_title = res::suppr_accents($titre); // ID of the product (got before) $id = $rec_and_return_id; // contruct the new entry for sitemap $insert_in_sitemap = "<!-- PROD-ID-".$id." --> <url> <loc>https://".$_SERVER['SERVER_NAME']."/Bracelet/".$format_title."/".$id."-".$date_prod."</loc> <lastmod>".$date_format."</lastmod> <changefreq>weekly</changefreq> <priority>1.0</priority> </url> <!-- END-PROD-ID-".$id." --> <!-- ADDS -->"; // DO THE DUST $insert_in_sitemap_pre_reg = preg_replace("/\s\s+|\t/", "", $insert_in_sitemap); // replace the comm. ADDS by new entry on the str. $sitemap $insert_in_sitemap = str_replace('<!-- ADDS -->', $insert_in_sitemap_pre_reg, $sitemap); // PUT the new sitemap $record_sitemap = file_put_contents($path, $insert_in_sitemap);, ça fonctionne !
Je me dis alors, je refait l'inverse pour supprimer cette entrée au sitemap quand on supprime un produit, (simple, basique)
dans ma fonction suppr_prod($id)
je n'ai qu'à placer une regex qui me cherche
<!-- PROD-ID-".$id." --> Et tout ce qu'il y au millieu <!-- END-PROD-ID-".$id." -->
et je remplace par rien :
// et je ré-enregistre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $sitemap_replaced = preg_replace("/<!-- PROD-ID-".$id." -->.*<!-- END-PROD-ID-".$id." -->/", "", $sitemap);
Mais voilà après quelques heures devant le regex tester et ayant trouvé la bonne formule (magique) dans celui-ci, mon entrée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // PUT the new sitemap $record_new_sitemap = file_put_contents($path, $sitemap);
dans le sitemap n'est pas effacée ...
Je me retrouve obligé de faire un appel supplémentaire à la base de donnée avec l'id du produit,
de reconstruire une string identique à mon entrée avec les infos récoltées, de refaire tout un formatting ...
Bref, ça fonctionne, très bien même MAIS c'est la technique "du renard boiteux" ... c'est vilain et ça m'oblige de refaire un appel à la base,
ce que je trouve stupide et énergivore, d'autant plus que j'ai construit mon système pour me servir uniquement de l'ID du
produit ...
Merci de m'éclairer de vos réponses !
Raf
Partager